我正在写一段python代码来计算两个字符串之间是否有任何模糊匹配。如果有匹配,我必须存储字符串和平均匹配值。要比较的字符串来自一个包含数千个条目的列表,问题是代码执行时间太长。为了加快速度,我在这里查看了其他答案,但没有一个在循环中有来自内部函数的多个返回值。在这里寻找优化的代码...
tokens=['abc','bcd','abe','efg','opq']
valid_list=['acb','abc','abf','bcd','rts','xyz']
for i in tokens:
for j in valid_list:
token,valid_entry,avg_match=get_match(i,j)
if(token!=0):
potential_entry.append(valid_entry)
match_tokens.append(token)
ag_match.append(avg_match)
def get_match(i,j):
avg_value=(fuzz.ratio(token,chk_str)+fuzz.partial_ratio(token,chk_str)+fuzz.token_sort_ratio(token,chk_str)+fuzz.token_set_ratio(token,chk_str))/4
if(int(avg_value)>70):
return token,chk_Str,int(avg_value)
else:
return 0,0,0发布于 2019-11-22 18:38:45
我能看到的主要明显的事情是,如果有任何明显不是有效匹配的,你可以短路模糊检查。
因此,与其在一行中完成所有这些操作,不如单独完成,并在获得其他比率之前检查它们是否低于阈值,优先检查您期望为此提供最清晰答案的比率。
另外,请考虑:
your tokens和valid list以确保不会执行任何重复的检查,而不是将avg_value转换为if语句的整数,这在这里没有真正的区别。
https://stackoverflow.com/questions/58992332
复制相似问题