string-matching - 一种更好的变长字符串相似度排序算法

标签 string-matching ranking similarity fuzzy-search

我正在寻找一种字符串相似度算法,它可以在可变长度字符串上产生比通常建议的算法(编辑距离、soundex 等)更好的结果。

例如,

给定字符串 A:“Robert”,

然后字符串 B:“Amy Robertson”

会比

更好的匹配

字符串 C:“理查德”

此外,最好该算法应该与语言无关(也适用于英语以外的语言)。

最佳答案

Catalysoft 的 Simon White 写了一篇关于一种非常聪明的算法的文章,该算法比较相邻字符对,该算法非常适合我的目的:

http://www.catalysoft.com/articles/StrikeAMatch.html

Simon 有一个 Java 版本的算法,下面我编写了一个 PL/Ruby 版本(取自 Mark Wong-VanHaren 在相关论坛条目评论中完成的普通 ruby​​ 版本),以便我可以在我的应用程序中使用它。 PostgreSQL 查询:

CREATE FUNCTION string_similarity(str1 varchar, str2 varchar)
RETURNS float8 AS '

str1.downcase! 
pairs1 = (0..str1.length-2).collect {|i| str1[i,2]}.reject {
  |pair| pair.include? " "}
str2.downcase! 
pairs2 = (0..str2.length-2).collect {|i| str2[i,2]}.reject {
  |pair| pair.include? " "}
union = pairs1.size + pairs2.size 
intersection = 0 
pairs1.each do |p1| 
  0.upto(pairs2.size-1) do |i| 
    if p1 == pairs2[i] 
      intersection += 1 
      pairs2.slice!(i) 
      break 
    end 
  end 
end 
(2.0 * intersection) / union

' LANGUAGE 'plruby';

工作起来就像一个魅力!

关于string-matching - 一种更好的变长字符串相似度排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/653157/

相关文章:

search - Quora 中的实时前缀匹配和自动完成

algorithm - 找到多组数字之间交集的最有效方法

machine-learning - StumbleUpon 推荐引擎的架构和基本组件

正则表达式匹配具有特定属性的 html 标签

正则表达式计数 3s

MySQL:与动态值匹配

seo - 为什么我在谷歌上的排名突然下降了?

php - 在mysql中查找一个整数的排名

tsql - 在动态 SQL 中使用 FREETEXTTABLE 的列的优先级/权重

python - 根据另一个引用数组从一个数组中选择接近的匹配项