2016-09-11 21 views
2

は私が文を持っていると言う:「ジョンは彼のランボルギーニガヤルドに比べより彼のランボルギーニ・ウラカンに彼のペット子羊を取るのが好き」と私は、「ランボルギーニ」を含む辞書を持っています」 Lamborghini Gallardo "と" Lamborghini Huracan "があります。 "Lamborghini Gallardo"と "Lamborghini Huracan"というフレーズマッチや他の部分的なマッチ "Lamborghini"と "lamb"を実現する、大胆な用語を抽出する良い方法は何ですか?フレーズマッチを個別のキーワードに優先させる部分と完全フレーズ一致

弾性検索では、正確な用語一致、一致フレーズ、部分一致が提供されます。厳密な用語は明らかにここでは機能しません。この場合、文全体がフレーズとみなされるため、一致フレーズもどちらも一致しません。私は、文に関心のあるキーワードしかない場合、部分一致が適切であると信じています。以前のSOスレッドを調べると、関連すると思われるproximity for relevanceが見つかりましたが、これはしきい値を設定する必要があるため、これが「最善のオプション」であるかどうかわかりません。または、たとえelasticsearchよりも単純で優れた選択肢があるとしても(データベースとの単純なキーワードマッチングではなく、フルテキスト検索のほうが多いようです)

答えて

2

あなたは統制語彙(業界用語やフレーズの辞書)を使用して文書からキーフレーズ抽出を実行したいようですね。

は、[上記イタリック体の用語あなたは上の関連する答えを見つけるのを助けるためにSOとGoogle]


分析のこのレベルは、自然言語処理スタックにビットサーチスタックの外に表示されます。 NLPはリソースを大量に消費する傾向があるため、オフラインで、または検索アプリケーションの場合はインデックス時に発生する傾向があります。

はこれを実装するには、したい:

  1. は、各ドキュメントの認識キーフレーズのリストを生成するためにあなたの検索インデックスコードに、キーフレーズ抽出ツールを統合します。
  2. shinglesというキーワードを新しいElasticsearchフィールドに追加します。
  3. クエリー時に検索されたフィールドのリストにこのshingled keyphraseフィールドを含めます。スコアアップの可能性が最も高いでしょう。

制御されたキーフレーズ抽出の手助けとなる迅速なツールについては、KEA(javaで書かれています)をご覧ください。

(あなたはまた、おそらくあなた自身を書くことができますが、あなたはまた、訓練された抽出は、より良いサービスを提供します。More tools hereを、同様ではない辞書に制御されていないキーフレーズを()を抽出することを望んでいる場合。)

+0

をいただき、ありがとうございますあなたの有益な返事ピーター。私の語彙には、(文書ではなく)照合したいキーワードとフレーズが含まれているため、データベースには帯状疱疹は必要ありません。私は帯状疱疹をもう一方の方法で使うことを考えていました。ユーザー検索用語から帯状疱疹を作成し、これらの帯状疱疹との「正常な」正確な一致照会を実行して、バイグラムまたはトリグラムを同定するか、または部分一致および最長一致帯状疱疹のスコアを高める(デフォルトで行う)。そうすれば、私はスペルミスをチェックしたり、キーフレーズを特定することもできます。これは理にかなっていますか? – dter

+1

正しい。帯状疱疹は、あなたのキーフレーズ内の単一の用語の一致を避けるために、クエリ側であなたを助けます。あなたはおそらくフレーズクエリーと似たようなことをすることができますが、サーチャーによって入力された用語を制御することはできないので、うねりがあなたの希望する場所に近づくかもしれません。 –

+0

この方法では、シングルスがbigrams/trigramのマッチングを有効にすることを望んでいます。ファジーフィルタはタイプミスを可能にし、ブーストは最も近いマッチを与え、同義語は同義語にマッチします。このアプローチがより単純で、より均等に)名前付きエンティティ認識モデルを訓練するのに効果的なのかどうかは疑問です... – dter

関連する問題