私は大きな文字列のセットで同様の文字列のペアを検索しようとしています。私は約1億の文字列を持っており、文字列の類似性は編集距離として測定されます。たとえば、「これは文章です」、「これも文章です」などが類似しています。大規模な文字列の比較
各2つの文字列間の類似度を計算することは現実的ではなく、結果として100M×100Mの計算が行われます。私は、最初にストリングを「おおよそ似たような」サブセットにグループ化し、その後、サブセット内の各ストリングペアを計算するための分裂征服戦略を検討しています。例えば、
str1 = "this is a sentence"
str2 = "this is also a sentence"
str3 = "Mary loves elephants"
str4 = "Mary loves an elephant"
str5 = "Mark loves elephants"
私はサブセット[STR1、STR2]および他のサブセット[STR3、STR4、STR5]を持つように願って、私は次の5つの文字列を持っていると言います。次に、str1とstr2を比較して、それらが似ているかどうかを確認します。同様のペアを見つけるためにstr3、str4、str5も比較します。総計はC^2_5 = 10からC^2_2 + C^2_3 = 4に減少します。
分割は高速でなければならず、したがって正確である必要はありません。サブセットは重複する可能性があります。時には、同じサブセットに文字列の類似のペアが含まれていないことがある場合は受け入れ可能です。次に、近くのサブセットをスキャンします。
私は、文字列を整数に大まかにマッピングする(衝突は問題ではありません)、順序保持されたハッシュメソッドを見つけようとしていて、各文字列を近い整数で候補文字列と照合して確認しました。しかし、私はそのようなアルゴリズムを見つけることができません。
私はPythonを使用しています。解決策が別のプログラミング言語でのみ適用可能であれば、私は試してみます。
ありがとうございました。
一度遭遇した就職面接の仕事に著しく似ています。 – goodvibration
@goodvibrationいくつかのソリューションのアイデアを思い出してください。私は2つの科学出版ライブラリを整理する課題に直面しています。それぞれには約1億の学術論文タイトルが含まれています。私は出版年によって分け、紙のタイトルを比較し、計算をさらに減らすことを望んでいます。 – SillySnail