使用 Python 重复数据删除库 return 与杂乱的数据集进行所有匹配

Use Python dedupe library to return all matches against messy dataset

首先,如果您还没有看到 Python 的 Dedupe 库:它太棒了。与 TensorFlow 非常相似,它是将机器学习带给大众(比如我)的好方法。

我正在尝试针对单一、庞大、混乱的数据集记录名称链接。我现在正在使用启发式算法,它开始无法处理更复杂的数据集。

问题:

有没有办法对单个记录(逐条或批量)和return所有可能的匹配项进行匹配?

地名词典文档说一侧必须干净,没有重复。如果名称可以重复但序列号不能(并且序列号不用于匹配),那不是重复吗?

上下文:

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

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

示例数据:

"""
 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 种不同的方式进行比较。现在我们收到了多个名字的查询,可以帮助匹配。也许更多的启发式方法会奏效,但这个工具似乎非常适合这项工作。

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

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

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

这是地名词典的一个很好的用例 class。我不确定您为什么认为这不合适?

(我是 dedupe 的主要作者)