有什么办法可以更快地运行循环吗?

时间:2019-11-11 08:28:36

标签: python string matching fuzzywuzzy

我正在处理一些字符串匹配问题,并使用Fuzzywuzzy模块获取分数。

我的目标数据大约是67K,参考数据几乎是4M,我创建了循环,一次迭代大约需要花费19分钟。 有什么方法可以使我的循环运行得更快?

%%timeit
df11['NEW'] = ""
for i in range(0, 4):
    df11['NEW'] = process.extractOne(df11['Desc 1'][i], df['Description 2'])

df11.head()

1 个答案:

答案 0 :(得分:0)

假设:

  1. 目标字符串/ choice的字符串都相对较长(例如> 20个字符),并且它们也不尽相同(例如,只有一个或两个字符不同)
  2. 查询与“最佳”目标之间的编辑距离相对较小(例如,<10%的字符已修改)

然后我可能会使用trigrams为字符串建立索引,然后忽略查询中没有足够三连词的目标行

我一直在玩"20 newsgroup dataset",这需要我的笔记本电脑:

  • 使用这些行作为选择/目标,运行fuzzywuzzy.extractOne只需45秒
  • 0.3秒使用三字母组找到最接近的字符串

这是服用后:

  1. 6秒钟从18828封电子邮件中加载477948行文本
  2. 15秒即可将行变成317324个三元组的字典

我的代码很hacky,但我可以整理一下,可能会将所有67k查询字符串的总运行时间缩短到一天左右,如果与multiprocessing并行执行,可能只需几个小时