Яро-Винклер: разница между пакетами - PullRequest
0 голосов
/ 08 октября 2018

Я использую нечеткое сопоставление для очистки данных, вводимых пользователями, и использую расстояние Джаро-Винклера.Я проверял, какой пакет с расстоянием Джаро-Винклера был быстрее, когда я заметил, что настройки по умолчанию не дают одинаковых значений.Может кто-нибудь помочь мне понять, откуда разница?Пример:

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 / пакеты / RecordLinkage / RecordLinkage.pdf

1 Ответ

0 голосов
/ 09 октября 2018

В документации для stringdist скрыто следующее:

Расстояние Яро-Винклера (method=jw, 0<p<=0.25) добавляет поправочный член к расстоянию Яро.Он определяется как 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.

...