模糊匹配两个哈希表?

时间:2010-05-10 14:21:12

标签: sql algorithm fuzzy-comparison

我正在寻找有关如何最佳匹配包含字符串键/值对的两个哈希表的想法。

这是我面临的实际问题:我有结构化数据进入数据库。我需要更新已经在数据库中的记录,但是,源中的任何值都可能发生变化,因此我没有可靠的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

2 个答案:

答案 0 :(得分:2)

我最近使用Levenshtein Distance进行模糊匹配。我计算两个可能匹配的字符串之间的距离,并给匹配一个得分,该得分是距离的倒数。然后我在整个字段中执行weighted average分数来确定记录的分数,并允许更重要的字段比不太重要的字段计数更多。它用于CRM应用程序,其中有来自许多不同来源的潜在客户。客户需要将这些与现有的潜在客户/机会/明细/经销商等进行匹配。需要稍微调整一下匹配的分数和不匹配的分数的阈值。最后我们得到了大约1%的误报率,我认为这是非常好的。

答案 1 :(得分:1)

如果要在SQL Server中导入数据,则SSIS具有模糊匹配任务。试试看你是否喜欢这个结果。我们发现它在这种情况下非常有用。