在 compare.linkage 中设置 Jarowinkler 的权重

Setting weightages for Jarowinkler in compare.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)

您必须创建自己的比较函数来比较两个字符串。在该函数中,您可以调用 jarowinkler。最简单的方法是创建一个 closure:

jw <- function(W_1, W_2, W_3) {
  function(str1, str2) {
    jarowinkler(str1, str2, W_1, W_2, W_3)
  }
}

这是一个函数,可以将您要使用的权重参数传递给该函数。此函数 returns 是一个比较函数,您可以在 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 度量为在字符串开头匹配的字符添加 'bonus',因为开头的错误通常较少(该度量是为名称创建的)。有关详细信息,请参见 M.P.J van der Loo (2014), The stringdist Package for Approximate String Matching.

示例