我一直在搜索和测试各种字符串重建算法,即将无空格文本重建为普通文本。
我在此处发布的结果解决方案在 Ruby中部分工作,对 2 或 3 个单词的句子进行 90% 的重建,并带有完整的字典。但我不能让它运行得比这个更好!
我认为我受动态编程启发的算法很糟糕,并且包含很多补丁工作。
你能提出另一种算法(伪代码),它可以在完整的字典中万无一失吗?
我一直在搜索和测试各种字符串重建算法,即将无空格文本重建为普通文本。
我在此处发布的结果解决方案在 Ruby中部分工作,对 2 或 3 个单词的句子进行 90% 的重建,并带有完整的字典。但我不能让它运行得比这个更好!
我认为我受动态编程启发的算法很糟糕,并且包含很多补丁工作。
你能提出另一种算法(伪代码),它可以在完整的字典中万无一失吗?
您需要的不仅仅是字典,因为您可以从同一个无空格字符串中获得多个可能的短语。例如,“themessobig”可以是“the mess so big”或“themes so big”或“the mes so big”等。
这些都是有效的可能性,但有些可能性比其他可能性大得多。因此,您要做的是根据语言的实际使用方式选择最有可能的一种。为此,您需要大量的文本语料库以及一些 NLP 算法。可能最简单的方法是计算一个词出现在另一个词之后的可能性。所以对于“这么大的烂摊子”,很可能是:
P(the | <START>) * P(mess | the) * P(so | mess) * P(big | so)
对于“如此大的主题”,可能性是:
P(themes | <START>) * P(so | themes) * P(big | so)
然后,您可以选择最有可能的可能性。您还可以构建三元组而不是元组(例如P(so | the + mess)
),这需要更大的语料库才能有效。
这不是万无一失的,但您可以通过拥有更好的语料库或调整算法来变得越来越好。
使用本质上是词频的一元语言模型,可以找到字符串的最可能分段。
Russell & Norvig (2003, p. 837)的示例代码(查找函数 viterbi_segment)