2008-12-07 58 views

回答

34

你應該查看contrib中的SpellChecker模塊。它是Java lucene的SpellChecker模塊的一個端口,所以它的documentation應該是有幫助的。

(從的javadoc :)

實例應用:

import org.apache.lucene.search.spell.SpellChecker; 

    SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); 
    // To index a field of a user index: 
    spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); 
    // To index a file containing words: 
    spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt"))); 
    String[] suggestions = spellchecker.suggestSimilar("misspelt", 5); 
+1

這是正確的答案,應該接受!正是我在找的;) – 2009-09-24 22:15:06

6

AFAIK Lucene支持接近的搜索,這意味着,如果你使用類似:

領域:stirng〜0.5

(這是個波浪線符號)

將匹配 「弦」。浮點數是如何「寬容」的搜索,其中1.0是完全匹配和0.0匹配的一切(有點)。

不同的解析器會實現這個不同的方式。

接近搜索比模糊搜索(stri *)慢得多,所以請謹慎使用它。就你而言,人們會假設,如果你在常規搜索中找不到匹配項,就嘗試使用鄰近搜索來查看你找到的內容,並根據結果以某種方式呈現「你的意思」。

由於性能原因,對於緩存這種查找非常常見的錯誤拼寫可能很有用。

1

Google的「你的意思是?」是(可能;當然他們是祕密的)通過諮詢他們的查詢日誌來實現。查看搜索您正在處理的查詢的用戶是否搜索到了與之後非常相似的內容;如果是這樣,這表明他們犯了一個錯誤,並意識到他們應該尋找什麼。

既然您可能沒有龐大的查詢日誌,您可以近似它。接受查詢,拆分術語,查看數據庫中是否有任何類似術語(通過編輯距離,無論如何);用附近的術語替換您的術語,然後重新運行查詢。如果你得到更多的點擊,這可能是一個更好的查詢。建議給用戶。 (既然你已經有了點擊率,而且大多數人只看最前面的2個結果,那就給他們看。)

+0

在這裏http://norvig.com/spell-correct.html有一個簡單的解釋,「這是你的意思」,這是一個非常有趣的閱讀。 – 2010-10-06 21:58:02

0

看看谷歌稱爲semanticvectors代碼項目。 關於Lucene郵件列表的討論,關於如何使用它的功能,不管它是用java編寫的,還是有相當數量的討論。

您可能需要在搜索日誌中解析和使用一些機器學習算法來構建這樣的功能!

相關問題