我在R中的记录链接包中使用compare.linkage方法来比较2组字符串的相似性。默认的字符串比较方法是jarowinkler,其中3个默认权重设置为1 / 3,1 / 3和1/3。
我想覆盖默认权重4/9,4 / 9和1/9。我怎么做?提前谢谢。
默认脚本为:
rpairs <- compare.linkage(StringSet1, StringSet2, strcmp = TRUE, strcmpfun = jarowinkler)
答案 0 :(得分:4)
您必须创建自己的比较函数,比较两个字符串。在该功能中,您可以拨打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。