我有一堆要匹配的公司名称,例如,我要匹配以下字符串:A&A PRECISION
与A&A PRECISION ENGINEERING
但是,我几乎使用了所有相似度:像汉明距离,Levenshtein距离,Restricted Damerau-Levenshtein距离,Full Damerau-Levenshtein距离,最长公共子串距离,Q-gram距离,余弦距离,Jaccard距离Jaro和Jaro -温克勒距离
匹配:B&B PRECISION
。
有谁知道哪个度量标准会更加强调子字符串的精确性及其匹配的顺序,而不关心字符串的长度?我认为,由于字符串的长度,度量标准始终会选择错误。
答案 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
软件包来实现。