我一直在搜索和测试各种字符串重建算法,即将无空间文本重建为普通文本。
我的结果发布在Solution working partially in Ruby,正在 90%重建2或3个单词的句子,带有完整的字典。但我不能让它比这更好!
我认为我的算法受dynamic programming的启发很糟糕,并且包含很多补丁工作。
你能否提出另一种算法(伪代码),这种算法可以用完整的字典来实现万无一失?
答案 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)