2017-06-23 10 views
2

私は会社名のテーブルを持っています。人間の入力ミスのために複製がたくさんあります。等の細分化が含まれなければならない場合は、別の認識、タイプミスは、私はすべてのこれらの重複は一つの会社「1C」としてマークされるようにしたいがあります。類似の会社名の重複排除

+------------------+ 
|  company  | 
+------------------+ 
| 1c    | 
| 1c company  | 
| 1c game studios | 
| 1c wireless  | 
| 1c-avalon  | 
| 1c-softclub  | 
| 1c: maddox games | 
| 1c:inoco   | 
| 1cc games  | 
+------------------+ 

私はタイプミスをなくすための良い方法としてLevenshtein distanceを同定しました。しかし、細分化が追加されると、Levenshteinの距離は劇的に増加し、もはやこれのための良いアルゴリズムではありません。これは正しいです?

一般に、私は計算言語学ではほとんど経験がないので、私はどのような方法を選択すべきか迷っています。

この問題に対してどのようなアルゴリズムをお勧めしますか?私はそれをjavaで実装したいと思います。純粋なSQLも大丈夫です。ソースへのリンクは高く評価されます。ありがとう。

+1

関連項目:https://stackoverflow.com/questions/429385/how-do-i-normalize-a-large-user-generated-data-set-of-company-names https:// stackoverflow .com/questions/7974972/how-to-normalize-company-names https://stackoverflow.com/questions/4835318/normalize-data-according-to-business-entity-legal-name-class-of-business- DNS – polm23

答えて

1

これは難しい問題です。 "normalization"のような魔法の検索キーワード - 時には非常に異なることを意味するが( "データベースの正規化"は関係ありません)、効果的に入力を正規化しようとしています。

単純な解決策は、トークン認識を使用してLevenshtein距離を使用することです。 PythonライブラリFuzzy Wuzzyがこれを行い、this blog postは動機付けの例とどのように動作するかを紹介しています。基本的な考え方は単純ですが、Javaで実装するのは難しくありません。

高水準では、入力を空白や句読点のトークンに分割し、トークンをソートしてセットとして扱い、次にセット交差点サイズを使用してファジー一致を測定基準として使用します。

いくつかの関連リンク:

関連する問題