那里有最好的String重建算法? (最准确的'最准确')

时间:2013-07-26 15:32:29

标签: algorithm nlp

我一直在搜索和测试各种字符串重建算法,即将无空间文本重建为普通文本。

我的结果发布在Solution working partially in Ruby,正在 90%重建2或3个单词的句子,带有完整的字典。但我不能让它比这更好!

我认为我的算法受dynamic programming的启发很糟糕,并且包含很多补丁工作。

你能否提出另一种算法(伪代码),这种算法可以用完整的字典来实现万无一失?

2 个答案:

答案 0 :(得分:6)

您需要的不仅仅是字典,因为您可以从同一个无空间字符串中获得多个可能的短语。例如,“themessobig”可能是“乱七八糟”或“主题如此之大”或“如此大”,等等。

这些都是有效的可能性,但有些可能性高于其他可能性。因此,您想要做的就是选择最可能的语言实际使用方式。为此,您需要一个庞大的文本语料库和一些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)),这将需要更大的语料库才能生效。

这不是万无一失的,但你可以通过更好的语料库或调整算法来改善它。

答案 1 :(得分:0)

使用unigram语言模型,基本上是单词频率, 可以找到最可能的字符串分段。

Example code from Russell & Norvig (2003, p. 837)(寻找函数viterbi_segment)