首先,使用的是 scikit-learn,关于用到的两个关键算法的详情,下面的链接会给出
TF-IDF:
cosine_similarity:
可以看到,首先我们准备了两组数据用来对比,可以对比出text_0每一个文本与text_1每一个文本的相似度。
cosine_similarity 的传入参数中,传入参数的先后会影响返回值,代码中可以看到 text_0长度为4,text_1 长度为6,第一种传入方式 text_0在前的话,返回的shape就是(3,6),反之就是(6,3)了。注意这一点的目的是为了理解返回的相似矩阵中,相似度代表的意义。例如第一个相识矩阵,第一行里面对应的相似度 是text_0里面的第一个数据 对于 text_1里面每一个数据的相似度。约靠近1代表相似度越高
这里也用了np.amax来判定有没有没有匹配到的文本,可以看到,text_0的第4个,text_1 第3,5,6个没有匹配到。 需要注意的是 axis为0 是纵向比对,为1的话才是横向对比。
https://numpy.org/doc/stable/reference/generated/numpy.amax.html?highlight=max
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
vectorizer = TfidfVectorizer()
text_0=['this is no for it','when u come to me','for now, we cant do this','sdfsdfetewer' ]
text_1=['this is no for it.','when u come to me','for now, u can do this','for now, we cant do this','nope, u will fix that','there got some problem']
vectorizer.fit(text_0+text_1)
tfidf_0=vectorizer.transform(text_0)
tfidf_1=vectorizer.transform(text_1)
similarity_matrix = cosine_similarity(tfidf_0,tfidf_1)
print(similarity_matrix)
print((np.amax(similarity_matrix, axis=0)>0.9))
print((np.amax(similarity_matrix, axis=1)>0.9))
print()
similarity_matrix = cosine_similarity(tfidf_1,tfidf_0)
print(similarity_matrix)
print((np.amax(similarity_matrix, axis=0)>0.9))
print((np.amax(similarity_matrix, axis=1)>0.9))