Я ищу идеи о том, как наилучшим образом сопоставить две хеш-таблицы, содержащие пары ключ / значение строки.
Вот реальная проблема, с которой я сталкиваюсь: у меня есть структурированные данные, которые импортируются вбаза данных.Мне нужно ОБНОВИТЬ записи, которые уже находятся в БД, однако, возможно, что ЛЮБОЕ значение в источнике может измениться, поэтому у меня нет надежного идентификатора.
Я думаю о нечетком сопоставлении двух строк, источник и БД, и сделайте «образованное» предположение, если оно будет обновлено или вставлено.
Любые идеи будут с благодарностью.
Решение
Решение основано на посте Бена Робинсона.Работает довольно хорошо, позволяет иметь небольшие несоответствия здесь и там, и веса на основе пользовательских ключей.
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