質問
まさにSQLサーバーテーブルを含む会社名、住所、連絡先名まれています。
また定期的にデータを受信ファイルを外部からの源とすることが期待されてい合わせに対す。残念ながらのデータを若干異なりますから全く異なる。例えば、"123E.メインセント"を受けていま"123東の主なアクセスです。別の例として"Acme,LLC"のファイル"Acme。もう一つは、"Ed-スミス"にて"エドワード-スミス"
してレガシーシステムを活用したか複雑ないので,集中的な方法を扱う。ある純粋なSQLおよび他なVBAコードでアクセスデータベースです。現システムが完璧なものは手間のかかる難しいの維持
経営がここに広げたいと望んでいます。の開発者に対し継承の支援のシステムを交換したいけることができました。アジャイル溶液を必要とするメンテナンス.
が広く一般に受け入れられ方を扱うこのようなデータマッチング?
解決
こちらに書いてほぼ同一のスタックして必要な標準化のメーカー名をハードウェアといったあらゆる変化).これはクライアント側かもしれませんが(VB.Net 正確に)をご利用Levenshtein距離アルゴリズムの修正のためのより良い結果):
Public Shared Function FindMostSimilarString(ByVal toFind As String, ByVal ParamArray stringList() As String) As String
Dim bestMatch As String = ""
Dim bestDistance As Integer = 1000 'Almost anything should be better than that!
For Each matchCandidate As String In stringList
Dim candidateDistance As Integer = LevenshteinDistance(toFind, matchCandidate)
If candidateDistance < bestDistance Then
bestMatch = matchCandidate
bestDistance = candidateDistance
End If
Next
Return bestMatch
End Function
'This will be used to determine how similar strings are. Modified from the link below...
'Fxn from: http://ca0v.terapad.com/index.cfm?fa=contentNews.newsDetails&newsID=37030&from=list
Public Shared Function LevenshteinDistance(ByVal s As String, ByVal t As String) As Integer
Dim sLength As Integer = s.Length ' length of s
Dim tLength As Integer = t.Length ' length of t
Dim lvCost As Integer ' cost
Dim lvDistance As Integer = 0
Dim zeroCostCount As Integer = 0
Try
' Step 1
If tLength = 0 Then
Return sLength
ElseIf sLength = 0 Then
Return tLength
End If
Dim lvMatrixSize As Integer = (1 + sLength) * (1 + tLength)
Dim poBuffer() As Integer = New Integer(0 To lvMatrixSize - 1) {}
' fill first row
For lvIndex As Integer = 0 To sLength
poBuffer(lvIndex) = lvIndex
Next
'fill first column
For lvIndex As Integer = 1 To tLength
poBuffer(lvIndex * (sLength + 1)) = lvIndex
Next
For lvRowIndex As Integer = 0 To sLength - 1
Dim s_i As Char = s(lvRowIndex)
For lvColIndex As Integer = 0 To tLength - 1
If s_i = t(lvColIndex) Then
lvCost = 0
zeroCostCount += 1
Else
lvCost = 1
End If
' Step 6
Dim lvTopLeftIndex As Integer = lvColIndex * (sLength + 1) + lvRowIndex
Dim lvTopLeft As Integer = poBuffer(lvTopLeftIndex)
Dim lvTop As Integer = poBuffer(lvTopLeftIndex + 1)
Dim lvLeft As Integer = poBuffer(lvTopLeftIndex + (sLength + 1))
lvDistance = Math.Min(lvTopLeft + lvCost, Math.Min(lvLeft, lvTop) + 1)
poBuffer(lvTopLeftIndex + sLength + 2) = lvDistance
Next
Next
Catch ex As ThreadAbortException
Err.Clear()
Catch ex As Exception
WriteDebugMessage(Application.StartupPath , [Assembly].GetExecutingAssembly().GetName.Name.ToString, MethodBase.GetCurrentMethod.Name, Err)
End Try
Return lvDistance - zeroCostCount
End Function
他のヒント
SSIS(Sql2005+企業) ファジィ検索 はどうやればいいのでしょうかデータクレンジング課題です。
以上、どうしたらいいでしょうかを知ったくらいの分野に特化したソリューションなど アドレス掃除, 又は一般 文字列マッチング技術.
多くのベンダーのある製品の提供いこのようなパターンマッチングです。私はいくつかの研究 く、大変ご好評を頂き製品、スクラップを自家栽培システム.
あなたの言葉を借りれ、製品は、この共通の保つのに十分なだけ残っている必要事業んによる優れた製品があります。場合でもコストが数千しむね隊長"らーめんでもライセンス、より安く払っ開発者の作業もいます。
また、このフレーズ"複雑","CPUの集中","VBAコード"、"アクセスデータベース"とのシステムの説明は別の理由を探すの第三者ツールです。
編集:している可能性もあります。純内蔵してコンポーネントはこのようなことがいえるでしょう、その場合、すなわち支払うようにして下さい。も驚からのツール。純提供いたします。
アクセスなっているツールです。理想の世界に行くのSSIS液用ファジーのルックアップ.だきましたが、現在使用しているアクセス、オフィスを購入SQL Server Enterprise editionも低かった。また、現在の環境では、できうるすぎます。
タ標準化したインスしています。ピ標準略のための通raod。書コードに変更すべての通常のバリエーションにはそれらのaddesses.付属の取扱説明書のインスタンスの二つの空間とスペース、トリムのすべてのデータを削除し非英数字です。として見ることができるものです。
ては会社名、もしかしたらできるかを当ててみましょう第5文字の氏名または名称および住所又は電話にてこのままテーブルを作成する既知のバリエーションとどう関わるデータベース利用のためのcleanising将来のファイルです。い場合は登録id100Acme株式会社きテーブルのようになります:
idfield名
100Acme株式会社
100Acme株式会社
100Acme、
100Acme,LLC
100Acme
これまで構築時間をいただいた入力時に使用、複製できde-dupping工程かなければならないし、入力までの試合は最初の部分の名称及び住所を既存の会社です。
っていう機能Torial掲載いは、役立っています。
すべてのこの痛みやtimeconsumingうのも良い時間としているが、新バリエーションに追加するコード一覧です。だかstardardizeおaddressdataいては、必ずクリーン生産できないときは、その他の輸入は、作業テーブル、クリーンで、試合わせ生産までのデータを挿入記録を更新中。
私はこの リンク とします。
私は、こうしを掲載します。
ありのかなりの数の方法で取り組むことは自明である。最は、リクエストに一意な識別子が使用できるマッチング以外の分野misスペルなど。
一部の想い
- 当然、社会保障番号、運転免許証など
- メールアドレス
- 息電話番号(Rremove句読点など)
どのベンダーに行くだけの答えは同様の問いに、貼り付けます。
各主要プロバイダは独自の溶液とする。Oracleアイ-ビー-エム株式会社、SAS Datafluxなど、各請求項のこのような問題です。
独立した検証評価:
がありました研究を行いカーティン大センターのためのデータ連携オーストラリアることをシミュレーションマッチング44百万円。特に何を提供した面精度(数に一致するデータは見つかりvs可能です。数偽マッチ)
DataMatch企業 最高の精度(95%以上)、高速、低コスト
IBM品質のステージ 高精度>90%)、高速、高コスト>$100K)
SASデータをフラックス、中精度(>85%)、高速、高コスト>100K) この独自の評価において、非常に徹底して下さい。