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.
unten Code gibt mir topicDistributionCol. Hier ist jede Zeile für jedes Dokument.
print transformed.select("topicDistributionCol").show(truncate=False)
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]