Ruby сравнить две строки процент сходства
Id хотел бы сравнить две строки в Ruby и найти их сходство
Я посмотрел на Levenshtein
gem, но, похоже, это было последнее обновление в 2008 году, и я не могу найти документацию, как его использовать. С некоторыми блогами, предлагающими его сломанный
Я пробовал text
gem с Левенштейном, но он дает целое число (меньше, лучше)
очевидно, что если две строки имеют переменную длину, я сталкиваюсь с проблемами с алгоритмом Левенштейна (скажем, сравнение двух имена, где у одного есть второе имя, а у другого нет).
что бы вы предложили мне сделать, чтобы получить процентное сравнение?
Edit: Im ищет что-то похожее на PHP аналогичный текст
3 ответов
Я думаю, что ваш вопрос может сделать с некоторыми разъяснениями, но вот что-то быстрое и грязное (вычисление в процентах от более длинной строки согласно вашему разъяснению выше):
def string_difference_percent(a, b)
longer = [a.size, b.size].max
same = a.each_char.zip(b.each_char).select { |a,b| a == b }.size
(longer - same) / a.size.to_f
end
Я все еще не уверен, сколько смысла эта процентная разница, которую вы ищете, делает, но это должно заставить вас начать по крайней мере.
это немного похоже на расстояние Levensthein, в том, что он сравнивает символы строк по символам. Итак, если два имени различаются только по отчеству, они будут совсем другими.
теперь есть рубиновый камень для similar_text. https://rubygems.org/gems/similar_text
Он обеспечивает similar
метод, который сравнивает две строки и возвращает число, представляющее процент сходства между двумя строками.
и fuzzy-string-match
камень.
вы можете использовать его так (взято из документы):
require "fuzzystringmatch"
jarow = FuzzyStringMatch::JaroWinkler.create(:native)
p jarow.getDistance("jones", "johnson")
он вернет счет ~0.832
который говорит, насколько хорошо эти строки совпадают.