代码之家  ›  专栏  ›  技术社区  ›  Andrew

Jaro Winkler的包裹差异

  •  2
  • Andrew  · 技术社区  · 6 年前

    我使用模糊匹配来清理用户输入的药物数据,我使用的是Jaro-Winkler距离。我正在测试哪一个包与Jaro Winkler的距离更快时,我注意到默认设置没有给出相同的值。有谁能帮我理解这两者的不同之处吗?例子:

    library(RecordLinkage)
    library(stringdist)
    
    jarowinkler("advil", c("advi", "advill", "advil", "dvil", "sdvil"))
    # [1] 0.9600000 0.9666667 1.0000000 0.9333333 0.8666667
    1- stringdist("advil", c("advi", "advill", "advil", "dvil", "sdvil"), method = "jw")
    # [1] 0.9333333 0.9444444 1.0000000 0.9333333 0.8666667
    

    文档:

    https://cran.r-project.org/web/packages/stringdist/stringdist.pdf https://cran.r-project.org/web/packages/RecordLinkage/RecordLinkage.pdf

    1 回复  |  直到 6 年前
        1
  •  2
  •   MichaelChirico    6 年前

    藏在文件里 stringdist 具体如下:

    雅罗-温克勒距离( method=jw 0<p<=0.25 )向Jaro距离添加校正项。定义为 d − l · p · d ,在哪里 d l 通过从输入字符串的开始计算两个字符串之间的第一个字符不匹配的字符数(最多四个)来获得。 因素 p 是一个惩罚因子,在Winkler的工作中通常取0.1。

    然而,在 stringdist::stringdist , p = 0 默认情况下。因此:

    1 - stringdist("advil", c("advi", "advill", "advil", "dvil", "sdvil"), 
                   method = "jw", p = .1)
    # [1] 0.9600000 0.9666667 1.0000000 0.9333333 0.8666667
    

    hard-coded in the source of RecordLinkage::jarowinkler .

    推荐文章