【问题标题】:Setting explicit rules for matching records using Python Dedupe library使用 Python Dedupe 库为匹配记录设置显式规则
【发布时间】:2015-09-13 14:02:36
【问题描述】:

我正在使用 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#interaction)。我想实施一个严格的规则,它与 100% 的置信度匹配 - 而不仅仅是将变量的值相乘。我问的原因是我发现 Dedupe 偶尔会错过这两个标准的一些匹配项(可能是因为我训练的时间不够长,但无论如何,我只想将这些匹配项硬编码到我的脚本中)。

有什么建议吗?

【问题讨论】:

    标签: python duplicates record-linkage python-dedupe


    【解决方案1】:

    Dedupe 没有此功能,并且可能永远不会(我是主要作者之一)。如果这些字段上的完全匹配确实是一条规则意味着记录是共同引用的,那么您可以编写一些代码来明确匹配这些字段,然后再将其余记录发送到 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
    

    【讨论】:

      【解决方案2】:

      将您想要完全匹配的所有字段设置为输入“精确” - 例如:

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

      【讨论】:

      • 谢谢,@barny。澄清一下,除了自动进行匹配的少数条件外,我还希望 Dedupe 发挥其魔力。如果我了解 Dedupe,则两行匹配的概率是所有字段概率的组合。例如,如果我将 HOME_PHONE 设置为“精确”,如果姓名和出生日期显着不同,则具有相同电话号码的两条记录可能并不总是匹配。我不认为仅仅将 FULL_NM 更改为 'Exact' 会创建一个规则,其中姓名和电话号码匹配的所有记录都将匹配,因为其他字段可能非常不同。
      • 您已经为家庭电话和全名配置了交互 - 并且电话已经设置为精确,因此添加使全名完全匹配应该可以解决问题。举例说明重复数据删除未能发现的内容 - 它是否总是缺少相同的组合?
      • 您是否尝试过仅包含姓名和电话号码的字段的初始规则集,两者都设置为精确,并且可能是引用它们的交互?如果进行完全匹配,您实际上并不需要重复数据删除 - 您可以预处理以查找这些记录并将它们从后续重复数据删除处理中删除。
      • 我刚刚再次测试,即使在通过交互将姓名和电话号码设置为“精确”后,重复数据删除也不匹配某些记录(可能是因为地址、出生日期等其他字段不匹配) .我认为您最近的评论是最好的方法。我想我只需要先进行预处理,然后对其余记录运行重复数据删除。我只是希望我能同时做到这两点!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2019-09-11
      • 2012-07-17
      • 2022-11-10
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多