python文本相似度分析tf-idf

首先我们了解几个概念名词

1.词频

2.逆文档频率

3.TF-IDF算法

4.语料库(corpus)

5.余弦相似性

大家参考下面文章查阅这三个名词的意义

http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

https://blog.csdn.net/wangxingfan316/article/details/79427260

下面,步入正题,先看代码

import jieba
from gensim import corpora,models,similarities
doc1 = '/Users/23263/Desktop/doc1.txt'
doc2 = '/Users/23263/Desktop/doc2.txt'
doc3 = '/Users/23263/Desktop/doc3.txt'
list1 = jieba.lcut(open(doc1).read())
list2 = jieba.lcut(open(doc2).read())
list3=jieba.lcut(open(doc3).read())
list1_2 = [list1,list2]
#创建词典
dictionary = corpora.Dictionary(list1_2)
#获取语料库
corpus = [dictionary.doc2bow(i) for i in list1_2]
tfidf = models.TfidfModel(corpus)
#特征数
featureNUM = len(dictionary.token2id.keys())
#通过TfIdf对整个语料库进行转换并将其编入索引,以准备相似性查询
index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNUM)
#稀疏向量.dictionary.doc2bow(doc)是把文档doc变成一个稀疏向量,[(0, 1), (1, 1)],表明id为0,1的词汇出现了1次,至于其他词汇,没有出现。
new_vec = dictionary.doc2bow(list3)
#计算向量相似度
sim = index[tfidf[new_vec]]
print(sim)

导入jieba和下面三个库

打开三个文件并分别分词,doc1和doc2写入list1_2,doc3写入list3(没有严格要求,这里的示例是三个文档的)

以list1_2创建词典dictionary

获取语料库corpus

创建一个tidif算法框架为tfdif,即初始化一个转换

计算特征数featureNUM(特征数为语料库所有id的个数)

通过TfIdf对整个语料库进行转换并将其编入索引,以准备相似性查询

待比较的稀疏向量new_vec为list3在list1_2中的体现,即在语料库中的体现,可以理解为是一种自然连接或者映射

计算相似度,得到两个值为,list3与list1和list2的相似度

最后大家可以看一下官网文档https://radimrehurek.com/gensim/tutorial.html

猜你喜欢

转载自blog.csdn.net/qq_41663800/article/details/89812586