Разница Джаро-Винклера между пакетами
Я использую нечеткое сопоставление, чтобы очистить ввод данных о лекарствах от пользователей, и я использую расстояние Джаро-Винклера. Я тестировал, какой пакет с расстоянием 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 ответ
Спрятан в документации для stringdist
является следующим:
Расстояние Яро-Винклера (
method=jw
,0<p<=0.25
) добавляет поправочный термин к Jaro-расстоянию. Определяется какd − l · p · d
, гдеd
это расстояние Jaro. Вот,l
получается путем подсчета, начиная с начала входных строк, после того, сколько символов произойдет несоответствие первого символа между двумя строками с максимум четырьмя. Факторp
это штрафной коэффициент, который в работе Винклера часто выбирают 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
,