相似文本topN你计算 python

#!/usr/bin/Python
# -*- coding: utf-8 -*-
'''
1.读取文档
2.对要计算的多篇文档进行分词
3.对文档进行整理成指定格式,方便后续进行计算
4.计算出词语的词频
5.【可选】对词频低的词语进行过滤
6.建立语料库词典
7.加载要对比的文档
8.将要对比的文档通过doc2bow转化为词袋模型
9.对词袋模型进行进一步处理,得到新语料库
10.将新语料库通过tfidfmodel进行处理,得到tfidf
12.通过token2id得到特征数 
13、稀疏矩阵相似度,从而建立索引,排序 
14、获得topN的结果

'''
# jieba 用于分词
import jieba
# corpora 建立语料库  models 计算tfidf  similarties 计算相似性
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)

print(all_doc)

all_doc_list = []
for doc in all_doc:
    doc_list = [word for word in jieba.cut(doc)]
    print(doc_list)
    all_doc_list.append(doc_list)

doc_test_list = [word for word in jieba.cut(doc_test)]
print("========================")
print(doc_test_list)
dictionary = corpora.Dictionary(all_doc_list)
print("=====================")
print(dictionary)
print(dictionary.keys())
print("================")
print(dictionary.token2id)
print("=================")
# doc2bow制作语料库
corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
print("====================")
print(corpus)

tfidf = models.TfidfModel(corpus)

doc_test_vec = dictionary.doc2bow(doc_test_list)
print("======================")
print(tfidf[doc_test_vec])

index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))
sim = index[tfidf[doc_test_vec]]
print(sim)

print(sorted(enumerate(sim), key=lambda item: -item[1]))

猜你喜欢

转载自blog.csdn.net/u011243684/article/details/84620605