首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用三元搜索树的拼写检查器

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

Stack Overflow用户
提问于 2015-03-19 15:17:37
回答 2查看 1K关注 0票数 0

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

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

你的意思是:“人”“芒果”。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 16:56:58

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

在您的示例中(假设"manly“不在您的字典中,尽管它是一个单词),这个建议”主要“比"mango”更有可能,但它不会通过以最长匹配前缀开始的扫描来找到。

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

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

代码语言:javascript
复制
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的内容,以便生成以该前缀开头的所有单词。

票数 1
EN

Stack Overflow用户

发布于 2015-03-19 15:47:47

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29148433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档