注:本文参考链接
总结文本相似度分析的步骤:
1、读取文档
2、对要计算的多篇文档进行分词
3、对文档进行整理成指定格式,方便后续进行计算
4、计算出词语的词频
5、【可选】对词频低的词语进行过滤
6、建立语料库词典
7、加载要对比的文档
8、将要对比的文档通过doc2bow转化为词袋模型
9、对词袋模型进行进一步处理,得到新语料库
10、将新语料库通过tfidfmodel进行处理,得到tfidf
11、通过token2id得到特征数
12、稀疏矩阵相似度,从而建立索引
13、得到最终相似度结果
import jieba
from gensim import corpora,models,similarities
#目标文档
doc0 = "我不喜欢上海"
doc1 = "上海是一个好地方"
doc2 = "北京是一个好地方"
doc3 = "上海好吃的在哪里"
doc4 = "上海好玩的在哪里"
doc5 = "上海是好地方"
doc6 = "上海路和上海人"
doc7 = "喜欢小吃"
#测试文档
doc_test="我喜欢上海的小吃"
#将目标文档放入列表
all_doc = []
all_doc.append(doc0)
all_doc.append(doc1)
all_doc.append(doc2)
all_doc.append(doc3)
all_doc.append(doc4)
all_doc.append(doc5)
all_doc.append(doc6)
all_doc.append(doc7)
#用一个列表存放分好的列表词汇
all_doc_list = []
for doc in all_doc:
doc_list = [word for word in jieba.cut(doc)]
all_doc_list.append(doc_list)
#输出列表词汇
print(all_doc_list)
#对测试文档分词
doc_test_list = [word for word in jieba.cut(doc_test)]
#用Dictionary方法获取词袋
dictionary = corpora.Dictionary(all_doc_list)
#词袋中用数字对所有词进行了编号
dictionary.keys()
#输出编号与词的对应关系
print(dictionary.token2id)
#使用doc2bow制作词料库(一组向量,二维的(编号,频率))
corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
doc_test_vec = dictionary.doc2bow(doc_test_list)
#使用tfidf对词料库建模
tfidf = models.TfidfModel(corpus)
#获取测试文档每个词的TFIDF值
print(tfidf[doc_test_vec])
#对每个目标文档,分析测试文档的相似度
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))
sim = index[tfidf[doc_test_vec]]
#输出相似度
print(sim)