Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python重复数据消除库设置匹配记录的显式规则_Python_Duplicates_Record Linkage_Python Dedupe - Fatal编程技术网

使用Python重复数据消除库设置匹配记录的显式规则

使用Python重复数据消除库设置匹配记录的显式规则,python,duplicates,record-linkage,python-dedupe,Python,Duplicates,Record Linkage,Python Dedupe,我正在使用重复数据消除库将个人记录相互匹配。我的数据包括姓名、出生日期、地址、电话号码和其他个人身份信息 我的问题是:如果两个记录有匹配的姓名和电话号码(例如),我总是希望以100%的置信度匹配它们 下面是我的一些代码的示例: fields = [ {'field' : 'LAST_NM', 'variable name' : 'last_nm', 'type': 'String'}, {'field' : 'FRST_NM', 'variable name' : 'frst_n

我正在使用重复数据消除库将个人记录相互匹配。我的数据包括姓名、出生日期、地址、电话号码和其他个人身份信息

我的问题是:如果两个记录有匹配的姓名和电话号码(例如),我总是希望以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']},
在重复数据消除库中,是否有任何方法可以显式匹配两个或多个字段?根据文档,“交互字段将多个变量的值相乘。”()。我想要实现一个严格的规则,它以100%的置信度匹配,而不仅仅是将变量的值相乘。我询问的原因是,我发现重复数据消除偶尔会遗漏这两个标准上的一些匹配(可能是因为我没有足够长的训练时间,但无论如何,我只想将这些匹配硬编码到我的脚本中)


有什么建议吗?

将所有要精确匹配的字段设置为“精确”类型,例如:

{'field' : 'FULL_NM', 'variable name' : 'full_nm', 'type': 'Exact'},

重复数据消除没有此功能,可能永远也不会有(我是主要作者之一)。如果这些字段上的精确匹配确实意味着记录是共同引用的,那么在将其余记录发送到重复数据消除之前,您可以编写一些代码来显式匹配这些字段

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

谢谢,巴尼。为了澄清这一点,除了自动进行匹配的少数条件外,我还希望重复数据消除发挥其魔力。如果我理解重复数据消除,则两行匹配的概率是所有字段的概率的组合。例如,如果我将HOME_PHONE设置为“精确”,则如果姓名和出生日期明显不同,则具有相同电话号码的两个记录可能并不总是匹配。我不认为仅仅将FULL_NM更改为'Exact'将创建一个规则,其中所有与姓名和电话号码匹配的记录都将匹配,因为其他字段可能会非常不同。您已经为home phone和FULL name配置了交互,并且手机已经设置为Exact,因此添加使全名完全匹配就可以了诀窍。举一个例子,说明重复数据消除无法发现的内容—重复数据消除是否总是缺少相同的组合?您是否尝试过一组仅包含姓名和电话号码的字段的初始规则集,这两个字段都设置为“精确”,并且可能有一个交互引用了这两个字段?如果进行精确匹配,您实际上不需要重复数据消除-您可以预处理以查找这些记录,并将其从后续重复数据消除处理中删除。我刚刚再次测试,即使在通过交互将姓名和电话号码设置为“精确”后,重复数据消除也不会匹配某些记录(可能是因为地址、出生日期等其他字段不匹配)。我认为您最近的评论是最好的方法。我认为我只需要先预处理,然后对其余记录运行重复数据消除。我只是希望我可以同时执行这两项操作!