2013-07-15 12 views
6

Il modulo lda.show_topics dal seguente codice stampa solo la distribuzione delle prime 10 parole per ciascun argomento, come posso stampare la distribuzione completa di tutte le parole nel corpus?Come stampare la distribuzione completa delle parole in un argomento LDA in gensim?

from gensim import corpora, models 

documents = ["Human machine interface for lab abc computer applications", 
"A survey of user opinion of computer system response time", 
"The EPS user interface management system", 
"System and human system engineering testing of EPS", 
"Relation of user perceived response time to error measurement", 
"The generation of random binary unordered trees", 
"The intersection graph of paths in trees", 
"Graph minors IV Widths of trees and well quasi ordering", 
"Graph minors A survey"] 

stoplist = set('for a of the and to in'.split()) 
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] 

lda = models.ldamodel.LdaModel(corpus_tfidf, id2word=dictionary, num_topics=2) 

for i in lda.show_topics(): 
    print i 
+0

Si potrebbe fare la cosa hacky, e cambiare il pacchetto lda in site-packages (o dovunque sia sul computer) per stampare tutti loro, o copiare il codice per esso nel vostro programma, e cambiarlo per stampare tutto invece di 10. – debianplebian

+0

hai appena trovato la risposta, è una specie di nascosto nell'api =). Vedi risposta sotto – alvas

+0

buon lavoro a trovare la tua risposta. – debianplebian

risposta

8

c'è una chiamata variabile topn in show_topics() cui è possibile specificare il numero di top parole N richiesti dalla distribuzione parole su ogni argomento. vedi http://radimrehurek.com/gensim/models/ldamodel.html

Quindi invece del valore predefinito lda.show_topics(). È possibile utilizzare il len(dictionary) per le distribuzioni di parole complete per ogni argomento:

for i in lda.show_topics(topn=len(dictionary)): 
    print i 
3

Ci sono due variabili chiamata num_topics e num_words in show_topics(), per num_topics certo numero di argomenti, tornare num_words parole più significative (10 parole per argomento, per predefinito). vedi http://radimrehurek.com/gensim/models/ldamodel.html#gensim.models.ldamodel.LdaModel.show_topics

Quindi è possibile utilizzare lo len(lda.id2word) per le distribuzioni complete di parole per ciascun argomento e lo lda.num_topics per tutti gli argomenti nel proprio modello lda.

for i in lda.show_topics(formatted=False,num_topics=lda.num_topics,num_words=len(lda.id2word)): 
    print i 
+0

Spiega la tua risposta. SO non esiste solo per rispondere alle domande, ma per aiutare le persone a imparare. Codice Solo le risposte sono considerate di bassa qualità – Machavity

0

Il codice seguente stamperà le parole e la loro probabilità. Ho stampato le prime 10 parole. Puoi cambiare num_words = 10 per stampare più parole per argomento.

for words in lda.show_topics(formatted=False,num_words=10): 
    print(words[0]) 
    print("******************************") 
    for word_prob in words[1]: 
     print("(",dictionary[int(word_prob[0])],",",word_prob[1],")",end = "") 
    print("") 
    print("******************************") 
Problemi correlati