我正在寻找有关如何最佳匹配包含字符串键/值对的两个哈希表的想法。
这是我面临的实际问题:我有结构化数据进入数据库。我需要更新已经在数据库中的记录,但是,源中的任何值都可能发生变化,因此我没有可靠的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
答案 0 :(得分:2)
我最近使用Levenshtein Distance进行模糊匹配。我计算两个可能匹配的字符串之间的距离,并给匹配一个得分,该得分是距离的倒数。然后我在整个字段中执行weighted average分数来确定记录的分数,并允许更重要的字段比不太重要的字段计数更多。它用于CRM应用程序,其中有来自许多不同来源的潜在客户。客户需要将这些与现有的潜在客户/机会/明细/经销商等进行匹配。需要稍微调整一下匹配的分数和不匹配的分数的阈值。最后我们得到了大约1%的误报率,我认为这是非常好的。
答案 1 :(得分:1)
如果要在SQL Server中导入数据,则SSIS具有模糊匹配任务。试试看你是否喜欢这个结果。我们发现它在这种情况下非常有用。