我正在使用模糊匹配来清理用户输入的药物数据,并且正在使用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
答案 0 :(得分:2)
stringdist
的文档中包含以下内容:
Jaro-Winkler距离(
method=jw
,0<p<=0.25
)为Jaro距离添加了一个校正项。它定义为d − l · p · d
,其中d
是Jaro距离。这里,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
实际上,值是Flow.on_trigger/2
。