私の要件は、あいまいフレーズ検索で一致スコアを生成することです。例
1) 入力データ - こんにちは、サム、お元気ですか? ありがとう、スミス。
- インデックス付きドキュメント - Sam Smith (ドキュメントは常に個人/組織名であり、入力データはフリーテキスト データになります)
上記の場合、私の入力データには Sam と Smith の両方が見つかりましたが、文脈上は両方とも別の人物です。入力データが「Hello Sam Smith」である場合、より高いスコアで関連するヒットを取得する必要があります (「Hello Sam John Smith」などについても OK スコアを期待しています)。
ここではプライマリ フィルタリングに Lucene を使用しており、後で入力データを使用して一致したドキュメントを後処理し、(レーベンシュタインを使用して) 一致スコアを定義します。ファジーでも機能するはずです。
的確なアプローチ、
1) Tri-Grams として文書を索引付けする
2) 入力したフリーテキストデータを Tri-Gram インデックスで検索
3)一致するすべてのドキュメントを収集します(これにはまだ多くのノイズデータがあります)
4) 一致したすべてのドキュメントを後処理し、入力フリー テキスト データ内の一致したすべてのトライグラム トークンの位置を定義し、可能な位置トークンとドキュメント全体の間のレーベンシュタイン スコアを計算します。
例 - こんにちは、サム、お元気ですか? ありがとう、スミス。
ここで、ドキュメントの一致は「Sam Smith」になります。次のように、インデックスの各トライグラムと、入力されたフリー テキスト データでのその位置の一致を調べたいと思います。
1) 入力データの 2 番目の位置の単語「Sam」と一致するトークン「sam」
2) 入力データの 8 番目の単語「Smith」と一致するトークン「smi」
後で、実際に一致したドキュメントでトークン 2、8 のレーベンシュタイン スコアを計算するロジックを記述します (位置 2 と 8 の間の近接性を考慮すると、スコアは非常に低くなります)。ただし、トークンの位置が 2,3 (または 2,4) の場合、良いスコアを与えたでしょう。
このアプローチに関する専門家からのフィードバック、またはより良い提案を希望します。ありがとうございます。