Если вы просто делаете небольшие партии, которые относительно хорошо сформированы, то функции compare.linkage()
или compare.dedup()
в пакете RecordLinkage
должны стать отличной отправной точкой. Но если у вас большие партии, вам, возможно, придется еще немного поработать.
Я использую функции jarowinkler()
, levenshteinSim()
и soundex()
в RecordLinkage
, чтобы написать свою собственную функцию, использующую мою собственную схему взвешивания (также, как и вы, вы не можете использовать soundex()
для большие наборы данных с RecordLinkage
).
Если у меня есть два списка имен, которые я хочу сопоставить («ссылка на запись»), то я обычно преобразую оба в нижний регистр и удаляю все знаки препинания. Чтобы позаботиться об «Limited» и «LTD», я обычно создаю еще один вектор первого слова из каждого списка, что позволяет дополнительно взвешивать первое слово. Если я думаю, что один список может содержать аббревиатуры (может быть, ATT или IBM), то я сокращу другой список. Для каждого списка я получаю строку данных со строками, которую я хотел бы сравнить, и которую я пишу как отдельные таблицы в базе данных MySQL.
Чтобы у меня не было слишком большого числа кандидатов, я LEFT OUTER JOIN
этих двух таблиц на чем-то, что имеет для соответствия между двумя списками (возможно, это первый три буквы в каждом списке или первые три буквы и первые три буквы в аббревиатуре). Затем я вычисляю результаты матчей, используя вышеуказанные функции.
Вам по-прежнему приходится много проверять вручную, но вы можете отсортировать результаты, чтобы быстро исключить несоответствия.