删除文本中字母之间多余空格的脚本

删除文本中字母之间多余空格的脚本

我有一个文本文档,其中有大量文本,每个字母后都添加了额外的空格!

例子:

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…

请注意,有一个额外的每个字母后都有一个空格,因此连续的单词之间有两个空格。

有什么方法可以获取awksed删除多余的空格吗? (不幸的是,这个文本文档很大,手动浏览需要很长时间。)  我意识到这可能是一个更复杂的问题,只需一个简单的 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

它从左到右处理并在下一个单词之后找到一个最长的单词。

显然,在这里,这不是最好的单词选择,因为该句子没有任何意义,但要想出正确的单词,您需要能够理解文本的语法或含义的工具,或者至少需要一些统计数据有关哪些单词可能被组合在一起以得出最可能的单词集的信息。看起来解决方案是林恩创建的专门图书馆

相关内容