简单单词自动填充只显示与已键入的字符匹配的单词列表。但我想根据出现的单词的概率,根据之前输入的单词,依据文本语料库的统计模型,对自动完成列表中的单词进行排序。我需要什么算法和数据结构?你能给我一些好的教程链接吗?
答案 0 :(得分:10)
您不需要自动完成的概率。相反,构建一个prefix tree(又名一个 trie ),将语料库中的单词作为键,将其频率作为值。当你遇到一个部分字符串时,尽可能地走trie,然后从你到达的点生成所有后缀并按频率对它们进行排序。
当用户输入以前看不见的字符串时,只需将其添加到频率为1的trie中;当用户输入您看过的字符串时(可能通过从候选列表中选择它),增加其频率。
[注意你不能用概率模型进行简单的增量;在最坏的情况下,你必须重新计算模型中的所有概率。]
如果你想深入研究这种算法,我强烈建议你阅读Jurafsky和Martin的Speech and Language Processing的第一章。它非常详细地处理语言处理的离散概率。
答案 1 :(得分:4)
Peter Norvig撰写了一篇文章How to Write a Spelling Corrector,解释了Google的你的意思是什么......?功能使用贝叶斯推理使其有效。这是一个非常好的阅读,应该适用于自动完成功能。