2012-03-01 71 views
1

这是通用算法的东西太多,所以请不要停止阅读,如果你在文本中看到的Solr(请跳到第3行)拼写校正算法

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

查询到Solr:马里安

拼写检查文本返回:海洋(频率:120),市场(频率:900)等。我在这里的字典是基于索引单词。

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

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

我是否也必须包含一些“soundex”算法呢?

我正在寻找简单的东西,我可以快速实施。

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

+0

添加soundex **声音对我很好。对于一个给定的词,如果你找到一个好的“soundex”,然后建议给用户。如果不是,则继续处理另外两个变量:频率和距离。 – vulkanino 2012-03-01 11:58:28

回答

0

我在编辑距离+转置&上使用了soundex/metaphone算法,它工作得很好。

0

这一切都是排名问题。你需要做的是创建一个方法,将采取几个信号&使用一些公式重视每个单词。在用户在提取单词后输入&后,排序器将进入图片。在这个阶段,你需要将你的结果排序,这是排名进入图片的地方。

现在解决您的具体问题。可以说你的排名功能只需要2个信号(频率& soundex)。如果你想marine,而不是market所有你需要做的是给予soundex信号更多的权重&较低的频率(可以说70/30)。这些权重可以根据试错&错误进行修改,或者可以通过机器学习。这种方式在其他情况下准确的词语出现频率并不完全被忽略,但仍有一些说法。

+0

感谢您的回答!我知道这是排名问题。我特意要求soundex改进我的拼写检查算法,或者我可以使用其他一些技术来改进它。我认为在这里你正在谈论的是“学习排名”的东西,这在这种情况下并不是真正需要的。 +1 – Yavar 2012-03-06 19:22:26

3

在这种特殊情况下,你可以通过使用识别的换位度量改善结果 - “马里安”通过两次换人从“海洋”的区别,但只有一个换位,所以,如果你这样做,似乎比“接近市场'。

经典的Levenshtein编辑距离度量仅涉及插入,删除和替换。但是,Damerau–Levenshtein distance也涉及换位。