文字列のキーと値のペアを含む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