0

我正在使用 Dedupe 库将人员记录相互匹配。我的数据包括名字、姓氏、电子邮件、电话 1、电话 2、电话 3 和地址信息。

这是我的问题:如果两个记录的名字、姓氏与(电话1、电话2、电话3、电子邮件和地址)匹配,我总是希望以80%到99%的置信度匹配两条记录,我也想匹配像电话1=这样的交叉电话号码电话 2,电话 1=电话 3,电话 2=电话 3。

这是我的一些代码的示例:

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 库中,我有什么方法可以将交叉电话号码与 first_name 和 last_name 匹配?

4

1 回答 1

1

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

第一个是使用set变量类型。. 捕获集在比较字符串的方式上类似于文本 - 它查看常用术语,因此从这个角度来看,电话号码 (123) 456-7890 与 4567890 不同。

我认为更好的另一种选择是构建自定义比较器。此比较器将获取两个电话号码列表并返回一个号码。数字越低越好。该比较器可以基于已经用于字符串变量的仿射比较算法。这是一个实现:

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

这是我返回两个列表中任意两个电话号码之间的最小距离。但是 - 当然可以提出替代措施。

最后一点:创建记录时,应将所有电话放在一个字段中。该列表应该是电话号码列表(如果没有,则为空列表)。

于 2020-06-12T09:49:29.513 回答