2012-11-30 30 views
2

我在Lucene.NET的contrib NuGet包v3.0.3中使用拼寫檢查器。Lucene Spellchecker排名奇怪的提議

拼寫檢查指數採用_spellChecker.IndexDictionary(new SpellChecker.Net.Search.Spell.LuceneDictionary(reader, "Name"));

我有是(我假設)問題創建由於帶狀皰疹的方法/正克工作,運行_spellChecker.SuggestSimilar("Wiess")不進球「韋斯」非常高。 「Witness」,「Wireless」和「Wills」的分數高於「Weiss」。

看起來「Weiss」應該得分高於「Wireless」。有沒有辦法我可以調整這個來獲得這個結果?

+0

我認爲它可能與拼寫檢查程序使用的語言有關? (抱歉,不知道lucene) – GameScripting

+0

拼寫檢查程序正在使用我提供的詞(名稱),所以語言應該不重要。 –

回答

2

你還沒有提供什麼是DOES的回報,所以我假設你只是不喜歡它給的東西,而不是它沒有給你什麼。

在Lucene文檔中,沒有一個採用1個參數的SuggestSimilar方法。我相信這是因爲你永遠不應該僅僅依靠一個結果,每API,最小參考建議參數的數量:

「,即如果numSug == 1,不要在建議計數是最好的一個。因此,您應該將此值設置爲至少5,這是一個很好的建議。「

我假設你可以提供第二個參數。嘗試將其設置得更高,並看看你得到了什麼。

編輯 -

好的。我懂了。也許一個簡單的Levenshtein距離風格算法會更符合你的需求。 Lucene 4.0爲此提供了一個(實驗性的)新拼寫檢查程序:DirectSpellChecker。另外,我相信一個簡單的FuzzyQuery也可以完成這項工作。這兩種方法中的任何一種都會刪除SpellChecker算法的各個方面,從而有效地簡化它,並且總體而言,您的結果可能會變得更糟。

注:

  • 「Wiess」 「韋斯」 距離2
  • 「Wiess」 「證人」 距離2
  • 「Wiess」, 「無線」 距離3
  • 「Wiess」「遺囑「距離2

所以,實際上,這可能不會讓你有太多。你可能會寫一個過濾器,偏好與查詢等長的結果,但這無助於區分Wills。那個你可能不得不忍受的人。

+0

對不起,原來的細節遺漏。起初我有5條建議,但「Weiss」目前出現在第32位。看來Lucene.NET還沒有包含DirectSpellChecker。我正在嘗試FuzzyQuery並將返回細節。謝謝。 –

+0

FuzzyQuery似乎很有用,但也沒有給我我想要的結果。我將嘗試編寫一個更喜歡* permutations *的過濾器。 –