2

文字列のキーと値のペアを含む2つのハッシュテーブルを最もよく一致させる方法についてのアイデアを探しています。

私が直面している実際の問題は次のとおりです。データベースにインポートされる構造化データがあります。すでにDBにあるレコードを更新する必要がありますが、ソースの任意の値が変更される可能性があるため、信頼できるIDがありません。

ソースとDBの2つの行をあいまい一致させることを考えており、更新または挿入する必要があるかどうかを「知識に基づいて」推測します。

任意のアイデアをいただければ幸いです。

解決

ソリューションはBenRobinsonの投稿に基づいています。かなりうまく機能し、あちこちで小さな不一致があり、カスタムキーベースの重みがあります。

require 'rubygems'
require 'amatch'

class Hash
  def fuzzy_match(hash, key_weights = {})
    sum_total = 0
    sum_weights = 0

    self.keys.each do |key|
      weight = key_weights[key] || 1
      next if weight == 0

      weight *= 10000
      match = self[key].to_s.levenshtein_similar(hash[key].to_s) * weight
      sum_total += match
      sum_weights += weight
    end

    sum_total.to_f / sum_weights.to_f
  end
end
4

2 に答える 2

2

最近、レーベンシュタイン距離を使用してあいまいマッチングを実行しました。一致する可能性のある2つの文字列間の距離を計算し、距離の逆数であるスコアを一致に与えます。次に、フィールド全体のスコアの加重平均を実行して、レコードのスコアを決定し、重要度の高いフィールドが重要度の低いフィールドよりも多くカウントされるようにします。これは、さまざまなソースからリードが入ってくるCRMアプリケーションで使用されます。クライアントは、これらを既存のリード/オポチュニティ/クレイン/リセラーなどと照合する必要がありました。一致したスコアと一致しなかったスコアのしきい値を少し調整する必要がありました。結局、私たちは約1%の偽陽性率を得ましたが、これは本当に良いと思います。

于 2010-05-10T14:27:41.430 に答える
1

SQL Serverにデータをインポートする場合、SSISにはあいまい一致タスクがあります。結果が気に入ったかどうかを確認してみてください。このような状況で非常に役立つことがわかりました。

于 2010-05-10T19:59:51.503 に答える