2012-03-01 11 views
1

これは、一般的なアルゴリズムは、あまりにもあなたがSolrのでは(最初の3行をスキップしてください)テキストでのSolrスペル修正アルゴリズム

を見れば、スペルチェックコンポーネントのために、私はの周波数を取得するためにextendedResultsを設定して読み取りを停止いけないしてくださいものです最良の頻度の単語を選択します。編集距離に基づいてスペルチェックアルゴリズムを理解します。たとえば、次のように

クエリのSolrへ:マリエン

スペルチェック返されたテキスト:マリン(FREQ:120)、市場(FREQ:900)など。ここの私の辞書は、索引語に基づいています。

私は市場を選んだが(頻度は多い)、私の意図は海洋だったので間違っている。両方とも編集距離が2です。

ここで、市場ではなく海洋を選択するために、このアルゴリズムを改善するにはどうすればよいですか?

「soundex」アルゴリズムも組み込む必要がありますか?

私はすぐに実装できる簡単なものを探しています。

私はPeter Norvigのスペルコレクタアルゴリズム(これは素晴らしい)を使ってみましたが、同じ問題が発生しました。

+0

soundex **の音を追加すると**私には良いことです。あなたが良い "soundex"を見つけたら、与えられた単語に対して、それをユーザに提案してください。そうでない場合は、freqとdistanceの2つの変数を使用します。 – vulkanino

答えて

0

私はsoundex/metaphoneアルゴリズムをEdit Distance + Transpositionの上に使用しました&それは素晴らしいです。

0

すべてこれはランキング問題です。あなたが何をする必要があるいくつかの信号を取る方法を作成するいくつかの数式を使用して各単語に重要性を与える&。あなたが単語を取り込んだ後に、ユーザが&とタイプした後に、ランカーが絵になる。この段階では、ランカーが写真のどこに来るかを結果を注文する必要があります。

ここで特定の問題に対処してください。あなたのランク付け関数は2つの信号(周波数& soundex)を受け取るだけです。 marketの代わりにmarineが必要な場合は、soundexの信号に多くの重みを付けてください。&周波数に対する重み付けが小さくなります(例:70/30)。これらの加重は試行&のエラーに基づいてemperically調整することができますか、または機械学習することができます。そのようにして、他のケースでは正確な単語の出現頻度は完全に無視されているわけではありません。

+0

あなたの答えをありがとう!ランキングに問題があることは分かっています。私は特に私のスペルチェックアルゴリズムを改善することをsoundexに頼んでいました。それを改善するためにいくつかの他のテクニックを使うことができますか?私はここであなたが "Ranking"というものについて話していると思いますが、この場合は本当に必要ではありません。 +1 – Yavar

3

トランスポーズを認識するメトリックを使用して結果を改善することができます。 'marien'は2つの置換によって 'marine'とは異なりますが、1つのトランスポーズのみであるため、市場'。

古典的なレーベンシュタイン編集距離測定は、挿入、削除、および置換のみを扱います。しかし、Damerau–Levenshtein distanceも転位を取り扱っています。

関連する問題