两个字符串的最佳相似距离度量

时间:2019-11-09 17:03:10

标签: r string algorithm similarity stringdist

我有一堆要匹配的公司名称,例如,我要匹配以下字符串:A&A PRECISION

A&A PRECISION ENGINEERING

但是,我几乎使用了所有相似度:像汉明距离,Levenshtein距离,Restricted Damerau-Levenshtein距离,Full Damerau-Levenshtein距离,最长公共子串距离,Q-gram距离,余弦距离,Jaccard距离Jaro和Jaro -温克勒距离

匹配:B&B PRECISION

有谁知道哪个度量标准会更加强调子字符串的精确性及其匹配的顺序,而不关心字符串的长度?我认为,由于字符串的长度,度量标准始终会选择错误。

1 个答案:

答案 0 :(得分:1)

如果您真的想“ ...更加强调子字符串的准确性及其顺序...”,那么此函数可以工作,因为它可以测试字符串是否是另一个字符串的子字符串:

library(data.table)

x <- c("A&A PRECISION", "A&A PRECISION ENGINEERING", "B&B PRECISION")
y <- x

我们要扩展网格。为此,我将使用CJ中的data.table函数。然后,我们将检查每一对,看看x是否为y的子字符串(反之亦然):

CJ(x, y)[, similarity := apply(.SD, 1, function(x) x[2] %like% x[1]), .SDcols = c("x", "y")][x != y, ]
                           x                         y similarity
1:             A&A PRECISION A&A PRECISION ENGINEERING       TRUE
2:             A&A PRECISION             B&B PRECISION      FALSE
3: A&A PRECISION ENGINEERING             A&A PRECISION      FALSE
4: A&A PRECISION ENGINEERING             B&B PRECISION      FALSE
5:             B&B PRECISION             A&A PRECISION      FALSE
6:             B&B PRECISION A&A PRECISION ENGINEERING      FALSE

请记住,您需要确保字符串尽可能整齐才能正常工作,甚至可能会失败。

我会检查一些事情来清理您的琴弦:

  • 删除多个空格,
  • 删除字符串开头/结尾的空格
  • 确保相同的编码
  • 确保相同的情况下

您可以使用stringi软件包来实现。