2012-03-01 45 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也涉及換位。