社内CRMの仕事をしています。同社の現在のフロントエンドでは、多くの重複が許可されています。エンドユーザーが「ウィリアム ジョンソン」ではなく「ビル ジョンソン」を検索したため、エンドユーザーが同じ人物を入力しないようにしています。そのため、ユーザーが新しい顧客に関する情報を入力すると、類似した名前 (あいまいな名前を含む) が検索され、データベースに既に存在するものと照合され、それらの意味があるかどうかが尋ねられます...そのようなデータベースまたは技術は存在しますか?
6 に答える
このような機能を 1 つの Web サイトに実装しました。PHP で double_metaphone() + levenstein() を使用しています。「metaphoned」検索語の最初の x 文字の SELECT を使用してルックアップする、データベース内の各エントリに対して double_metaphone() を事前に計算します。
次に、レーベンスタイン距離に従って、返された結果を並べ替えます。double_metaphone() は PHP ライブラリの一部ではありません (前回確認したとき)。そのため、かなり前にネットで見つけた PHP 実装を借りました (サイトはオンラインではなくなりました)。私はそれをどこかに投稿するべきだと思います。
編集: ウェブサイトはまだ archive.org にあります: http://web.archive.org/web/20080728063208/http://swoodbridge.com/DoubleMetaPhone/
または Google キャッシュ: http://webcache.googleusercontent.com/search?q=cache:Tr9taWl9hMIJ:swoodbridge.com/DoubleMetaPhone/+Stephen+Woodbridge+double_metaphon
これにより、github の Javascript を含む、double_metaphone() のソース コードを含む他の多くの便利なリンクにつながります: http://github.com/maritz/js-double-metaphone
編集:私の古いコードを調べましたが、ここに私が行うことの大まかな手順を示します。明確にするために擬似コード化されています:
1) データベース内のすべての単語に対して double_metaphone() を事前計算します。つまり、$word='blahblah'; $soundslike=double_metaphone($word);
2) 検索時に、$word はデータベースに対してあいまい検索されます: $soundslike = double_metaphone($word)
4) SELECT * FROM table
WHERE soundlike
LIKE $soundlike (levenstein をプロシージャとして保存している場合は、はるかに優れています: SELECT * FROM table WHERE levenstein( soundlike
,$soundlike) < mythreshold ORDER BY levenstein( word
,$word) ASC LIMIT ... など
サーバーを制御できず、MySQL 4.20などを使用しているため、ストアドプロシージャを使用できませんが、うまくいきました。
私は一度同様の質問をしました。名前の短縮リスト 私はそれを使って何もすることはありませんでしたが、問題が再び発生したので、マッチングを行うために.netでライブラリを作成してオープンソースにする可能性があります。
更新: そこで言及したperlモジュールをC#に移植し、githubに配置しました。 http://github.com/stimms/Nicknames
レーベンシュタイン距離を実装します。
http://en.wikipedia.org/wiki/Levenshtein_distance
これはSQL関数として記述でき、さまざまな方法でクエリを実行できます。
SSIS には、後で重複を見つけるために使用するいくつかのファジー ロジック タスクがあります。
最良の結果を得るには、名前だけでなくロジックを確認する必要があると思います。彼らが住所、電子メール、または電話情報を入力している場合は、おそらく、他の一致するものと同じ姓を持つ人を探して、そのうちの1人がそうするかどうかを尋ねることができます. さまざまな名前のニックネームのテーブルを作成して、それを照合することもできます。それらのすべてを取得することはできませんが、少なくともあなたの国で最も一般的なものをいくつか取得できます.
SOUNDEXを使用して、似たような名前を付けることができます。ただし、たとえばウィリアムやビルとは一致しません。
例としてSQLでこれを試してください。
SELECT SOUNDEX('John'), SOUNDEX('Jon')
SQL Server には組み込みの SOUNDS LIKE 機能がいくつかあります。SOUNDEX http://msdn.microsoft.com/en-us/library/aa259235%28SQL.80%29.aspxを参照してください。
フル/ニックネーム検索に関しては、私が認識しているものは構築されていません。ニックネームは地域によって異なり、追跡しなければならない情報がたくさんあります。独自のアプリケーションで活用できるフルネームをニックネームにリンクするデータベースがあるかもしれません。