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

Spell Checker using Ternary Search tree

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

例如:如果我想在拼写检查器中搜索单词 "Manly" 并且如果该单词不存在于 TST 中,那么它会输出类似这样的单词:

你的意思是:"Man" "Mango" .

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

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

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

在你的例子中(假设 "manly" 不在你的字典中,虽然它是一个词),建议 "mainly" 比 "mango" 更有可能,但它赢了' 通过从最长匹配前缀开始的扫描找到。

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

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

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

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

3) 您可以在由 searchTST 编辑的节点 return 上使用类似 traverseTST 的内容,以便生成以该前缀开头的所有单词。