텍스트의 문자 사이의 추가 공백을 제거하는 스크립트

텍스트의 문자 사이의 추가 공백을 제거하는 스크립트

각 문자 뒤에 여분의 공백이 추가된 많은 양의 텍스트가 포함된 텍스트 문서가 있습니다!

예:

T h e  b o o k  a l s o  h a s  a n  a n a l y t i c a l  p u r p o s e  w h i c h  i s  m o r e  i m p o r t a n t…

시각적으로:

T␣h␣e␣␣b␣o␣o␣k␣␣a␣l␣s␣o␣␣h␣a␣s␣␣a␣n␣␣a␣n␣a␣l␣y␣t␣i ␣c␣a␣l␣␣p␣u␣r␣p␣o␣s␣e␣␣w␣h␣i␣c␣h␣␣i␣s␣␣m␣o␣r␣e␣␣i␣ m␣p␣o␣r␣t␣a␣n␣t…

다음 사항이 있습니다.추가의각 문자 뒤에 공백이 있으므로 연속된 단어 사이에는 공백이 두 개 있습니다.

추가 공간을 확보 awk하거나 제거 할 수 있는 방법이 있습니까 ? sed(안타깝게도 이 텍스트 문서는 크기가 커서 수동으로 탐색하는 데 시간이 오래 걸립니다.)  나는 이것이 일종의 텍스트 인식도 필요하기 때문에 간단한 bash 스크립트로 해결할 수 있는 더 복잡한 문제라는 것을 알고 있습니다.

이 문제를 어떻게 해결할 수 있나요?

답변1

사용wordsegment, 순수 Python 단어 분할 NLP 패키지:

$ pip install wordsegment
$ python2.7 -m wordsegment <<<"T h e b o o k a l s o h a s a n a n a l y t i c a l p u r p o s e w h i c h i s m o r e i m p o r t a n t"
the book also has an analytical purpose which is more important

답변2

다음 정규식은 공백 문자열의 첫 번째 공백을 제거합니다. 그러면 제대로 작동할 것입니다.

s/ ( *)/\1/g

그래서 이렇게 :

perl -i -pe 's/ ( *)/\1/g' infile.txt

...infile.txt를 "수정된" 버전으로 대체합니다.

답변3

입력에 단어 사이에 이중 공백이 포함되어 있다는 사실을 기반으로 하는 더 간단한 솔루션이 있습니다. 이중 공백을 사용하지 않는 문자로 변경하고 공백을 제거한 다음 사용하지 않는 문자를 다시 공백으로 변경하면 됩니다.

echo "T h e  b o o k  a l s o  h a s  a n  a n a l y t i c a l  p u r p o s e  w h i c h  i s  m o r e  i m p o r t a n t  " | sed 's/  /\-/g;s/ //g;s/\-/ /g'

...산출:

이 책은 또한 더 중요한 분석 목적을 가지고 있습니다.

답변4

참고: 이 답변(여기의 다른 답변과 마찬가지로)은 다음을 기반으로 합니다.질문의 이전 버전단어가 분리되지 않은 곳. 새 버전은 다음과 같습니다.간단히 대답해.

다음과 같이 입력하면:

T h e b o o k a l s o h a s a n a n a l y t i c a l p u r p o s e w h i c h i s m o r e i m p o r t a n t

당신은 시도 할 수 있습니다:

 $ tr -d ' ' < file | grep -oiFf /usr/share/dict/words | paste -sd ' '
 The book also has ana na l y tic al purpose which ism ore important

왼쪽에서 오른쪽으로 처리하여 다음 단어 다음에 가장 긴 단어를 찾습니다.

분명히 문장이 의미가 없기 때문에 이것이 최선의 단어 선택은 아니지만 올바른 단어를 찾으려면 텍스트의 문법이나 의미를 이해할 수 있는 도구가 필요합니다. 또는 최소한 일부 통계가 필요합니다. 가장 가능성이 높은 단어 집합에 도달하기 위해 함께 그룹화되는 정보입니다. 해결책은 다음과 같습니다.lynn이 만든 특수 라이브러리

관련 정보