2009-09-18 14 views
2

私は重複を比較したい2つのテーブルを持っています。これらのテーブルは、名前、都市、州などの基本的な企業情報フィールドです。私が見ることができる唯一の共通フィールドは名前列ですが、名前は正確ではありません。 LIKE文を使用して2つの比較を実行できる方法はありますか?私は誰もが持っているかもしれない追加の提案にもオープンしています。2つのテーブルの間に共通のキーが存在しない場合は、2つのテーブルを比較できますか?

ありがとうございました。

答えて

3

より洗練されたSOUNDEXタイプのアルゴリズムであるDouble Metaphoneアルゴリズムを使用して照合しようとします。

ここにはMySQL implementationがあります。

+0

私は今そこに行くでしょう。 –

+0

これは本当に面白いです。 +1リンクに感謝します。 – Alterlife

+0

ダブルメタファンは健全なアプローチです。 +1 MySQL実装の場合 – APC

1

SOUNDEX()はある程度お手伝いします。しかし、それは完璧ではありません。

soundex(string1)は、string1とstring2のスペルが異なる場合でもsoundex(string2)と等しいと予想されます。しかし、私が言ったように、それは完全ではありません。

私が知る限り、これを完全に行う既存のアルゴリズムはありません。

+0

アルターライフの入力をありがとう。これは可能ではないようですが、試してみる価値がありました。私はいくつかのマーケティングリストを管理しようとしていますが、今は制御不能になっています。こんにちはOrbMan、そのリンクのためにありがとう、 –

2

この種のファジーマッチングを行うデータクレンジング製品を販売して、良い生活を送る企業があります。ですから、簡単な(または非常に複雑な)LIKEステートメントでこれを解決できるとは思われません。

あなたが必要とするものは、2つの文字列を比較して類似点を返すことができます.100%の点数は同じ意味です。 Jaro-Winkler algorithmのようなものです。代替アルゴリズムには、Metaphone(またはダブルメタフォン)とSoundex()が含まれます。 Soundex()は最も重大な解決策です。

代わりの解決方法は、専門テキストインデックスを使用することです。このアプローチのクールなことは、シソーラスを指定して無関係の違いをなくす同義語を指定できることです(INC = INCORPORATED、CO = COMPANYなど)。

OracleとSQL Serverにはこのようなツールが含まれていますが、私はMySQLに精通していません。

+0

に移動しています。このJaro-Winklerの距離は、一般的なLevenshteinの距離よりも優れているように聞こえます。 +1。 –

+0

はい、マッチングにスコアリングシステムを使用すると、移動する最善の方法のように聞こえます。 –

0

まあ、100%保証された正しい方法はありません。しかし、おそらく、すべての「乱雑」列をより標準形に変換することによって、いくらか進歩を遂げることができます。先頭と末尾のスペースをトリムし、最大で1つのスペースが連続して表示されるようにします。また、 "SMITH、JOHN"という形式の名前を "JOHN SMITH"に変更する(またはその逆 - フォームを選択してそれに合わせる)ようなものもあります。もちろん、レコードのコピーを作成する必要がありますが、オリジナルは変更しないでください。他の情報(「JOHN SMITH」 - >「J SMITH」など)を破棄して試してみると、誤検出のバランスが偽の否定に変わることがわかります。

おそらく、各レコードのペアに類似性スコアを割り当てるアプローチをとるでしょう。例えば。正規化された名前、住所、電子メールアドレスが正確に一致する場合は、スコア1000を割り当てます。それ以外の場合は、1000からLevenshtein distanceを差し引いて(何倍でも)それを使用します。さまざまなタイプの相違点の相対的な重要性を判断して、自分のスコアリングスキームを策定する必要があります(電話番号の別の数字はおそらく2人の名前の1文字の違いよりも重要です)。あなたは実験的に、レコードのペアに「重複」のステータスを自信を持って割り当てることができ、それを超えると手動でのチェックが必要なスコアを確立することができます。 の数値がの場合、2つのレコードがではなく、の重複であると確信できます。

ここで現実的な目標はです。あなたがする必要がある手作業の複製除去作業の量を減らすことです。いくつかの自動コピー処理によってすべての複製が生成されていない限り、複製を完全に削除することはできません。

+0

まあ、私はおそらく、私が実際にやっていることは、正確な名前を照合することです。これは2つのリストの間で少なくとも500程度の企業が消滅するはずです。素晴らしい説明j_random_hackerをありがとう。 –

関連する問題