使用Python重复数据删除库返回所有匹配凌乱的数据集

时间:2017-11-17 03:50:11

标签: fuzzy-comparison record-linkage python-dedupe

首先,如果您还没有看到Python的Dedupe库:那真棒。就像TensorFlow一样,它是将机器学习带给大众的好方法(像我一样)。

我试图记录名称与单个大型杂乱数据集的链接。我现在正在使用启发式方法,而且它的数据集越来越复杂。

问题:

有没有办法执行单个记录的匹配(逐个或分批)并返回所有可能的匹配?

Gazetteer docs说一方必须干净,没有重复。如果名称可以重复,但序列号不是(并且序列号不是用于匹配)那么重复吗?

上下文

美国有160万台专用建筑机器。有一个数据库包含机器类型,所有者名称(最多两个,包括公司),序列号和维护信息,如last_service_date

人们经常询问他们的机器的维护和销售(100-250 /天),并保持运行记录。问题是将手机上的名称与他们拥有的机器相匹配。我需要将表单上的名称与所有权记录上的名称相匹配,以便在事后了解有关机器的更多信息,并了解机器的生命周期。

示例数据:

"""
 This is simplified data. We often have two names on the form, and owner names
 come in first_name, last_name format but are often split in strange ways when
 multiple owners have a single machine.
"""
# Incoming Record (100-250+ per day)
{
'raw_name': 'Maria C Hernandez', 'inquire_date': '2017-11-16', 'inquire_type': 'sale'
}

# Ownership Records (1.6M+, with duplicates of NAME but not SERIAL #)
[
{'owner_1': 'HECTOR & MARIANNE HERNANDEZ', 'owner_2': '', 'serial': '3993892k'},
{'owner_1': 'MARIANA HERNANDEZ', 'owner_2': '', 'serial': '8383883hh'},
{'owner_1': 'MARIA HERNANDEZ', 'owner_2': 'TAMMY ULMER', 'serial': '123fdfe'},
{'owner_1': 'JOSE & MARIA HERNANDEZ', 'owner_2': 'MH CORP', 'serial': '223466y4'},
{'owner_1': 'MARIA C HERNANDEZ', 'owner_2': 'HIPOLITO HERNANDEZ', 'serial': '2433ff3345'},
]

也许我需要一些指导......对于我们的启发式算法,我基本上将两个数据集中的名称字段分开,并以6种或7种不同的方式对它们进行比较。现在,我们正在查询可能有助于匹配的多个名称。也许更多的启发式方法可行,但这个工具似乎非常适合这项工作。

2 个答案:

答案 0 :(得分:1)

您可以使用字符串指标逐一进行分析。但是,检查每条记录甚至计算效率也不高,因为您将执行类似于全扫描的操作。使用字符串指标,您可以组合字符串并为其指定权重。例如:组合姓名和电话号码,这也有助于避免真正的重复(如果您有两个同一个人的条目),因为组合将是一个唯一的字符串。您可以制定方法为其分配权重,或者让重复数据删除使用“主动学习”计算权重。

请使用以下文档了解详情。

https://dedupe.io/developers/library/en/latest/Matching-records.html

答案 1 :(得分:1)

这是Gazetteer类的一个很好的用例。我不确定你为什么认为这不合适?

(我是重复数据删除的主要作者)