本文共 1180 字,大约阅读时间需要 3 分钟。
首先我们了解几个概念名词
1.词频
2.逆文档频率
3.TF-IDF算法
4.语料库(corpus)
5.余弦相似性
大家参考下面文章查阅这三个名词的意义
下面,步入正题,先看代码
import jiebafrom gensim import corpora,models,similaritiesdoc1 = '/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的相似度
最后大家可以看一下官网文档
转载地址:http://pykrn.baihongyu.com/