2

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

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

2 回答 2

2

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

于 2010-05-10T14:27:41.430 回答
1

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

于 2010-05-10T19:59:51.503 回答