gpt4 book ai didi

python - python 中搜索字符串和字符串列表之间最高百分比 Levenshtein 距离的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-01 21:46:08 26 4
gpt4 key购买 nike

我正在编写一个程序,将较小的游戏标题列表与许多游戏的主列表进行比较,以查看较小列表中的哪些游戏与主列表中的游戏标题比其他游戏更匹配。为了做到这一点,我一直在检查较小列表中的每个游戏与主列表中的每个游戏之间的 Levenshtein 距离(以百分比形式),并取所有这些值中的最大值(最大百分比越低,游戏必须越独特)同时使用 difflibfuzzywuzzy 模块。我遇到的问题是,使用 process.extractOne()difflib.get_close_matches() 的典型搜索每场比赛大约需要 5 秒以上(38000+主列表中的字符串),我有大约 4500 个游戏要搜索(5 * 4500 大约是 6 小时 15 分钟,我没有时间)。

希望找到一种更好更快的搜索字符串列表的方法,我想问一下在 python 中搜索字符串和字符串列表之间最高百分比 Levenshtein 距离的最快方法是什么。如果没有比使用上述两个函数或编写其他循环代码更好的方法,请说出来。

我在搜索最大距离时具体使用的两个函数是:

metric = process.extractOne(name, master_names)[1] / 100
metric = fuzz.ratio(name, difflib.get_close_matches(name, master_names, 1, 0)[0]) / 100

最佳答案

通过实验和进一步研究,我发现检查 Levenshtein 比率的最快方法是通过 python-Levenshtein 库本身。与使用 fuzzywuzzy 或 difflib 中的任何函数相比,函数 Levenshtein.ratio() 明显更快(对于一个游戏,整个搜索平均只需要 0.05 秒),可能是因为它的简单性和 C 实现。我在 for 循环中使用此函数迭代主列表中的每个名称以获得最佳答案:

from Levenshtein import ratio

metric = 0
for master_name in master_names:
new_metric = ratio(name, master_name)
if (new_metric > metric):
metric = new_metric

总而言之,我要说的是,在字符串和字符串列表之间搜索最大百分比编辑距离的最快方法是遍历字符串列表,使用 Levenshtein.ratio() 来获取每个字符串与第一个字符串的比率,然后在每次迭代中检查最高值比率。

关于python - python 中搜索字符串和字符串列表之间最高百分比 Levenshtein 距离的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60472100/

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