您必须创建自己的比较函数,用于比较两个字符串。在该函数中,您可以调用jarowinkler。最简单的方法是创建一个closure:
jw <- function(W_1, W_2, W_3) {
function(str1, str2) {
jarowinkler(str1, str2, W_1, W_2, W_3)
}
}
这是一个函数,用于传递您要使用的权重参数。此函数返回一个比较函数,您可以在 compare.linkage 调用中使用它:
rpairs <- compare.linkage(StringSet1, StringSet2,
strcmp = TRUE, strcmpfun = jw(4/9, 4/9, 1/9))
Jaro-Winkler 算法计算匹配(具有一定带宽)m 的字符数。对于两个字符串 john 和 johan,有 4 个字符匹配(j、o、h 和 n)。只取选定的字符:
john
jonh
然后它会计算换位次数t。在这种情况下,有一个转置(h 和 n 被切换)。
Jaro 相似度由下式给出:
1/3 * (w1 * m/l1 + w2 * m/l2 + w3 * (m-t)/m))
l1 和 l2 是两个字符串的长度。对于所有等于 1/3 的权重,这会导致得分介于 0 和 1 之间(1 = 完美匹配)。
Jaro-Winkler 度量为字符串开头匹配的字符添加了“奖励”,因为开头的错误通常较少(该度量是为名称创建的)。有关详细信息,请参阅例如 M.P.J van der Loo (2014), The stringdist Package for Approximate String Matching。