2017-01-31 2 views
4

Ich benutze LDAModel von pyspark, um Themen aus dem Korpus zu bekommen. Mein Ziel ist es, Themen zu jedem Dokument zu finden. Zu diesem Zweck habe ich versucht, topicDistributionCol nach Docs setzen. Da ich neu bin, bin ich mir nicht sicher, was diese Kolumne eigentlich bedeutet.Wie man Thema mit jedem Dokument mit pyspark (2.1.0) LdA verbunden?

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) 

Es listet alle Themen mit TermIndices und TermWeights auf.

enter image description here

unten Code gibt mir topicDistributionCol. Hier ist jede Zeile für jedes Dokument.

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

enter image description here

Ich möchte wie dieses Dokument Thema Matrix erhalten. Ist es mit Pysparks LDA-Modell möglich?

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

Hinweis: Ich habe dies mit dem Gensims LDA-Modell früher mit dem folgenden Code getan. Aber ich muss Pysparks LDA-Modell verwenden.

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] 

Antwort

0

Ich denke, es gibt eine einfache Antwort für diese Frage. Gehen Sie wie folgt vor:

transformed.take(10) 

Die letzte Spalte der Ausgabe wird „topicDistribution“, die dokumenten Thema Distribution.

Verwandte Themen