【问题标题】:Replace extra spaces in word inside string替换字符串内单词中的多余空格
【发布时间】:2017-06-14 20:20:19
【问题描述】:

我有一个庞大的字符串列表,我正在遍历这些字符串以创建字典。我不知道每个字符串会是什么,因为它是从一个充满表格的文档中解析出来的。

有时字符串中会有多余的空格,或者单词中间有一个空格,而单词文档中没有。

有没有办法检测单词之间的多余空格,以及单词之间的多余空格。

示例

myString = 'I have  N o other way to get here'
myString = detectedDoubleSpace_After_Have_AndSpace_In_Middle_Of_No(myString.replace(stuff))

我知道正则表达式、替换函数、strip、lstrip、rstrip。 但是,我不知道如何专门查找单词中间的双空格或空格。

编辑

显然这是一项艰巨的任务,因为检测什么是词和不是词是一个问题,我没有考虑过。

【问题讨论】:

  • 没有简单的方法来检测hel lo 是一个词还是两个词。您可能应该搜索一些语料库并构建一个字典/一组有效词,然后假设您遇到的任何无效词实际上是一个单词被空格分成两个。
  • 很难知道什么是有效词,除非你建立一个字典。例如,to get her 是 3 个单词的有效集合,或者是一个包含两个空格的单词 (together) 的无效集合...看到问题了吗?
  • @Coldspeed 这将是一项巨大的工作,因为我正在从 Word 文档中解析这些列表。我希望可能有一种相当简单的方法来使用正则表达式。如果没有,我可以忍受。
  • 我建议你修复你的解析,这样它就不会在不应该存在的单词之间放置空格
  • 我在从 ocred PDF 进行文本挖掘时遇到了同样的问题。很多额外的空间。我所做的是提取所有 2-gram,然后如果两侧之一不在我的字典中(变形词列表)并且串联是,那么建议将它们进行人工审查。不过我没用英文写。如果你找到一个很好的屈折英语单词列表,我想我明天可以给你一个令人满意的解决方案

标签: python regex string replace


【解决方案1】:

好的,您的第一个问题很容易解决。您需要做的就是使用正则表达式来删除单词之间的双空格。

import re
your_text = ... # some text here

your_text_without_extra_spaces = re.sub('[\s]+', ' ', your_text, flags=re.M)

第二个问题没那么简单。但是,您可以做的一种方法是寻找一些巨大的英语语料库并从中构建一个集合/字典。

或者,您可以使用 NLTK 包,并检查字符串中单词的同义词。

from nltk.corpus import wordnet

processed_text = ''
i = 0
words = your_text_without_extra_spaces.split()
while i < len(words):
    if not wordnet.synsets(words[i]) and i < len(words) - 1 and not wordnet.synsets(words[i + 1]):
        processed_text += words[i] + words[i + 1] + ' '
        i += 2
    else:
        processed_text += words[i] + ' '
        i += 1

如果您在安装 wordnet 时遇到问题或想尝试其他方法,请参考this article

【讨论】:

    【解决方案2】:

    尝试\s\s 匹配两个单词之间的双空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多