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



我想比较Ruby中的两个字符串,并找到它们的相似性

我看过Levenshtein gem,但它似乎是在2008年最后一次更新的,我找不到如何使用它的文档

我用Levenstein尝试了text宝石,但它给出了一个整数(越小越好)

显然,如果这两个字符串的长度可变,我会遇到Levenstein算法的问题(比如比较两个名称,其中一个有中间名,另一个没有)。

你建议我做些什么来进行百分比比较?

编辑:我正在寻找类似PHP的类似文本

我认为你的问题可能需要一些澄清,但这里有一些快速而肮脏的东西(根据上面的澄清以较长字符串的百分比计算):

def string_difference_percent(a, b)
  longer = [a.size, b.size].max
  same = a.each_char.zip(b.each_char).count { |a,b| a == b }
  (longer - same) / a.size.to_f
end

我仍然不确定你所寻找的百分比差异有多大意义,但这至少应该让你开始。

这有点像Levensthein距离,因为它逐字符比较字符串。因此,如果两个名字只在中间的名字上不同,它们实际上会非常不同。

现在有一个类似文本的ruby宝石。https://rubygems.org/gems/similar_text它提供了一个similar方法,用于比较两个字符串,并返回一个表示两个字符串之间相似度百分比的数字。

我可以推荐fuzzy-string-match宝石。

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

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

它将返回一个分数~0.832,该分数告诉这些字符串的匹配程度。

最新更新