自动纠正算法

时间:2013-12-11 07:34:55

标签: c++ algorithm data-structures tree

我想在C ++中实现以下内容:

1)检查字典中是否存在给定的单词。字典文件是一个巨大的文件;考虑100MB或3-4百万字。

2)建议更正错误的单词。

3)自动填充功能。

我的方法

1)我打算建一棵树,所以搜索效率会很高。

2)我没有得到如何实现自动校正功能。

3)我可以使用树实现自动完成功能

My tree Image

实现上述所有功能的最佳数据结构和算法是什么?

3 个答案:

答案 0 :(得分:3)

我一直在研究同样的问题。到目前为止,我遇到的最佳解决方案是使用三元搜索树进行自动完成。三元搜索树比尝试更节省空间。 如果我无法在我的三元搜索树中找到查找的字符串,那么我使用已经构建的BK树来查找最接近的匹配。 BK Tree内部使用Levenshtein距离。 你

你也可能想要探索元音,但是我还没有进入metaphone的深度。

如果你愿意的话,我有一个用于BK TREE + TERNARY SEARCH TREE的Java解决方案。

答案 1 :(得分:2)

您可以通过查看给定子树中的所有字符串来执行自动完成。一些分数可以帮助你挑选可能有所帮助。这就像你有“te”一样,你可以沿着trie中的那条路走下去并遍历那里的整个子树以获得所有可能的结局。

对于更正,您需要在树上实现http://en.wikipedia.org/wiki/Levenshtein_distance之类的内容。您可以使用以下事实:如果您在trie中处理了给定路径,则可以将结果重用于路径末尾的子树中的所有字符串。

答案 2 :(得分:1)