Ruby比较两个字符串的相似百分比

我喜欢在Ruby中比较两个字符串并找到它们的相似性

我看过Levenshteingem,但它似乎是在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-matchgem。

您可以像这样使用它(取自文档 ):

 require "fuzzystringmatch" jarow = FuzzyStringMatch::JaroWinkler.create(:native) p jarow.getDistance("jones", "johnson") 

它会返回一个得分~0.832 ,表示这些字符串匹配的好坏。