Альтернативный подход к использованию comparep () для нечеткого сопоставления в R

У меня большой файл административных данных, около 1 миллиона записей. В этом наборе данных отдельные люди могут быть представлены несколько раз. Около половины записей имеют идентификационный код, который связывает записи с отдельными лицами; для той половины, которая этого не делает, мне нужно нечеткое совпадение имен, чтобы отмечать записи, которые потенциально принадлежат одному и тому же человеку.

Изучив записи с идентификационным кодом, я составил список различий, которые произошли при записи имен одного и того же человека:

  • Включение отчества, например Джон Сноу vs Джон Таргариен Сноу
  • Включение второй фамилии, например Джон Сноу vs Джон Таргариен-Сноу
  • Псевдоним / сокращение имени, например Джонатон Сноу vs Джон Сноу
  • Изменение имен напр. Джон Сноу против Сноу Джон
  • Ошибки / опечатки / варианты: например, Самуал / Самуэль, Моника / Моника, Рафаэль / Рафаэль

Учитывая типы совпадений, которые мне нужны, есть ли лучший подход, чем использование расстояния согласования () / levenshtein, который легко реализуется в R?

Изменить: согласование () в R не очень хорошо справляется с этой проблемой - из-за большого количества вставок и замен, которые мне нужно разрешить для учета способов записи имен по-разному, возникает много ложных совпадений .


person edstatsuser    schedule 28.07.2017    source источник
comment
@ImranAli, этот вопрос касается эффективности, я спрашиваю о наилучшем подходе к проблеме, учитывая особые различия в способах записи имен в моем наборе данных.   -  person edstatsuser    schedule 28.07.2017


Ответы (1)


Я бы сделал несколько проходов.

"Jon .* Snow" - Отчество

"Jon .*Snow" - Вторая фамилия

Псевдонимы потребуют словаря сопоставлений от длинной формы к короткой, нет регулярного выражения, которое обработало бы его.

"Snow Jon" - разворот (да)

соглашается обрабатывать незначительные орфографические ошибки.

Вы, вероятно, также захотите разделить свои имена на первое, среднее и последнее.

person shians    schedule 28.07.2017
comment
Спасибо, я не подумал о том, чтобы делать несколько проходов, и подумал, что будет проще сохранить имя как одну строку, а не разбивать ее. Просто чтобы проверить - когда вы говорите «разворот», вы просто имеете в виду проверку фамилии в первую очередь, и наоборот? - person edstatsuser; 01.08.2017
comment
Да, это то, что я имею в виду под обращением. Вероятно, это проще сделать, если вы разделите все на отдельные столбцы для имени, отчества и фамилии. - person shians; 01.08.2017