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_每篇文檔的主題分布