У меня есть очень большая база данных с именами, как это:Поиск частичных совпадений со строками в R
names <- c("William Gates", "Bill Gates", "Gates, William H. III",
"Gates, William III", "William H Gates", "William H. Gates",
"Carlos Slim Helu & family", "Carlos Slim Helu",
"Carlos Slim & Family", "Carlos Slim")
, который я хотел бы «очистить» автоматически, как это:
new_names <- c("William Gates", "William Gates", "William Gates",
"William Gates", "William Gates", "William Gates",
"Carlos Slim Helu & family", "Carlos Slim Helu & family",
"Carlos Slim Helu & family", "Carlos Slim Helu & family")
где я (произвольно) использовали первое вхождение имени для замены других его вариантов.
В этом примере names
является символьным вектором длины 10. Я хотел бы создать матрицу «» с «частичными значениями соответствия». Эта матрица сохранит «меры» между 0 и 1 степени частичного совпадения. Например, сравнение names[1]
с names[1]
дает идеальное соответствие, поэтому значение будет 1; сравнение names[1]
с names[2]
даст что-то вроде 5/12 = 0,41667, что отражает тот факт, что Гейтс является общим для обеих строк и что (игнорируя пустые строки) names[1]
имеет 12 букв; по той же логике, сравнение names[2]
с names[1]
даст что-то вроде 5/9 = 0,55556.
я бы, вероятно, игнорировать случаи (семья и семья будет идеальный матч) и сосредоточиться только на соответствие подстрок (но если кто-то комментарий о том, как соответствовать, скажем, тонкий и Сельма, это было бы отлично тоже.
В качестве второго шага я создам треугольную матрицу максимальных значений (в примере значение 5/9 = 0,55556). Затем я использовал бы эту матрицу для наблюдения за ситуацией и для выбора порога, такого как 0,95 выше которого строки заменяются, постепенно понижая пороговое значение, пока не почувствую, что данные были очищены.
Я ожидаю, что такого рода вещи были выполнены раньше и что кто-то сможет h elp меня начать. Я прочитал о пакете compare
Пауля Мурелла и ожидаю, что это будет отличный инструмент для использования, но я не видел слишком много примеров, которые можно было бы легко адаптировать, поэтому, если вы знаете учебник или примеры, отличные от виньетирования пакета, пожалуйста, укажите мне их.
Я понимаю, что от хорошего вопроса ожидалось больше кода, и я приношу свои извинения за то, что не смог предоставить много. Хотя я достаточно хорошо знаком с R, я не отвечаю за строку. Если кто-то указывает мне на какое-то место, чтобы начать работу, я могу попытаться перефразировать мой вопрос некоторым примером кода.
Ничего себе, отлично! Позвольте мне поэкспериментировать с этим вечером (через 8 часов или около того) и вернуться к вам с комментариями. Благодаря! – PatrickT
вы забыли переименовать имена в raw_names, как указано, и это слишком маленькое редактирование для меня ;-) Мне нравится дендрограмма! должен уйти на работу, вернется к вам как можно скорее. – PatrickT