算法和数据结构最适合拼写检查器,字典和词库

时间:2009-10-06 08:21:32

标签: c++ c algorithm data-structures

实施

的最佳方式
  • 字典(有没有比Trie for Dictionary更好的DS)
  • 词库(不知道,因为匹配词的含义,含义相似)
  • 拼写检查程序(比哈希映射更好的东西),如果可能的话,使用正确的拼写建议。

当在一小时的采访中被问到时,我们是否希望为算法编写c / c ++代码?

5 个答案:

答案 0 :(得分:5)

请参阅this了解21行Python 2.5拼写纠正器和一些背景知识。

答案 1 :(得分:4)

对于字典,确实有一个优于trie的数据结构。尝试DAWG或CDAWG:http://en.wikipedia.org/wiki/Directed_acyclic_word_graph。只是为了使问题复杂化,我最喜欢的结构文章,Ciura和Deorowicz的“如何挤压词典”称它们为“最小的ADFA”。谷歌周围,你会发现很多竞争算法来构建这些野兽。祝你好运!

答案 2 :(得分:1)

另请查看Bloom filter

答案 3 :(得分:1)

对于字典,我会使用std::map(在.Net框架中调用Dictionary)集合,其中单词为key,自定义对象(包含单词+定义的所有信息)为值。

对于词库,最好的结构是一棵树,每个节点都是一个部分,每个分支都有一个对象,其中包含有关你必须显示的内容的所有信息。

答案 4 :(得分:1)

在所有三种情况下,您都可以从单词集构造BK树。 BK-Trees允许您查找输入单词的给定编辑距离内的所有单词。请参阅BK-Trees上的m y blog post,了解它们的工作原理。

字典和拼写检查器或多或少相同 - 字典只需要提供定义和单词。对于同义词库,单词被聚类成“同义词” - 同义词集 - 所有元素都插入到BK树中。当有人在synset中查找一个单词时,您将显示所有其他单词作为替代。单词可以出现在多个同义词集中,因此您需要确保您的BK-Tree节点可以处理给定键的多个值。