Можно ли как-нибудь взвесить определенные слова, используя пакет stringdist
или другой пакет расстояния между строками?
Часто у меня есть строки, которые имеют общее слово, такое как "город" или "университет", которые получают относительнов результате совпадения расстояний между близкими строками, но очень разные (то есть: "Университет Юты" и "Университет Огайо" или "Город XYZ" и "Город ABC").
Я знаю, что операции (удаление, вставка, замена) могут быть взвешены по-разному в зависимости от алгоритма, но я не видел способа включить список слов в паре с весами.Есть мысли?
Конечно, одним из вариантов было бы str_remove
эти общие слова до сопоставления, но есть проблема в том, что "XYZ County" и "XYZ City" будут выглядеть одинаково.
Пример:
"Университет Юты" и "Университет Огайо"
stringdist("University of Utah", "University of Ohio") / max(nchar("University of Utah"), nchar("University of Ohio"))
Нормализованное расстояние до струны составляет 0,22222.Это относительно низко.Но на самом деле нормализованное расстояние между строками OSA между «Ютой» и «Огайо» составляет 1:
4/18 = 0,222222
Тем не менее, при удалении «Университета» и других распространенных строк, таких как «State»«Перед рукой приведет к матчам между« Университетом Огайо »и« Штатом Огайо ».
Взвешивание строки, такой как «Университет», для подсчета, скажем, 0,25 фактического количества символов, используемых в знаменателе нормализации, уменьшит влияние этих общих подстрок, то есть:
4 /(18 * 0,25) = 0,888888.
Здесь становится неясным, когда мы рассматриваем возможность сделать то же самое с примером штата против университета:
stringdist("University of Ohio", "Ohio State")
дает 16. Но взяв 0,25 знаменателя:
16 / (18 * .25) = 3.55555.
Возможно, лучшим вариантом было бы использовать LCS, но подстроки с меньшим весом, которые соответствуют списку общих строк.Поэтому, несмотря на то, что «Университет Юты» и «Университет Огайо» имеют общую подстроку из 14 символов, если «Университет» появится в этом списке, значение LCS для него будет уменьшено.
Редактировать: Другая мысль
У меня была другая мысль - используя пакет tidytext
и unnest_tokens
, можно генерировать список наиболее распространенных слов во всех сопоставляемых строках.Возможно, было бы интересно рассмотреть занижение этих слов относительно их общности в наборе данных, поскольку чем они более распространены, тем меньше у них различающей способности ...