首先,如果您还没有看过 Python 的Dedupe库:它太棒了。就像 TensorFlow 一样,它是将机器学习带给大众(比如我)的好方法。
我正在尝试针对单个、大型、混乱的数据集记录名称的链接。我现在正在使用启发式方法,并且它开始无法处理更复杂的数据集。
问题:
有没有办法执行单个记录的匹配(一个接一个或批量)并返回所有潜在的匹配?
地名词典说一侧必须干净,没有重复。如果名称可以重复但序列号不能重复(并且序列号不用于匹配),那不是重复吗?
语境:
美国有 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 种不同的方式进行比较。现在我们收到了可以帮助匹配的多个名称的查询。也许更多的启发式方法会起作用,但这个工具似乎非常适合这项工作。