from gensim import corpora, models
corpus只截取了一部分
lsi = models.LsiModel(corpus_tfidf, num_topics=2, id2word=dic) 将文本的tfidf向量输入生成Lsi模型,num_topics为生成主题个数,也为Lsi进行SVD分解时,生成矩阵列向量数;id2word是语料字典
topic_result = [a for a in lsi[corpus_tfidf]] 此处给lsi的索引为tfidf向量,而不是corpus向量!!
pprint(lsi.print_topics(num_topics=2, num_words=5))
lsi生成了2个主题,这里的系数为权重而不是概率值
similarity = similarities.MatrixSimilarity(lsi[corpus_tiidf]) 根据lsi计算文档间的相似性
pprint(list(similarity)) 通过list函数将一个迭代器生成列表
lda = models.LdaModel(corpus_tfidf, num_topics=2, id2word=dictionary,alpha='auto', eta='auto', minimum_probability=0.001) alpha,eta即为LDA公式中的α和β,minimum_probability表示主题小于某个值(比如0.001)就舍弃此主题。
显示文档主题有两种方法:
doc_topic = [a for a in lda[corpus_tfidf]] ##法1
pprint(doc_topic)for doc_topic in lda.get_document_topics(corpus_tiidf): ##法2
print doc_topic
结果大致相同
for topic_id in range(2):
print 'Topic', topic_id
pprint(lda.get_topic_terms(topicid=topic_id)) lda生成的主题中的词分布,默认显示10个
pprint(lda.show_topic(topicid=topic_id))
lda.get_document_topics(corpus_tfidf) 可以获得每个文档的主题分布
similarity = similarities.MatrixSimilarity(lda[corpus_tiidf]) 通过LDA也能生成相似矩阵
pprint(list(similarity))
也可以安装lda包,import lda
model = lda.LDA(n_topics=, n_iter=,)n_topics生成主题个数,n_iter迭代次数
model.fit(X)
model.topic_word_ 生成每个主题以及主题中词分布
model.doc_topic_每篇文档的主题分布