如何使用pyspark(2.1.0)LdA获取与每个文档相关的主题?

Hir*_*tel 7 data-mining data-processing lda topic-modeling pyspark

我正在使用pyspark的LDAModel从语料库中获取主题.我的目标是找到与每个文档相关的主题.为此,我尝试根据Docs 设置topicDistributionCol.由于我是新手,我不确定本专栏的目的是什么.

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)
Run Code Online (Sandbox Code Playgroud)

它列出了termIndices和termWeights的所有主题.

在此输入图像描述

下面的代码会给我topicDistributionCol.这里每行都是针对每个文档的.

print transformed.select("topicDistributionCol").show(truncate=False)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想得到像这样的文档主题矩阵.有没有可能与pysparks LDA模型?

doc | topic 
1   |  [2,4]
2   |  [3,4,6]
Run Code Online (Sandbox Code Playgroud)

注意:我之前使用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]
Run Code Online (Sandbox Code Playgroud)

kev*_*vin 0

我认为这个问题有一个简单的答案。请执行下列操作:

transformed.take(10)
Run Code Online (Sandbox Code Playgroud)

输出的最后一列是“topicDistribution”,它是文档主题分布。