2017-10-25 17 views
0

私は大学名の列を持つデータベースを持っています。これらの値は、自由形式のユーザーテキスト入力によって収集されました。実際には重複した値がたくさんありますが、まったく同じではありません。例えばほとんど同じような値を重複排除する方法は?

Washington St. University 
Washington State University 
Washington State University 
WASHINGTON STATE UNIVERSITY 
Washington State 
WSU 

complete list

は、どのように私はこのリストから重複を取り除いて行くべきですか?私は、levenshteinsimilar_textのようなphp関数とマッチ除外のための調整しきい値を使うことを考えました。しかし、私はウサギの穴をあまりにも深く掘り下げる前に、より良い道があるかどうか疑問に思います。

私は問題に取り組むための概念的な戦略やアルゴリズムを提供する回答を探しています。私はどんなプログラミング言語にも擬似コードにも満足しています。

+1

選択したスプレッドシートにデータをロードし、標準化された名前を入力名の横に置きます。早く始めるほど早く終わります。 –

+0

あなたはどのデータベースにいますか?これは、このような関数に大きな違いをもたらす – Twelfth

+0

sql-server私はあなたが使用できるデータ品質ツールがあると思う。 http://searchsqlserver.techtarget.com/feature/SQL-Servers-Data-Quality-Services-makes-cleanup-a-cinch – maSTAShuFu

答えて

1

3通り...あなたのスタイルとデータがどのルートを決定するかの鍵になります。

1 - 変換テーブル。 2列のテーブルを作成し、最初の列を入力します。すべてのこれらのその他の用語の明確なリストで値を入力してください。これらの入力のそれぞれを手動で(スプレッドシートで簡単に)実行し、「表示」名を入力します。 Gordonのコメントはこの程度です...私は一時的な会社を利用して15人を1週間雇ってこのような検索語句を分類しました。あなたの独特の入力リストが巨大であれば、かなり練習になるかもしれません。

2 - レーベンシュタイン距離。これは一番美しいものではありませんが、大半の人に役立ちます(80/20ルール)https://blog.pythian.com/implementing-fuzzy-search-in-sql-server-part-2-levenshtein-distance/ここには構成の良い塊があります。それは非常にシンプルではありません(IE、ワシントン州の6つのバリエーションのどれがそれらをすべてグループ化するべきですか? 。私の過去の経験では、テーブルに自分自身が参加しました... table1.inputとtable2.inputの間のLevenshtein距離と、どの用語が最も一致しているかを調べるためのカウントを使用しました。これは巨大なウサギの穴です。これがあなたが行くルートであれば準備が整うでしょう。どんな速度でも良い学習経験です。

  1. サードパーティツール。ビジネスインテリジェンス環境にいる場合は、BIツールのいくつかがこれに取り組む能力を持っています。マイクロソフトのデータ品質ツールとその他のオプションがあります。正直なところ、これらの人はあなたのためにオプション2をしたばかりで、その仕事のために第三者に支払います。

オプション1と2を組み合わせることもできます...最初の手順で入力したテーブルを作成し、スクリプトを使用してlevenshtienを使用する「表示」列を作成し、手動でデータを調べます必要に応じて修正してください。

関連する問題