python 重复数据删除库中有任何类型可以交叉 phone 匹配

there is any type in python dedupe library to cross phone match

我正在使用 Dedupe 库将个人记录相互匹配。我的数据包括 first_name、last_name、电子邮件、phone1、phone2、phone3 和地址信息。

这是我的问题:如果两条记录具有匹配的 first_name,last_name 和 (phone1,phone2,phone3,电子邮件和地址)我也想匹配交叉 phone 号码,例如 phone1=phone2,phone1 =phone3,phone2=phone3.

这是我的一些代码示例:

fields = [
{'field' : 'first_name','variable name': 'ffname','type': 'Exact'},
{'field' : 'last_name','variable name': 'lname','type': 'Exact'},
{'field' : 'email','variable name': 'email', 'type': 'Exact','Has Missing':True},
{'field' : 'phone1','variable name': 'phone1', 'type': 'Exact', 'Has Missing':True},
{'field' : 'phone2','variable name': 'phone2', 'type': 'Exact', 'Has Missing':True},
{'field' : 'phone3','variable name': 'phone3', 'type': 'Exact', 'Has Missing':True},
{'field' : 'address','variable name': 'addr','type': 'String','Has Missing':True}    
]

在 Dedupe 库中,有什么方法可以让我将交叉 phone 数字与 first_name 和 last_name 相匹配?

查看文档,有两种方法可以做到这一点。

第一个是使用set variable type.。 catch - set 在比较字符串的方式上类似于文本 - 它查看常用术语,因此从这个角度来看,phone 数字 (123) 456-7890 与 4567890 不同。

另一个我认为更好的选择是构建一个 custom comparator。这个比较器将采用两个列表 phone 数字和 return 一个数字。数字越低越好。该比较器可以基于已经用于字符串变量的仿射比较算法。这是一个实现:

from affinegap import normalizedAffineGapDistance as affineGap

def phonesComparator(f1, f2):
    distances = []

    for p1 in f1: 
        for p2 in f2:
            distances.append(affineGap(p1, p2))
    if distances:
        return min(distances) 
    else:
        return 200.0

这是我 return 计算两个列表中任意两个 phone 数字之间的最小距离。但是——当然可以想出替代措施。

最后一点:创建记录时,应将所有 phone 放在一个字段中。该列表应该是 phone 个数字的列表(如果有 none,则为空列表)。