1

約17000行に部分的に重複して冗長なデータを含む7つのMySQLテーブルがあります。すべての表には、学校の名前と住所が含まれています。同じ学校がわずかに異なる名前のテーブルに複製されることもあれば、同じ学校が複数のテーブルに表示されることもありますが、名前や住所にわずかな違いがあります。

私のタスクは、7つのテーブルからのデータを含むID、名前、および町/都市IDフィールドを持つ単一のテーブルを作成することです。IDと名前のフィールドを持つ町用の別のテーブルがあります。

これは、元のテーブルに都市の個別のフィールドがないという事実によって複雑になっています。これは、大きく異なる形式のデータを持つアドレスフィールドから抽出する必要があります。

私はこれのほとんどが手動で行われなければならないことを理解しています、私は私の魂を固めました、そして私はこれが私にもたらす生きている地獄に対処する準備ができています。私の質問は次のとおりです。

  • どのようにそのようなタスクを開始しますか?それを可能な限り自動化するためのインテリジェントな戦略は何でしょうか?
  • これを高速化できるツールはありますか?文字列を比較し、それらの「類似性」を判断し、重複の可能性を示唆できるもののように?

ありがとう!

4

1 に答える 1

2

MySQLではなくOracleを使用していましたが、一度このようなことをしました。17000 レコードは扱いやすいレコード数ですが、ツールを構築する価値があるには十分です。

ウィキペディアには世界中のほとんどの学校のリストがありますが、残念ながらハンガリーはそうではありません。断片化されたデータベースからデータを再構築しようとするよりも、システムに保持する必要があるデータのリストを保持する方がよいため、これは残念です。そのようなリストを手に入れることができれば、記録を互いに比較するのではなく、記録を比較できると便利です。郵便番号と都市名のリストを手に入れることができたとしても、それでも役立つでしょう。

あいまい一致文字列に関しては、利用可能な統計上のトリックがいくつかあります。一般的なものは、レーベンシュタイン距離です。これにより、2 つの文字列間の類似性を示すスコアが得られます。このスコアは、文字列Aから文字列Bに移動するのに必要な変更の数(別名編集距離) として表されます。Code Janitor には MySQL の実装がありますが、これは Google で一番ヒットしただけであり、私からの保証はありません。 ここで見つけてください。Jaro Winkler はもう 1 つのマッチング アルゴリズムですが、インターネットではあまり実装されていないようです。

一般的な処理のヒント

  • すべての学校名と住所を 1 つのテーブルに抽出し、各行の来歴 (データベース、テーブル、主キー) を示すメタデータを使用します。
  • 学校名と住所の検索文字列を保持する列を追加します。たとえば、句読点と数字を削除する 1 つの列を作成します (一部のマッチング アルゴリズムでは、THMAS は TH0MAS よりも THOMAS に近くなります)。
  • 別の列では、一般的なタイプミスを考慮しています (英国の住所では、文字列 SW!^ は Streatham の郵便番号である SW16 を表している可能性があります)。
  • これらの検索列にフルテキスト インデックスを構築して、都市名などの一般的な単語の出現箇所を選択できるようにします。
  • 膨大な量のデータとある程度の忍耐力があれば、シソーラスを作成して Rd、St、Blvd などの一般的な略語を特定することは役に立つかもしれませんが、17000 行ではおそらく価値がありません。
  • 正規表現を使用して、郵便番号などのパターンを照合します。
于 2010-09-15T13:12:16.857 に答える