Sklearn 对比文本相似度算法

首先,使用的是 scikit-learn,关于用到的两个关键算法的详情,下面的链接会给出

TF-IDF:

https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html?highlight=tf%20idf#sklearn.feature_extraction.text.TfidfVectorizer

cosine_similarity:

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_similarity.html?highlight=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))

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值