約 3 億のクエリに一致する約 700 万のフレーズのセットがあります。
クエリは部分文字列にすることも、フレーズ自体を含めることもできます。基本的に、2 つのフレーズ間の「類似性」の尺度が必要です [必ずしも編集距離ではありません]
誰かがこれを行うための効率的なアルゴリズムへの指針を与えることができますか? Pythonを使用したストリーミングを介してHadoopでこれを行うため、分散アルゴリズムを好みます。
ベッドの木は面白そうだ
B ed -Tree:編集距離に基づく文字列類似性検索のための万能インデックス構造(プレゼンテーションのPDF)
片側には非常に多くのデータがあり、反対側にはさらに多くのデータがあるため、これは少なくともそれほど重要ではありません。
最も簡単なアプローチは、7 mio の lucene インデックスです。フレーズを作成し、hadoop ジョブがインデックスを照会できるようにします。そのためにsolrサーバーが必要かどうか、またはPythonでの同様の実装が必要かどうかはよくわかりません。
マッパーは、識別しなければならないものは何でも、フレーズ ID または行番号を書き出す必要があります。または、少なくともフレーズ自体と、マッチングスコア。
リデュース ステップでは、フレーズ キーをリダクションし、関連するすべてのフレーズをスコアとともに書き出すことができます。(またはあなたが望むもの)
類似性については、ここでさらに読むことができます:
Apache Lucene の類似性
Apache Lucene 自体