2015-07-02 10 views
1

Я использую метод compare.linkage в пакете связывания записей в R для сравнения подобия 2 наборов строк. Метод сравнения строк по умолчанию - jarowinkler с тремя значениями по умолчанию, установленными на 1/3, 1/3 и 1/3.Установка весов для Jarowinkler в compare.linkage

Я хочу переписать весы по умолчанию, чтобы сказать 4/9, 4/9 и 1/9. Как мне это сделать? Заранее спасибо.

сценарий по умолчанию:

rpairs <- compare.linkage(StringSet1, StringSet2, strcmp = TRUE, strcmpfun = jarowinkler) 

ответ

3

Вы должны создать свою собственную функцию сравнения, которая сравнивает две строки. В этой функции вы можете позвонить 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.

+0

Спасибо! Это ответило на мой вопрос. – user1049817

+0

Не могли бы вы объяснить, как весы играют в функцию соответствия jarowinkler? – lawyeR

+0

@lawyeR добавил объяснение. –