我有两个超过一百万个名称的列表,命名约定略有不同.这里的目标是匹配那些相似的记录,具有95%置信度的逻辑.
我知道有一些我可以利用的库,比如Python中的FuzzyWuzzy模块.
然而,就处理而言,似乎将占用太多资源,将1个列表中的每个字符串与另一个列表进行比较,在这种情况下,似乎需要100万乘以另外的百万次迭代次数.
这个问题还有其他更有效的方法吗?
更新:
所以我创建了一个bucketing函数,并应用了一个简单的规范化,即删除空格,符号并将值转换为小写等…
for n in list(dftest['YM'].unique()):
n = str(n)
frame = dftest['Name'][dftest['YM'] == n]
print len(frame)
print n
for names in tqdm(frame):
closest = process.extractOne(names,frame)
通过使用pythons pandas,将数据加载到按年分组的较小桶中,然后使用FuzzyWuzzy模块,process.extractOne用于获得最佳匹配.
结果仍然有点令人失望.在测试期间,上面的代码用于仅包含5千个名称的测试数据框,并且占用将近一个小时.
测试数据被拆分.
>姓名
>出生日期的年月
我正在用他们的YM在同一桶中的桶进行比较.
问题可能是因为我使用的FuzzyWuzzy模块?感谢任何帮助.
解决方法:
这里有几种级别的优化可以将此问题从O(n ^ 2)转换为较小的时间复杂度.
>预处理:在第一