質問

問題は、約2万の顧客レコードを持つデータベースがあり、重複エントリを避けるために最善を尽くしたいことです。データベースはMicrosoft SQL Server 2005であり、そのデータベースを管理するアプリケーションはMicrosoft Dynamics / SLです。そのデータベースとやり取りするASP.NET Webサービスを作成しています。私のサービスでは、顧客レコードをデータベースに挿入したり、データベースからレコードを読み取ったり、それらのレコードを変更したりできます。私のWebサービス、MS Dynamics、またはSql Serverのいずれかで、ユーザーが新しいレコードの追加を確認する前に、可能な一致のリストを提供したいと思います。

したがって、ユーザーがレコードを送信すると、一意であると思われる場合、レコードは保存され、新しいIDを返します。重複が発生する可能性がある場合、ユーザーは「はい、重複の可能性があることを確認します。これは新しいレコードであり、送信したい」という確認で再送信できます。

句読点またはスペースのみの場合(「Company、Inc.」と入力し、データベースに「Company Inc」がある場合など)、これは簡単ですが、わずかな変更がある場合はどうでしょうか「Company Inc.」の代わりに「Company Corp.」など、または「Cmpany、Inc.」などの太い指のスペルミスがある場合は、リストにそのようなレコードを返すことも可能ですか?絶対に可能ではないので、自分が持っているものに対処します。重複のためにレコードをマージする必要がある場合は、後でさらに作業が必要になります。

役に立ちましたか?

解決

アルゴリズムの詳細最適な動作はドメインに大きく依存するため、いくつかの異なるものを試してみることをお勧めします。最適な結果を得るには、いくつかを組み合わせる必要があるかもしれません。略語、特にドメイン固有のものも、前処理または標準化する必要がある場合があります。

名前については、音声アルゴリズムをお勧めします。発音を考慮します。これらはスミスとシュミットのスコアを近くに合わせます。これらは単語を言うときに混同しやすいためです。 Double Metaphone が最初の選択肢です。

ファットフィンガリングの場合は、距離の編集アルゴリズムを使用することをお勧めします-これにより、「差異」が得られます。 2語の間。これらは、スミスとスモスが互いに近いスコアを付けます-2が音声検索をすり抜ける可能性があります。

T-SQLにはSOUNDEXと DIFFERENCE がありますが、かなり悪い。 Levenshtein バリアントは標準的な選択肢ですが、他にも良い選択肢があります-そのほとんどはかなり簡単です適切にライセンスされた実装が見つからない場合は、C#の実装に。

これらはすべて、T-SQLよりもC#からのコーディング/使用がはるかに簡単になります(ただし、 SQLで動作する可能性のあるT-SQLの恐ろしい乱用における二重メタフォン)。

この例はAccessにありますコードを見たり、実装を使用した)付属のプレゼンテーションは、おそらく何をする必要があるかについてかなり良いアイデアを提供します。コードはおそらく一見の価値があり、おそらくVBAからの移植です。

他のヒント

SQL Server内で SOUNDEXing を調べます。あなたが探しているマッチの可能性の曖昧さをあなたに与えると信じています。

SOUNDEX @ MSDN

SOUNDEX @ Wikipedia

Lucene.NET をソリューションに統合できる場合は、ぜひ試してみてください。アウト。

可能性のある一致を見つけるために、FreeText(またはFreeTextTable)関数を使用した全文検索を使用してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top