gpt4 book ai didi

python - 如何在 python 中对运行 fuzzywuzzy 字符串匹配逻辑的 2m 行进行多重处理?当前的代码非常慢

转载 作者:行者123 更新时间:2023-11-30 22:44:15 25 4
gpt4 key购买 nike

我是 python 新手,正在对 包含 200 万 条记录的列表运行 fuzzywuzzy 字符串匹配逻辑。 代码正在运行并且它也给出了输出。问题是它非常慢。 3 小时内仅处理 80 行。我想通过使其一次处理多行来加快速度。

如果有帮助的话 - 我正在我的具有 16Gb RAM 和 1.9 GHz 双核 CPU 的机器上运行它。

下面是我正在运行的代码。

d = []
n = len(Africa_Company) #original list with 2m string records
for i in range(1,n):
choices = Africa_Company[i+1:n]
word = Africa_Company[i]
try:
output= process.extractOne(str(word), str(choices), score_cutoff=85)
except Exception:
print (word) #to identify which string is throwing an exception
print (i) #to know how many rows are processed, can do without this also
if output:
d.append({'Company':Africa_Company[i],
'NewCompany':output[0],
'Score':output[1],
'Region':'Africa'})
else:
d.append({'Company':Africa_Company[i],
'NewCompany':None,
'Score':None,
'Region':'Africa'})


Africa_Corrected = pd.DataFrame(d) #output data in a pandas dataframe

提前致谢!

最佳答案

这是一个 CPU 限制问题。通过并行,您最多可以将其速度提高两倍(因为您有两个核心)。你真正应该做的是加快单线程性能。编辑距离相当慢,因此有很多机会加快速度。

  1. 使用修剪。如果无法给出良好的结果,请不要尝试在两个字符串之间运行完整的 fuzzywuzzy 匹配。尝试找到一种简单的线性算法来在 fuzzywuzzy 匹配之前过滤掉不相关的选择。
  2. 考虑建立索引。有什么方法可以索引您的列表吗?例如:如果您的匹配基于整个单词,请创建一个将单词映射到字符串的 HashMap 。仅尝试匹配与当前字符串至少有一个共同词的选项。
  3. 预处理。是否对每场比赛中的字符串进行了一些可以预处理的工作?例如,如果您的 Levenshtein 实现首先从字符串中创建集合,请考虑首先创建所有集合,这样您就不必在每场比赛中一遍又一遍地执行相同的工作。
  4. 有更好的算法可以使用吗?也许编辑距离并不是最好的算法。
  5. 您使用的 Levenshtein 距离的实现是否最佳?这又回到步骤 3(预处理)。您还可以采取其他措施来加快运行速度吗?

多处理只会以恒定因子加速(取决于核心数量)。索引可以带您进入较低复杂度的级别!因此,首先关注修剪和索引,然后执行步骤 3-5。只有当您从这些步骤中获得足够的成果时,您才应该考虑多重处理。

关于python - 如何在 python 中对运行 fuzzywuzzy 字符串匹配逻辑的 2m 行进行多重处理?当前的代码非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com