#r #dplyr #nlp #fuzzyjoin
#r #dplyr #nlp #fuzzyjoin
Вопрос:
Я ломал голову, пытаясь найти способ решить эту проблему без необходимости углубляться в НЛП и начинать обучающие модели. У меня есть 2 довольно больших набора данных, которые должны быть сопоставлены по имени, но их написание и синтаксис немного отличаются, достаточно просты для понимания человеком, но достаточно сложны, чтобы мои нечеткие сопоставления и расстояния редактирования Левенштейна не могли. В наборе данных большое количество дубликатов, но их достаточно, чтобы я не мог сопоставить их вручную, поэтому я пытаюсь создать «правила» для сопоставления. Позволит ли такой пакет, как FuzzyWuzzy, использовать больше пользовательских элементов для решения этой проблемы? Пример ниже, спасибо!
a <- c("The City of New York", "The City of New York", "Los Angeles City", "The State of California", "The State of California")
b <- c("New York City", "New York City", "Los Angeles", "California State", "CA State")
Самое близкое, что я получил до сих пор при сопоставлении наборов данных, — это нечеткое сопоставление строк, но это работает только прилично хорошо, и все равно пропускает большой фрагмент или допускает немало ошибок при увеличении максимального расстояния редактирования.
library(fuzzyjoin)
a <- as.tibble(a)
b <- as.tibble(b)
stringdist_inner_join(x = a, y = b, max_dist = 3, method = 'LV', ignore_case = T)
Набор данных немного глубже, чем это. Я надеялся создать какое-то «правило», согласно которому «Город Нью-Йорк» всегда равен «Нью-Йорку», но я не уверен, есть ли более разумный способ сделать это. Я надеюсь, что этот конкретный текстовый пример поможет. Большое спасибо!
Комментарии:
1. Сколько у вас городов и сколько отклонений у вас может быть для каждого города? Иногда лучший способ — это самый простой способ, иметь список сопоставлений.
2. @SinhNguyen там несколько сотен уникальных строк. Я полагаю, что это может быть лучшим способом, спасибо!