【发布时间】:2019-09-26 04:36:15
【问题描述】:
我正在检查 4 个相同的数据框列中是否有相似的结果(模糊匹配),我有以下代码作为示例。当我将它应用到真正的 40.000 行 x 4 列数据集时,它会一直在 eternum 中运行。问题是代码太慢了。例如,如果我将数据集限制为 10 个用户,计算需要 8 分钟,而计算需要 20、19 分钟。有什么我想念的吗?我不知道为什么要花那么长时间。我希望在 2 小时或更短的时间内获得所有结果。任何提示或帮助将不胜感激。
from fuzzywuzzy import process
dataframecolumn = ["apple","tb"]
compare = ["adfad","apple","asple","tab"]
Ratios = [process.extract(x,compare) for x in dataframecolumn]
result = list()
for ratio in Ratios:
for match in ratio:
if match[1] != 100:
result.append(match)
break
print (result)
输出: [('asple', 80), ('tab', 80)]
【问题讨论】:
-
尝试自己实现 Levenshtein Distance 并查看执行时间之间的差异。也许您正在使用的库在时间效率方面存在问题
-
@CristianIacob 我正在使用fuzzywuzzy
-
我过去已经解决了这个问题,但在这里需要更多信息。您是否正在使用比率或部分比率或两者来寻找字符串相似性?您是否使用提取功能只是为了加快处理速度?
-
@Atendra 使用比率(不是部分),我使用提取函数来加快速度,是的。只要我能达到预期的结果,我对任何新代码都持开放态度。
-
我希望下面的答案能解决你的问题。
标签: python duplicates string-matching fuzzy-search