我可以使用ActiveRecord根据最近匹配(levenshtein距离)查找行

时间:2009-07-22 07:04:14

标签: mysql ruby-on-rails levenshtein-distance

我的数据库中有一个字符串表。我选择其中一个, A

如何搜索表格的其余部分以找到与 A 最相似的字符串?

3 个答案:

答案 0 :(得分:3)

我认为你正在寻找levenshtein距离。 De levenshtein在2个字符串之间的距离,是需要多少添加/删除/修改字符串才能使字符串等于。

Here's an implementation in Ruby

答案 1 :(得分:0)

如果您正在使用两个字符串之间的语音相似性,则可以使用SQL soundex函数(Oracle中也有metaphone)。

这会将传递给它的字符串转换为4位代码(1个字母,3个数字iirc),代表单词的语音。

如果对要比较的两个字符串执行此操作,如果它们在语音上相似,则可以匹配代码。

答案 2 :(得分:0)

以下是Ruby中Levenshtein距离算法的简单实现:

def levenshtein(a, b)
  case
    when a.empty?: b.length
    when b.empty?: a.length
    else [(a[0] == b[0] ? 0 : 1) + levenshtein(a[1..-1], b[1..-1]),
          1 + levenshtein(a[1..-1], b),
          1 + levenshtein(a, b[1..-1])].min
  end
end

两个字符串之间的Levenshtein距离由将一个字符串转换为另一个字符串所需的最小操作数给出,其中操作是单个字符的插入,删除或替换。