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,则为空列表)。
我正在使用 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,则为空列表)。