2

我正在使用模糊匹配来清理用户输入的药物数据,并且我正在使用 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

4

1 回答 1

2

隐藏在文档中的stringdist是以下内容:

Jaro-Winkler 距离 ( method=jw, 0<p<=0.25) 为 Jaro 距离添加了一个修正项。它被定义为d − l · p · d,其中d是 Jaro 距离。这里,l是从输入字符串的开始,计算两个字符串第一个字符不匹配出现多少个字符后,最多四个。该因子p是一个惩罚因子,在 Winkler 的工作中经常选择 0.1。

但是,在 中stringdist::stringdistp = 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

事实上,这个值是硬编码在RecordLinkage::jarowinkler.

于 2018-10-09T03:56:01.070 回答