拼写校正算法

时间:2012-03-01 11:52:38

标签: java algorithm solr lucene spell-checking

这也是通用算法的东西所以如果你看到文本中的solr请不要停止阅读(请跳过前3行)

在Solr中,对于拼写检查组件,我设置extendedResults以获取更正后的单词的频率,然后选择具有最佳频率的单词。我理解基于编辑距离的拼写检查算法。举个例子:

向Solr查询:Marien

返回拼写检查文本:Marine(Freq:120),Market(Freq:900)等。我的词典基于索引词。

所以我选择市场(更多频率)然而这是错误的,因为我的意图是海洋的。编辑距离均为2。

现在我如何改进此算法来选择海洋而不是市场(基于不仅仅是编辑距离和频率的东西)?

我是否还要加入一些“soundex”算法?

我正在寻找可以快速实施的简单内容。

我甚至尝试过使用Peter Norvig的拼写纠正算法(这很棒),但我又遇到了同样的问题。

3 个答案:

答案 0 :(得分:3)

在这种特殊情况下,你可以通过使用一个识别换位的指标来改善结果 - 'marien'与'marine'的两个替换不同,但只有一个换位,所以如果你这样做,它似乎比'市场更接近' ”。

经典的Levenshtein编辑距离测量仅处理插入,删除和替换。但是,Damerau–Levenshtein distance也会处理转置问题。

答案 1 :(得分:0)

所有这些都是排名问题。你需要做的是创建一个方法,它将采取几个信号&使用一些公式对每个单词都很重要。用户输入后,排名将进入画面。你拿完文字后。在这个阶段,您需要订购排名者进入图片的结果。

现在解决您的具体问题。让我们说你的排名函数只需要2个信号(频率和soundex)。如果你想要marine代替market,你需要做的就是给soundex信号增加更多的权重&频率减少(假设为70/30)。这些重量可以根据试验和实际情况进行实际调整。错误或他们可以机器学习。那样在其他情况下准确的单词出现频率并没有完全被忽略它还有一些说法。

答案 2 :(得分:0)

我在编辑距离+换位& amp;它工作得很好。