テキスト内の文字間の余分なスペースを削除するスクリプト

テキスト内の文字間の余分なスペースを削除するスクリプト

各文字の後に余分なスペースが追加された大量のテキストを含むテキスト文書があります。

例:

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␣ ␣c␣a␣l␣␣p␣u␣r␣p␣o␣s␣e␣␣w␣h␣i␣c␣h␣␣i␣s␣␣m␣o␣r␣e m␣p␣o␣r␣t␣a␣n␣t…

以下があります。追加各文字の後にスペースがあるため、連続する単語の間にスペースが2つあります。

余分なスペースを確保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によって作成された特別なライブラリ

関連情報