0

背景: 大規模な人のデータベースがあり、重複を探したいのですが、これは思ったよりも困難です。私はすでに、名前 (綴りが異なることが多い) や生年月日などを比較しています。2 つのプロファイルがマッチング アルゴリズムに十分に類似していると思われる場合、それらはオペレーターに提示され、オペレーターが判断します。

ほとんどのプロファイルには複数の電話番号が添付されているため、それらを使用して重複を見つけたいと考えています。それらは「001-555-123456」として入力できますが、「555-123456」、「555-123456-7-8」、「555-123456 call me in the evening」など、想像できるものなら何でも入力できます。私の最初のアイデアは、すべての非数値文字を取り除き、「最長の共通部分文字列」を取得することです。セット内の最長の共通部分文字列を見つけるアルゴリズムはたくさんあります。しかし、2 つのプロファイル A と B を比較すると、電話番号が 2 セットあります。セット A の文字列とセット B の文字列の間で最も長い部分文字列を見つけたいのですが、そのようなアルゴリズムを見つけるのを手伝ってくれませんか? 私は通常、PHP でプログラミングします。SQL のみのソリューションはさらに優れていますが、他の言語でも問題ありません。

4

2 に答える 2

1

Voitcus が前に言ったように、比較または重複の検索を開始する前に、まずデータをクリーンアップする必要があります。電話番号は厳密なパターンに従う必要があります。パターンに一致しない数字については、パターンに合わせて調整してください。次に、重複を探すことができます。

さらに、おそらく別の列で、永続化する前にデータクリーニングを行う必要があります。重複を探すときにそれを気にする必要はありません...パフォーマンスのピークを避けるためだけです。

levenshtein や PHP の similar_text() のようなアルゴリズムは、そのユースケースにはあまり適していません。

于 2013-05-16T12:19:20.513 に答える