4

私は Java の初心者で、入力を事前定義された文字列のリストに一致させるプログラムを作成しようとしています。レーベンシュタイン距離を見てきましたが、次のような問題に直面しました。

「牛フィレ肉」などの入力がある場合は、「牛フィレ肉」に合わせたいと思います。問題は、レーベンシュタイン距離によれば、「牛肉のフィレ」が「マグロのフィレ」のようなものに近いということですが、これはもちろん間違っています。

これにはLuceneのようなものを使用する必要がありますか? Java クラス内で Lucene メソッドを使用していますか?

ありがとう!

4

3 に答える 3

2

入力文字列に対する検索語の関連性を計算する必要があります。Lucene には関連性の計算が組み込まれており、この記事はそれらを理解するための良い出発点になるかもしれません (スキャンしただけですが、かなり信頼できるようです)。

基本的なプロセスは次のとおりです。

  • 初期化: 検索用語をトークン化し、用語ごとに 1 つずつ、一連​​の に保存しますHashSet。または、各単語に異なる重みを付けたい場合HashMapは、単語がキーである場所を使用します。
  • 処理: 各入力文字列をトークン化し、検索用語の各セットを調べて、それらが入力にどの程度適用されるかを判断します。アルゴリズムの説明については、上記を参照してください。

スペルミスを処理する簡単な方法があります。初期化中に、検索用語の潜在的なスペルミスを含むセットを作成します。Peter Norvig の投稿「スペル修正プログラムの作成方法」では、このプロセスについて説明しています (Python コードを使用していますが、Java 実装ももちろん可能です)。

于 2011-04-07T13:42:11.690 に答える
1

レーベンシュタイン距離を文字ではなく単語に適用できるはずです。次に、単語を一致させるために、文字レベルでレーベンシュタインを再度適用して、「フィレ オブ ビーフ」の「フィレ」が「ビーフ フィレ」の「フィレ」と一致するようにします。

于 2011-04-07T15:15:36.327 に答える