我正在寻找有关如何最好地匹配两个包含字符串键/值对的哈希表的想法。
这是我面临的实际问题:我有导入到数据库中的结构化数据。我需要更新数据库中已经存在的记录,但是,源中的任何值都可能更改,因此我没有可靠的 ID。
我正在考虑模糊匹配两行,源和数据库,并做出“有根据”的猜测是否应该更新或插入。
任何想法将不胜感激。
解决方案
解决方案基于 Ben Robinson 的帖子。效果很好,允许在这里和那里有小的不匹配以及基于自定义键的权重。
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