2017-01-31 30 views
4

我使用pyspark的LDAModel從語料庫中獲取主題。我的目標是找到與每個文檔相關的主題。爲此,我嘗試根據Docs設置topicDistributionCol。由於我是新手,我不確定本專欄的目的是什麼。如何使用pyspark(2.1.0)LdA獲取與每個文檔相關的主題?

from pyspark.ml.clustering import LDA 
lda_model = LDA(k=10, optimizer="em").setTopicDistributionCol("topicDistributionCol") 
// documents is valid dataset for this lda model 
lda_model = lda_model.fit(documents) 
transformed = lda_model.transform(documents) 

topics = lda_model.describeTopics(maxTermsPerTopic=num_words_per_topic) 
print("The topics described by their top-weighted terms:") 
print topics.show(truncate=False) 

它列出了termIndices和termWeights的所有主題。

enter image description here

下面的代碼會給我topicDistributionCol。這裏每行都是針對每個文檔。

print transformed.select("topicDistributionCol").show(truncate=False) 

enter image description here

我想要得到的文件主題矩陣這樣。 pysparks LDA模型有可能嗎?

doc | topic 
1 | [2,4] 
2 | [3,4,6] 

注意:我已經使用前面的代碼使用gensims LDA模型。但我需要使用pysparks LDA模型。

texts = [[word for word in document.lower().split() if word not in stoplist] for document in documents] 
dictionary = corpora.Dictionary(texts) 

corpus = [dictionary.doc2bow(text) for text in texts] 
doc_topics = LdaModel(corpus=corpus, id2word=dictionary, num_topics=10, passes=10) 
## to fetch topics for one document 
vec_bow = dictionary.doc2bow(text[0]) 
Topics = doc_topics[vec_bow] 
Topic_list = [x[0] for x in Topics] 
## topic list is [1,5] 

回答

0

我認爲這個問題有一個簡單的答案。請執行以下操作:

transformed.take(10) 

輸出的最後一列將是「topicDistribution」,它是文檔主題分佈。

相關問題