2010-06-25 52 views
3

我在我的網站上實現了Lucenet.NET,使用它來爲我的產品編制索引,這些產品是倫敦周圍的劇院表演,旅遊和景點。Lucene.Net/SpellChecker - 基於多詞/短語的自動建議

我想實施「你的意思是?」功能用於用戶拼錯產品名稱時考慮到整個產品名稱而不僅僅是單個單詞。例如,

如果用戶鍵入:

LODNON眼

我想自動提示:

倫敦 倫敦眼

我想我NEAD有分析儀將標題索引好像它們是單個實體一樣,以便SpellChecker可以在短語上最接近匹配,以及單個單詞。

我該怎麼做?

回答

7

我剛剛在lucene.net中實現了一個詞組autosuggest系統。

基本上,lucene的java版本在其中一個contrib文件夾中有一個shinglefilter,它將一個句子分解爲所有可能的短語組合。不幸的是,lucene.nets contrib過濾器還沒有完全實現,所以我們沒有過濾器。

但是,只要版本相同,用lucene.net就可以讀取用java編寫的lucene索引。所以我做了以下事情:

在lucene.net中使用spellcheck.IndexDictionary方法在jake scotts鏈接的「你的意思」部分中列出了一個法術索引。請注意,僅創建單個單詞的拼寫索引,而不是短語。

然後我創建了一個java應用程序,它使用木瓦過濾器創建我正在搜索的文本的短語並將其保存在臨時索引中。

然後,我在dotnet中編寫了另一個方法來打開這個臨時索引,並將每個短語作爲行或文檔添加到已包含單個單詞的拼寫索引中。訣竅是確保您添加的文檔與其他拼寫文檔具有相同的格式,因此我剔除了lucene.net項目中拼寫檢查代碼中使用的方法並編輯了這些文檔。

一旦你完成了這個工作,你可以調用spellcheck.suggestsimilar方法,並傳遞一個拼錯的短語,它會返回給你一個有效的建議。

+0

嗨,你可以請提供一些代碼示例,我試圖實現相同的,並有麻煩遵循你的指導。 – Naz 2012-03-08 18:37:11

+3

http://codingsmith.co.za/lucene-net-phrase-suggestion/ 納茲只爲你。希望這是有道理的 – spaceman 2012-03-13 17:55:52

+1

我能夠在您的博客文章之後實現多詞組自動建議。它看起來像最新的Lucene.net + contrib包含了shinglefilter,所以我可以通過擴展Sp​​ellChecker類來完成所有這些。再次感謝你的幫助。 – Naz 2012-03-17 15:24:26

0

這可能不是最好的解決方案,我肯定會使用太空人建議的答案,但這裏是另一種可能的解決方案。在每個標題上使用KeywordAnalyzer或KeywordTonenizer,這不會將標題分解爲單獨的標記,而是將其保存爲一個標記。使用SuggestSimilar方法會將整個標題作爲建議返回。