각 문자 뒤에 여분의 공백이 추가된 많은 양의 텍스트가 포함된 텍스트 문서가 있습니다!
예:
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이 만든 특수 라이브러리