相关疑难解决方法(0)

使用 Python 对大数据集进行模糊逻辑

我的团队一直坚持在两个大型数据集上运行模糊逻辑算法。第一个(子集)大约有 180K 行,包含我们需要在第二个(超集)中匹配的人员的姓名、地址和电子邮件。超集包含 250 万条记录。两者具有相同的结构,并且数据已经被清理,即解析地址、标准化名称等。

  • 联系人ID int,
  • 全名 varchar(150),
  • 地址 varchar(100),
  • 电子邮件 varchar(100)

目标是将子集中的行中的值与超集中的相应值进行匹配,因此输出将组合子集和超集以及每个字段(标记)的相应相似性百分比。

  • 联系方式,
  • 查找联系人ID,
  • 全名,
  • 查找全名,
  • 全名_相似度,
  • 地址,
  • 查找地址,
  • 地址_相似度,
  • 电子邮件,
  • 查找电子邮件,
  • 电子邮件_相似度

为了首先简化和测试代码,我们连接了字符串,并且我们知道代码可以在非常小的超集上运行;然而,一旦我们增加记录数量,它就会陷入困境。我们尝试了不同的算法,Levenshtein、FuzzyWuzzy 等,但均无济于事。在我看来,问题在于 Python 是逐行执行的;不过,我不确定。我们甚至尝试使用流式传输在 Hadoop 集群上运行它;然而,它尚未取得任何积极成果。

#!/usr/bin/env python
import sys
from fuzzywuzzy import fuzz
import datetime
import time
import Levenshtein

#init for comparison
with open('normalized_set_record_set.csv') as normalized_records_ALL_file:
# with open('delete_this/xab') as normalized_records_ALL_file:
    normalized_records_ALL_dict = {}
    for line in normalized_records_ALL_file:
        key, value = line.strip('\n').split(':', 1)
        normalized_records_ALL_dict[key] = value
        # normalized_records_ALL_dict[contact_id] = concat_record

def score_it_bag(target_contact_id, target_str, ALL_records_dict): …
Run Code Online (Sandbox Code Playgroud)

python fuzzy-logic fuzzy-comparison fuzzywuzzy record-linkage

4
推荐指数
1
解决办法
7929
查看次数