私は人の大規模なデータセット(2Mエントリ)を持っていますが、多くの人がわずかに(または大幅に)異なる識別情報を持つデータベースに複数のエントリを持っています。たとえば、J。DoeとJohn Doeがいる場合や、電子メールアドレスが付随するJohn Doeと電子メールアドレスが付随しないJohn Doeがある場合があります。
私はさまざまなクラスタリングアルゴリズムを調べてきましたが、次のようなルールに基づいてエントリを集約するということは、私がやっていることに適していないようです。
- 名前の1つがすべて大文字で書かれているかどうかに基づいて、姓名を推測します
- メールアドレスが一致する場合は「J. Doe」と「J. Doe」を集計する
- 「J.」で始まる姓と名「Doe」が他にない場合は、「J。Doe」を「John Doe」に集約します。
データセットが小さい場合、これはいくつかの単純なルールだけで比較的簡単なタスクになりますが、エントリの数が多いと、集約タスクが非常に遅くなり、ロジックがかなり複雑になります。私の現在の解決策(データベース内の全文検索機能を使用して類似のエントリを検索し、それらの結果に基づいてハッシュを追加し、次にハッシュとあいまいさの種類の組み合わせに基づいて集計する)は機能しますが、実行しようとするたびにそれを更新するだけで、誰かがすでに解決したような問題だと叫ぶだけです。しかし、私は解決策を見つけることができませんでした。
このようなルールに基づいて、私がやりたいことを行うアルゴリズムはありますか?または役立つかもしれない特定のパッケージまたはソフトウェア?それとも私はこの問題に完全に間違っているのですか?
ありがとう!
(ただし、IDを誤って集計する方法はさまざまにあることを承知している(たとえば、J。DoeはJohn DoeまたはJames Doeを意味する可能性がある)ので、物事を集計しようとすることに対する警告は必要ありません。)
dictionary
は、あなたのケースでキーと値のマッチングを行うための最良の友達になります。