Подбор людей по именам, DoB, адресу и т. Д. - PullRequest
3 голосов
/ 04 апреля 2011

У меня есть две базы данных, которые по-разному отформатированы. Каждая база данных содержит личные данные, такие как имя, дата рождения и адрес. Они оба довольно большие, одна ~ 50 000 записей, другая ~ 1,5 миллиона.

Моя задача - сравнить записи и найти возможные совпадения. В идеале генерировать какой-то процент, представляющий, насколько близко данные совпадают. Я рассмотрел решения, включающие создание нескольких индексов или поиск по расстоянию Левенштейна, но оба они кажутся неоптимальными. Индексы могут легко пропустить близкие совпадения, и расстояние Левенштейна кажется слишком дорогим для такого количества данных.

Ответы [ 2 ]

6 голосов
/ 04 апреля 2011

Давайте попробуем соединить несколько идей. Общая ситуация слишком широка, и это будут просто рекомендации / советы / что угодно.

Обычно вам нужны не отношения истинного / ложного совпадения, а оценка для каждого совпадения кандидата. Это потому, что вы никогда не можете быть полностью уверены, что кандидат действительно совпадает.

Оценка является отношением один ко многим. Вы должны быть готовы сравнить каждую запись вашей маленькой БД с несколькими записями основной БД.

Для каждого вида матча должны быть назначены вес и оценка, которые будут суммироваться для общего счета этой пары.

Вы должны попытаться сравнить фрагменты как можно меньше, чтобы обнаружить частичные совпадения. Вместо сравнения [адрес], попробуйте сравнить [город] [штат] [улица] [номер] [кв.

Некоторые поля требуют особой обработки, но этот вопрос слишком широк для этого ответа. Всего несколько советов. Средний инициал в именах и префиксах может добавить некоторую оценку, но должен быть минимальным (так как они многократно пропускаются). Номера телефонов могут иметь переменные префиксы и суффиксы, поэтому иногда требуется сопоставление подстроки. В зависимости от качества данных имена и фамилии должны быть преобразованы в soundex или аналогичные. Названия улиц обычно нормализуются, но в них могут отсутствовать префиксы или суффиксы.

Будьте готовы к длительной работе, если вам нужна высококачественная продукция.

Процентное пороговое значение обычно устанавливается так, что если после обработки частично пары и получения оценки меньше x из максимального значения y, пара отбрасывается.

Если вы ЗНАЕТЕ, что какое-то поле ДОЛЖНО совпадать, чтобы рассматривать пару в качестве кандидата, это обычно значительно ускоряет все.

Структуры данных для сравнения имеют решающее значение, но я не думаю, что мой конкретный опыт будет вам полезен, как я всегда делал подобные вещи на мэйнфреймах: очень высокоскоростные диски, много памяти и массивные параллелизмы , Я мог бы подумать, что имеет отношение к общей ситуации, если вы чувствуете, что некоторая помощь по этому поводу может быть полезной.

НТН!

PS: Почти шутка: в большом проекте, которым я управлял несколько лет назад, у нас была фамилия матери-девы в обеих базах данных, и мы присвоили высокий балл тому факту, что = обе фамилии совпадают (фамилия человека и его матери) ). Мораль: Все Смит-> Смит - это одно и то же лицо:)

0 голосов
/ 04 апреля 2011

Вы можете попробовать использовать функцию полнотекстового поиска, если ваша СУБД поддерживает ее?Полнотекстовый поиск строит свои индексы и может найти похожее слово.

Подойдет ли вам это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...