2

Lucene.NET contrib NuGet パッケージ v3.0.3 でスペルチェッカーを使用しています。

スペルチェッカー インデックスは次を使用して作成されます。 _spellChecker.IndexDictionary(new SpellChecker.Net.Search.Spell.LuceneDictionary(reader, "Name"));

私が抱えている問題は、帯状疱疹/nグラムの仕組みにより、ランニング_spellChecker.SuggestSimilar("Wiess")は「Weiss」のスコアが非常に高くないことです(私は推測しています)。「証人」、「ワイヤレス」、「ウィルズ」は「ワイス」よりも高得点。

「ワイヤレス」よりも「ワイス」の方が評価が高いようです。これを微調整してその結果を得る方法はありますか?

4

2 に答える 2

2

あなたは何を返すのかを提供していないので、何も返さないというよりも、それが与えるものが気に入らないだけだと思います。

Lucene のドキュメントには、引数を 1 つ取る SuggestSimilar メソッドはありません。これは、API ごとに 1 つの結果だけに依存してはならないためであると考えています。

「つまり、numSug == 1 の場合、その提案が最良のものであるとは考えないでください。したがって、適切な提案を行うには、この値を少なくとも 5に設定する必要があります。」

その2番目の引数を提供できると思います。より高く設定してみて、何が得られるかを確認してください。

編集 -

わかった。分かりました。おそらく、単純なレーベンシュタイン距離スタイルのアルゴリズムの方が、探しているものよりも適しているでしょう。Lucene 4.0 は、(実験的な) 新しいスペルチェッカー DirectSpellCheckerを提供します。また、単純なFuzzyQueryでも同様に機能すると思います。これらのアプローチのいずれも、SpellChecker アルゴリズムの側面を削除して効果的に単純化するため、全体として結果が悪化する可能性があります。

ノート:

  • "Wiess" "Weiss" 距離 2
  • 「Wiess」「Witness」距離 2
  • 「Wiess」「ワイヤレス」距離 3
  • 「Wiess」「Wills」距離 2

したがって、実際には、それではあまり成果が得られない可能性があります。おそらく、クエリと同じ長さの結果を優先するフィルターを作成できますが、それでは Will を区別することはできません。それはあなたが一緒に暮らす必要があるかもしれません。

于 2012-11-30T22:13:24.807 に答える
0

この質問は別の質問につながりました。回答を参照してください: Lucene SpellChecker Prefer Permutations または特別なスコアリング

正しい方向に向けてくれた femtoRgon に感謝します。

于 2012-12-03T22:13:11.477 に答える