Вы должны создать свою собственную функцию сравнения, которая сравнивает две строки. В этой функции вы можете позвонить jarowinkler
. Самый простой способ сделать это, чтобы создать closure:
jw <- function(W_1, W_2, W_3) {
function(str1, str2) {
jarowinkler(str1, str2, W_1, W_2, W_3)
}
}
Это функция для передачи параметров веса, которые вы хотите использовать. Эта функция возвращает функцию сравнения, которые вы можете использовать в вашем compare.linkage
вызова:
rpairs <- compare.linkage(StringSet1, StringSet2,
strcmp = TRUE, strcmpfun = jw(4/9, 4/9, 1/9))
Алгоритм Яро-Винклер подсчитывает количество символов, которые соответствуют (жгутов определенную полосу частот) m
. Для двух строк john
и johan
существует 4 персонажа, которые соответствуют (j
, o
, h
и n
). Принимая только выбранные символы:
john
jonh
Он подсчитывает число транспозиций t
. В этом случае имеется одна транспозиция (переключаются h
и n
).
Яро сходство определяется по формуле:
1/3 * (w1 * m/l1 + w2 * m/l2 + w3 * (m-t)/m))
с l1
и l2
длин двух строк. Для весов, равных 1/3, это дает оценку от 0 до 1 (1 = идеальное совпадение).
Показатель Jaro-Winkler добавляет «бонус» для символов, которые соответствуют началу строки, поскольку в начале обычно меньше ошибок (мера создается для имен). Для получения дополнительной информации см., Например, M.P.J van der Loo (2014), The stringdist Package for Approximate String Matching.
Спасибо! Это ответило на мой вопрос. – user1049817
Не могли бы вы объяснить, как весы играют в функцию соответствия jarowinkler? – lawyeR
@lawyeR добавил объяснение. –