我需要在C中实现拼写检查。基本上,我需要所有标准操作...我需要能够拼写检查一个文本块,提出单词建议并动态地向索引添加新单词。 / p>
我有点想写这个,我真的不知道从哪里开始。
答案 0 :(得分:26)
阅读Tree Traversal。基本概念如下:
一个非常简短的例子:
词典:
apex apple的任命
树:( *
表示有效的结尾)
更新:感谢Curt Sampson指出此数据结构称为Patricia Tree
A -> P -> E -> X*
\\-> P -> L -> E*
\\-> O -> I -> N -> T* -> E -> D*
文件:
apple appint ape
结果:
A -> P -> P
,但第二个P
没有I
子节点,因此搜索失败。
E
中的A -> P -> E
节点没有设置“有效词尾”标志。
编辑:有关拼写建议的更多详细信息,请查看Levenshtein Distance,它会衡量将一个字符串转换为另一个字符串时必须进行的最小更改次数。最好的建议是与错误拼写单词的Levenshtein距离最小的字典单词。
答案 1 :(得分:3)
鉴于你不知道从哪里开始,我建议使用现有的解决方案。例如,请参阅aspell (GLPL许可)。如果您真的必须自己实施,请告诉我们原因。
答案 2 :(得分:1)
应该看一下前缀和后缀。
突然=突然+ ly。
通过删除ly,你可以远离存储根词。
同样 preallocate = pre + allocate。
lovely = love + ing + ly 因为 ing 的英语规则被调用,所以会变得有点复杂。
还可以使用某种散列函数来映射根词 特定位是一个大位映射,作为确定根单词是否拼写正确的恒定时间方法。
通过尝试为拼写错误的单词提供可能正确拼写的备用列表,您可以变得更加复杂。您可以研究soundex算法以获得一些想法。
我会建议使用一小组单词进行原型设计。进行大量测试,然后进行扩展。 这是一个很好的教育问题。
答案 3 :(得分:0)
将一个单词拆分为根和后缀是一个知道的“Porter Stemming算法”,它是将英语ditionary装入一个非常小的内存的好方法。
它对搜索也很有用,所以“拼写检查”也会找到“拼写检查”和“拼写检查”
答案 4 :(得分:0)
答案 5 :(得分:0)
Open Office拼写检查器Hunspell可以是一个很好的起点。这是主页: Hunspell at Sourceforge
答案 6 :(得分:0)
一种这样的方法,我将使用的方法是Levenshteinn String Similarity,它查看为了制作另一个单词,必须在一个单词中添加,删除或交换多少个字母。
如果你说spelled:Country as Contry。 levenshtein字符串相似性为1,因为你只需要添加1个字母就可以将contry转换为country。
然后,您可以遍历所有可能正确的单词拼写(只有171,000个英语单词,其中3000个占95%的文本)。确定具有最低levenshtein字符串相似度值的那些,然后返回与拼写错误的单词最相似的前X个单词。
有一个很棒的python包名为Fuzzy Wuzzy,可以有效地实现这一点,并根据这个公式在两个单词或句子之间产生%相似性。