【发布时间】:2018-07-15 20:29:02
【问题描述】:
我有两个非常长的 O(100k) 单词列表,我需要找到所有相似的词对。我的解决方案的时间复杂度为 O(n*m)。这是一种优化该算法的方法 - 降低其复杂性吗?
def are_similar(first, second):
threshold = 0.88
return difflib.SequenceMatcher(a=first.lower(), b=second.lower()).ratio() > threshold
list_1 = ["123456","23456", ...] # len(list_1) ~ 100k
list_2 =["123123","asda2131", ...] # len(list_2)~ 500k
similar = []
for element_list1 in list_1:
for element_list2 in list_2:
if are_similar(element_list1,element_list2 ):
similar.append((element_list1,element_list2 ))
print (similar)
并行化上述代码的最佳方法是什么?我当前的实现(不包括在内)在第一个循环上使用 multiprocessing.Pool。
【问题讨论】:
-
只是好奇,
are_similar是对称的吗?那是are_similar(x, y) == are_similar (y, x)? -
@Elmex80s 是的,它是对称的。
-
不是一个解决方案,而是一个 nit,您实际上并没有使用这种方法计算两个列表的语义相似度。这绝不会捕获两段文本的含义以及它们是否相似。
-
@NickChapman 你是对的。我编辑了主题名称。