在compare.linkage中设置Jarowinkler的权重

时间:2015-07-02 07:17:19

标签: r record strcmp linkage

我在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)

1 个答案:

答案 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。对于两个字符串johnjohan,有4个字符匹配(john)。仅拍摄所选字符:

john
jonh

然后计算转置次数t。在这种情况下,有一个转置(hn被切换)。

Jaro的相似性由下式给出:

1/3 * (w1 * m/l1 + w2 * m/l2 + w3 * (m-t)/m)) 

l1l2两个字符串的长度。对于等于1/3的权重,这导致得分在0和1之间(1 =完全匹配)。

Jaro-Winkler度量为字符串开头匹配的字符添加“奖励”,因为开头的错误通常较少(为名称创建度量)。有关详细信息,请参阅示例M.P.J van der Loo (2014), The stringdist Package for Approximate String Matching