Нечеткое совпадение двух хеш-таблиц? - PullRequest
2 голосов
/ 10 мая 2010

Я ищу идеи о том, как наилучшим образом сопоставить две хеш-таблицы, содержащие пары ключ / значение строки.

Вот реальная проблема, с которой я сталкиваюсь: у меня есть структурированные данные, которые импортируются вбаза данных.Мне нужно ОБНОВИТЬ записи, которые уже находятся в БД, однако, возможно, что ЛЮБОЕ значение в источнике может измениться, поэтому у меня нет надежного идентификатора.

Я думаю о нечетком сопоставлении двух строк, источник и БД, и сделайте «образованное» предположение, если оно будет обновлено или вставлено.

Любые идеи будут с благодарностью.

Решение

Решение основано на посте Бена Робинсона.Работает довольно хорошо, позволяет иметь небольшие несоответствия здесь и там, и веса на основе пользовательских ключей.

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 ]

2 голосов
/ 10 мая 2010

Я недавно использовал Расстояние Левенштейна для нечеткого сопоставления. Я вычисляю расстояние между двумя возможными совпадающими строками и даю совпадению оценку, которая является обратной величиной расстояния. Затем я делаю взвешенное среднее баллов по полям, чтобы определить балл для записи и позволить более важным полям считать больше, чем менее важным полям. Он используется в приложении CRM, где поступали сведения из разных источников. Клиент должен был сопоставить их с существующими потенциальными клиентами / возможностями / клиентами / торговыми посредниками и т. Д. Потребовалось немного скорректировать пороги того, какой балл был совпадением, а какой - нет. В итоге мы получили около 1% ложных срабатываний, что, на мой взгляд, неплохо.

1 голос
/ 10 мая 2010

Если вы импортируете данные в SQL Server, в SSIS есть задача нечеткого сопоставления. Попробуйте, чтобы увидеть, если вам нравятся результаты. Мы нашли это действительно полезным в таких ситуациях.

...