使用三元搜索树的拼写检查器

时间:2015-03-19 15:17:37

标签: algorithm data-structures spell-checking ternary-search-tree

我使用三元搜索树(TST)制作了一个拼写检查程序。 谁能告诉我如何找到TST中的下一个可能的单词?

例如:如果我想搜索单词" Manly"在拼写检查中,如果TST中没有该单词,那么它会输出近似这样的单词:

你的意思是:"男人" "芒果"

以下是实现三元搜索树的代码。 任何人都可以修改以找到最近的可能单词。 http://www.geeksforgeeks.org/ternary-search-tree/

2 个答案:

答案 0 :(得分:0)

您可以尝试使用通配符。例如,在搜索词的某处替换带有通配符的字母,然后将该单词拆分为两个子串并将它们插入到TST中。然后搜索所有模式,而不仅仅是完全匹配。它的工作原理是创建字典单词的每个前缀。但我建议尝试使用TST进行aho-corasick算法。

答案 1 :(得分:0)

拼写检查器可能希望找到与目标词最接近的匹配,而不是恰好具有相同前缀的词。 TST很擅长查找前缀,但是如果你想找到类似的单词,它们对你的帮助不大。

在你的例子中(假设“manly”不在你的字典中,虽然它是一个单词),“主要”的建议比“芒果”更有可能,但扫描开始时不会发现使用最长的匹配前缀。

但是,如果您希望从最长的匹配前缀开始扫描:

1)修改searchTST,使其返回struct Node*,并将最后一个else子句替换为:

else if (*(word+1) == '\0')
  return root;
else {
  struct Node* child = searchTST(root->eq, word+1);
  return child ? child : root;
}

2)searchTST现在将返回目标的最长匹配前缀的根。调用者必须检查返回的节点的isEndOfString标志是否已设置。

3)您可以在traverseTST返回的节点上使用searchTST之类的内容,以生成以该前缀开头的所有单词。