【问题标题】:Setting weightages for Jarowinkler in compare.linkage在 compare.linkage 中为 Jarowinkler 设置权重
【发布时间】:2015-07-02 07:17:18
【问题描述】:

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

【问题讨论】:

    标签: r record strcmp linkage


    【解决方案1】:

    您必须创建自己的比较函数,用于比较两个字符串。在该函数中,您可以调用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

    【讨论】:

    • 谢谢!这回答了我的问题。
    • 您介意解释一下权重如何影响 jarowinkler 的匹配函数吗?
    • @lawyeR 添加了解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2019-02-12
    • 2015-11-17
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多