LSA潜在语义分析中SVD的三个矩阵介绍

奇异值分解在LSI中的应用

LSI的学习连接

LSI的详细解释

相似度分析

# -*- coding: UTF-8 -*-
from gensim import corpora, similarities, models
import jieba

# 训练样本
corpora_documents=[]
file=open("all_data.txt","r",encoding="utf8")
for item_text in file:
	words=item_text.strip().split()
	corpora_documents.append(words)
file.close()
# 生成字典和向量语料
dictionary = corpora.Dictionary(corpora_documents)
print(dictionary)
dictionary.save('dict.txt') #保存生成的词典
# dictionary=Dictionary.load('dict.txt')#加载

# 通过下面一句得到语料中每一篇文档对应的稀疏向量(这里是bow向量)
corpus = [dictionary.doc2bow(text) for text in corpora_documents]
# 向量的每一个元素代表了一个word在这篇文档中出现的次数
print(corpus)
# corpora.MmCorpus.serialize('corpuse.mm',corpus)#保存生成的语料
# corpus=corpora.MmCorpus('corpuse.mm')#加载

# corpus是一个返回bow向量的迭代器。下面代码将完成对corpus中出现的每一个特征的IDF值的统计工作
tfidf_model = models.TfidfModel(corpus)
corpus_tfidf = tfidf_model[corpus]

lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=20) # initialize an LSI transformation
corpus_lsi = lsi[corpus_tfidf]
all_topics=lsi.print_topics(num_words=149)
print(len(all_topics))
for topic in all_topics:
	print(len(topic[1].split("+")))
index = similarities.MatrixSimilarity(lsi[corpus])
print(index)

25*148=[25*20]*[20*20]*[20*148]

topics就是20*148可以根据这个找到词的关于主题的权重。

猜你喜欢

转载自blog.csdn.net/baidu_15113429/article/details/80852691