Ruby比较两个字符串的相似百分比
我喜欢在Ruby中比较两个字符串并找到它们的相似性
我看过Levenshtein
gem,但它似乎是在2008年最后一次更新,我找不到文档如何使用它。 一些博客暗示其破碎
我用Levenshtein尝试了text
gem,但它给出了一个整数(越小越好)
显然,如果两个字符串的长度可变,我会遇到Levenshtein算法的问题(比较两个名称,其中一个名称中间名称,一个名称不同)。
你有什么建议我做百分比比较?
编辑:我正在寻找类似PHP的类似文本
我认为你的问题可以做一些澄清,但这里有一些快速和肮脏的东西(根据你上面的澄清计算为较长字符串的百分比):
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的ruby gem。 https://rubygems.org/gems/similar_text它提供了一种similar
方法,可以比较两个字符串并返回一个数字,表示两个字符串之间的相似百分比。
我可以推荐fuzzy-string-match
gem。
您可以像这样使用它(取自文档 ):
require "fuzzystringmatch" jarow = FuzzyStringMatch::JaroWinkler.create(:native) p jarow.getDistance("jones", "johnson")
它会返回一个得分~0.832
,表示这些字符串匹配的好坏。