2011-05-16 7 views
2

구두점을 고려하여 자연어로 텍스트의 서식을 지정하려면 어떻게해야합니까? Vim의 gq 명령이나 명령 줄 도구 (예 : fmt 또는 par)는 구두점을 무시하고 줄 바꿈합니다.구두점 관련 텍스트 서식

we had everything before us, we had 
nothing before us, we were all going 
direct to Heaven, we were all going 
direct the other way 

smart_formatter -w 40 줄 것입니다 : : 물론

we had everything before us, 
we had nothing before us, 
we were all going direct to Heaven, 
we were all going direct the other way 

, 어떤 문장 부호가 내에서 발견되지 않을 때 경우가

fmt -w 40

내가 원하는 것을하지 준다, 내가 당신에게 예를 들게 주어진 텍스트 너비가 있으면 표준 텍스트 서식 지정 동작으로 폴백 할 수 있습니다.

내가 이것을 원했던 이유는 어떤 문장이나 subsent가 바뀌 었는지를 알 수있는 의미있는 diff 텍스트를 얻는 것입니다.

답변

0

매우 우아하지는 않지만, 나는 일하는 방법을 마침내 생각해 냈습니다. 구두점의 줄 바꿈은 6 자 정도 여야한다고 가정합니다. 다시 말하면, 난잡한 결과를 받아 들일 것이지만, "raggedness"가 6 자 미만이면 구두점으로 끝나는 줄이 더 많이 들어갑니다. 예를 들어 OK입니다 ("raggedness"는 3 자입니다).

Wait! 
He said. 

이 확인되지

Wait! 
He said to them. 

방법은 다음 더미 문자를 제거, 텍스트 서식, 각 문장 부호 후 6 개 더미 문자를 추가하는 것입니다 ("raggedness는"이상 6 자) . 여기

은 텍스트에 포함하지 않는 가정하면, 더미 문자 쌍으로 내가 _ 사용이

sed -e 's/\([.?!,]\)/\1 _ _ _/g' | fmt -w 34 | sed -e 's/ _//g' -e 's/_ //g' 

에 대한 코드 (공간 + 밑줄)입니다. 결과는 꽤 좋아 보인다.

we had everything before us, 
we had nothing before us, 
we were all going direct to 
Heaven, we were all going 
direct the other way