如何将文本行转换为有意义的单词[重复]

Posted

技术标签:

【中文标题】如何将文本行转换为有意义的单词[重复]【英文标题】:How to convert line of text into meaningful words [duplicate] 【发布时间】:2018-02-13 19:05:48 【问题描述】:

我有一行字符串:

"specificationsinaccordancewithqualityaccreditedstandards"

需要拆分成分词如:

"specifications in accordance with quality accredited standards"

我试过nltkword_tokenize,但无法转换,

上下文:我正在将 PDF 文档解析为文本文件,这是我从 pdf 转换器返回的文本,用于将 pdf 转换为文本我在 Python 中使用 PDFminer

【问题讨论】:

还有其他 PDF 转换器可以试试吗?它不应该像那样把所有的词都混在一起。 您很可能会遇到模棱两可的问题。例如:该字符串中的第一个单词是“specific”(后面是“at”和“ion”,都是唯一的有效单词)还是“specification”? 您是否尝试通过搜索字典中的所有单词来强制使用您的方式?很确定您可以在英语词典中找到包含所有单词的库。 是的,这就是我找到解决方案的原因,谢谢 【参考方案1】:

您可以使用递归来解决这个问题。首先,您需要下载一个字典 txt 文件,您可以在此处获取该文件:https://github.com/Ajax12345/My-Python-Projects/blob/master/the_file.txt

dictionary = [i.strip('\n') for i in open('the_file.txt')]
def get_options(scrambled, flag, totals, last):
   if flag:
       return totals

   else:
       new_list = [i for i in dictionary if scrambled.startswith(i)]
       if new_list:

           possible_word = new_list[-1]
           new_totals = totals
           new_totals.append(possible_word)
           new_scrambled = scrambled[len(possible_word):]
           return get_options(new_scrambled, False, new_totals, possible_word)

        else:
            return get_options("", True, totals, '')


s = "specificationsinaccordancewithqualityaccreditedstandards"
print(' '.join(get_options(s, False, [], '')))

输出:

'specifications in accordance with quality accredited standards'

【讨论】:

这是我要找的,谢谢,字典也可以是动态的,包含我们已经找到的单词【参考方案2】:

您可以使用trietrie 是一种允许单词验证的数据结构。 这是一棵树,您可以在其中导航一个分支以查找有效前缀,并在您到达完整世界时收到通知。 虽然我从未“具体”使用过它,但我发现了这个 python 实现,datrie。 我的想法是导入datrie,使用它从txt 字典(例如here)生成trie,然后解析字符串。当您在 trie 中找到匹配项时读取每个字符的字符,如果没有找到匹配的单词,则将其添加到拆分单词字符串中。 您可以在 trie here on wikipedia 或 in this video 上找到更多信息(这是教我 trie 是什么的人)。

【讨论】:

以上是关于如何将文本行转换为有意义的单词[重复]的主要内容,如果未能解决你的问题,请参考以下文章

给定一个单词,通过在它们之间添加空格来形成一个有意义的单词

根据我的模式,输出不是一个有意义的词。任何人都可以识别不同的模式来输出有意义的单词吗

在 SQL 中将数字转换为单词 [重复]

NLP自然语言处理

将列表转换为字符串或单词[重复]

如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]