我有一个N字符串列表。我的任务是找到足够相似的所有字符串对。也就是说,我需要(i)一个相似性度量,它会产生一个预定义范围(比如介于0和1之间)的数字,用于衡量两个字符串的相似程度,以及(ii)通过O(N ^ 2)的方式快速配对以找到高于某种阈值的那些(例如,如果度量为更多类似的字符串提供更大的数字,则> = 0.9)。我现在正在做的事情很慢(正如人们所预料的那样)对于一个大的N:
import difflib
num_strings = len(my_strings)
for i in range(num_strings):
s_i = my_strings[i]
for j in range(i+1,num_strings):
s_j = my_strings[j]
sim = difflib.SequenceMatcher(a=s_i, b=s_j).ratio()
if sim >= thresh:
print("%s\t%s\t%f" % (s_i,s_j,sim))
问题:
谢谢
答案 0 :(得分:1)
如果你想要最优解你必须是O(n ^ 2),如果你想要最优解的近似,你可以选择一个阈值并删除具有公平相似比的对。 我建议您使用其他指标,因为您需要使用difflib比率添加复杂性(这取决于字符串的长度)。这些比率可以是熵或曼哈顿/欧几里德距离。