在查看 Python 中用于记录重复数据删除的 Dedupe 库的示例时,我发现它在输出文件中创建了一个Cluster Id列,根据文档指示哪些记录相互引用。尽管我无法找出Cluster Id之间的任何关系以及这如何帮助查找重复记录。如果有人对此有所了解,请向我解释这一点。这是重复数据删除的代码。
# This can run either as a python2 or python3 code
from future.builtins import next
import os
import csv
import re
import logging
import optparse
import dedupe
from unidecode import unidecode
input_file = 'data/csv_example_input_with_true_ids.csv'
output_file = 'data/csv_example_output1.csv'
settings_file = 'data/csv_example_learned_settings'
training_file = 'data/csv_example_training.json'
# Clean or process the data
def preProcess(column):
try:
column = column.decode('utf-8')
except AttributeError:
pass
column = unidecode(column)
column = re.sub(' +', ' ', column)
column …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该Dedupe
包将一个小杂乱的数据合并到一个规范表.由于规范表非常大(1.22亿行),我无法将其全部加载到内存中.
目前的做法,我使用基于关闭这个发生在测试数据一整天:存储在一个字典凌乱数据的300K行的表,并将其存储在MySQL的规范数据的60万行的表.如果我在内存中完成所有操作(作为dict读取规范表),它只需要半个小时.
有没有办法让这个更有效率?
blocked_pairs = block_data(messy_data, canonical_db_cursor, gazetteer)
clustered_dupes = gazetteer.matchBlocks(blocked_pairs, 0)
def block_data(messy_data, c, gazetteer):
block_groups = itertools.groupby(gazetteer.blocker(messy_data.viewitems()),
lambda x: x[1])
for (record_id, block_keys) in block_groups:
a = [(record_id, messy_data[record_id], set())]
c.execute("""SELECT *
FROM canonical_table
WHERE record_id IN
(SELECT DISTINCT record_id
FROM blocking_map
WHERE block_key IN %s)""",
(tuple(block_key for block_key, _ in block_keys),))
b = [(row[self.key], row, set()) for row in c]
if b:
yield (a, b)
Run Code Online (Sandbox Code Playgroud) 我需要在大型数据集中查找重复项,因此我正在测试重复数据删除python 库。
我知道建议用于小型数据集,所以我认为使用好的机器可以提高性能。我有一台具有 56 GB RAM 的机器,并且正在针对包含 200000 行的数据集运行类似于“csv_example”的测试。它可以工作,但内存使用率非常低,处理(CPU)也非常低。
阻塞阶段似乎花费了太长的时间:
INFO:dedupe.blocking:10000, 110.6458142 seconds
INFO:dedupe.blocking:20000, 300.6112282 seconds
INFO:dedupe.blocking:30000, 557.1010122 seconds
INFO:dedupe.blocking:40000, 915.3087222 seconds
Run Code Online (Sandbox Code Playgroud)
谁能帮助我改进使用情况,或者告诉我是否有任何库/设置可以使程序使用更多可用资源?
我正在使用Dedupe库将人员记录彼此匹配。我的数据包括姓名,出生日期,地址,电话号码和其他个人身份信息。
这是我的问题:例如,如果两个记录具有匹配的名称和电话号码,我总是希望100%置信度匹配它们。
这是我的一些代码示例:
fields = [
{'field' : 'LAST_NM', 'variable name' : 'last_nm', 'type': 'String'},
{'field' : 'FRST_NM', 'variable name' : 'frst_nm', 'type': 'String'},
{'field' : 'FULL_NM', 'variable name' : 'full_nm', 'type': 'Name'},
{'field' : 'BRTH_DT', 'variable name' : 'brth_dt', 'type': 'String'},
{'field' : 'SEX_CD', 'type': 'Exact'},
{'field' : 'FULL_US_ADDRESS', 'variable name' : 'us_address', 'type': 'Address'},
{'field' : 'APT_NUM', 'type': 'Exact'},
{'field' : 'CITY', 'type': 'ShortString'},
{'field' : 'STATE', 'type': 'ShortString'},
{'field' : 'ZIP_CD', 'type': 'ShortString'},
{'field' : 'HOME_PHONE', 'variable …
Run Code Online (Sandbox Code Playgroud)