优化这段代码def compare(text1, text2): similarities = [] text1 = ("text_new:\n", text_new) text2 = ("text_old:\n", text_old) for i in range(len(text1)): for j in range(len(text2)): tf_idf_vectorizer = TfidfVectorizer() tf_idf_vectors = tf_idf_vectorizer.fit_transform([text1[i], text2[j]]) cosine_similarities = cosine_similarity(tf_idf_vectors) similarities.append(cosine_similarities[0, 1]) print (similarities)实现text1逐次与text2中的字符串逐一比较
时间: 2024-02-19 15:58:28 浏览: 60
可以考虑以下优化:
1. 将重复计算的部分提出来,只在循环外计算一次。比如,可以在循环外先实例化`TfidfVectorizer()`,然后在循环内只调用`fit_transform()`和`cosine_similarity()`。
2. 简化循环。可以使用`itertools.product()`函数来生成text1和text2的所有组合,避免使用嵌套循环。
3. 使用列表推导式代替显式循环。这样可以更简洁地实现循环逻辑。
优化后的代码如下:
```
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import itertools
def compare(text1, text2):
tf_idf_vectorizer = TfidfVectorizer()
tf_idf_vectors = tf_idf_vectorizer.fit_transform([text1, text2])
similarities = [cosine_similarity(tf_idf_vectors[i], tf_idf_vectors[j])[0, 1]
for i, j in itertools.product(range(len(text1)), range(len(text2)))]
print(similarities)
```
这样代码更简洁,也更高效。
阅读全文