【发布时间】:2021-05-25 11:14:58
【问题描述】:
我有两个包含文本的大列表。 X = [30,000 个条目] 和 Y = [400 个条目]
我想使用余弦相似度找出两个列表中相似的文本。 下面是我尝试使用嵌套 for 循环执行的代码
vectorizer = CountVectorizer()
found_words = []
for x in X:
for y in Y:
vector1 = vectorizer(x.lower())
vector2 = vectorizer(y.lower())
sim = cosine_similarity(vector1, vector2)
if sim > 0.9:
found_words.append(x.capitalize())
上面的代码运行良好,但需要很长时间才能执行。有没有其他方法可以在时间和空间复杂性上都有效。谢谢
【问题讨论】:
-
我确实看过,但由于我的列表很大,与嵌套的 for 循环相比,它需要相同的时间来执行
-
当你移动:
vector1 = vectorizer(x.lower())到for y in Y:之前会发生什么? -
好的,看来您需要
multiprocessing。无论如何,您应该为每个字符串执行一次s.lower(),因此您可能需要在循环之前使用Y = [y.lower() for y in Y]。
标签: python list for-loop nlp cosine-similarity