Установка явных правил сопоставления записей с использованием библиотеки Python Dedupe

Я использую библиотеку Dedupe, чтобы сопоставлять записи о людях друг с другом. Мои данные включают в себя имя, дату рождения, адрес, номер телефона и другую личную информацию.

Вот мой вопрос: я всегда хочу сопоставить две записи со 100% уверенностью, если у них совпадают имя и номер телефона (например).

Вот пример некоторых из моего кода:

fields = [
    {'field' : 'LAST_NM', 'variable name' : 'last_nm', 'type': 'String'},
    {'field' : 'FRST_NM', 'variable name' : 'frst_nm', 'type': 'String'},
    {'field' : 'FULL_NM', 'variable name' : 'full_nm', 'type': 'Name'},
    {'field' : 'BRTH_DT', 'variable name' : 'brth_dt', 'type': 'String'},
    {'field' : 'SEX_CD', 'type': 'Exact'},
    {'field' : 'FULL_US_ADDRESS', 'variable name' : 'us_address', 'type': 'Address'},
    {'field' : 'APT_NUM', 'type': 'Exact'},
    {'field' : 'CITY', 'type': 'ShortString'},
    {'field' : 'STATE', 'type': 'ShortString'},
    {'field' : 'ZIP_CD', 'type': 'ShortString'},
    {'field' : 'HOME_PHONE', 'variable name' : 'home_phone', 'type': 'Exact'},
    {'type': 'Interaction', 'interaction variables' : ['full_nm', 'home_phone']},

В библиотеке Dedupe есть ли способ для меня, чтобы явно сопоставить два или более полей? Согласно документам, "поле взаимодействия умножает значения нескольких переменных". ( https://dedupe.readthedocs.org/en/latest/Variable-definition.html). Я хочу реализовать строгое правило, которое соответствует 100% -ной достоверности, а не просто умножению значений переменных. Причина, по которой я спрашиваю, состоит в том, что я обнаружил, что иногда Dedupe пропускает некоторые совпадения по этим двум критериям (вероятно, из-за того, что я недостаточно долго тренировался, но, тем не менее, я просто хочу запрограммировать эти совпадения в свой сценарий).

Какие-либо предложения?

2 ответа

У Дедупе нет этой функции и, вероятно, никогда не будет (я один из главных авторов). Если это действительно правило, что точные совпадения в этих полях означают, что записи являются со-референтными, вы можете написать некоторый код, чтобы явно сопоставить их, прежде чем отправлять остальные записи в Dedupe.

exact_matches = defaultdict(list)
for record_id, record in records.items():
    match_key = (record['name'], record['phone'])
    exact_matches[match_key].append(record_id)

partially_deduplicated = []
exact_lookup = {}
for match_group in exact_matches.values():
     head_id = match_group.pop()
     partially_deduplicated.append((head_id, records[head_id]))
     for dupe_id in match_group :
         exact_lookup[dupe_id] = head_id

Установите все поля, которые вы хотите точно найти, чтобы набрать "точный" - например:

{'field' : 'FULL_NM', 'variable name' : 'full_nm', 'type': 'Exact'},
Другие вопросы по тегам