r - Jaro-Winkler 的包之间的区别
问题描述
我正在使用模糊匹配来清理用户输入的药物数据,并且我正在使用 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
解决方案
隐藏在文档中的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
事实上,这个值是硬编码在RecordLinkage::jarowinkler
.
推荐阅读
- c++ - 避免标签行更改
- go - Go 的 Protoc-gen-gogo 编译器问题
- python - python中的十进制表示
- c++ - 我的代码不适用于程序打印两个数字之间的所有素数
- flutter - 我想从 [43,43,12] 设置容器的颜色,但容器只需要颜色(oxff....)
- api - 从 apisetu.gov.in API 获取车辆登记详情
- python - 尝试访问字典中的键时引发 KeyError - 键存在
- python - 在 pytorch 中,使用相同的脚本和模型时随机训练模型
- wordpress - WP 如何防止来自 random_password 钩子的密码劫持?
- java - MQJE001:发生 MQException:完成代码 2,原因 2059 MQJE011:套接字连接尝试被拒绝,无法访问 IBM MQ