<p>假设您已经训练过gensim lda模型,那么您只需使用以下代码创建一个word cloud</p>
<pre><code># lda is assumed to be the variable holding the LdaModel object
import matplotlib.pyplot as plt
for t in range(lda.num_topics):
plt.figure()
plt.imshow(WordCloud().fit_words(lda.show_topic(t, 200)))
plt.axis("off")
plt.title("Topic #" + str(t))
plt.show()
</code></pre>
<p>我将强调您的代码中的一些错误,以便您可以更好地遵循我上面所写的内容。</p>
<p><code>WordCloud().generate(something)</code>希望<em>一些</em>是原始文本。它将标记它,将其小写并删除停止字,然后计算单词cloud。你需要词的大小来匹配它们在一个主题中的概率(我假设)。</p>
<p><code>lda.print_topics(8, 200)</code>返回主题的文本表示,如<code>prob1*"token1" + prob2*"token2" + ...</code>中所示,您需要<code>lda.show_topic(topic, num_words)</code>以获得具有相应概率的单词作为元组。然后需要<code>WordCloud().fit_words()</code>来生成单词cloud。</p>
<p>下面的代码是具有上述可视化效果的代码。我还想指出,您是从一个单一的文件推断主题,这是非常罕见的,可能不是您想要的。</p>
<pre><code>from nltk.tokenize import RegexpTokenizer
from stop_words import get_stop_words
from gensim import corpora, models
import gensim
import os
from os import path
from time import sleep
import matplotlib.pyplot as plt
import random
from wordcloud import WordCloud, STOPWORDS
tokenizer = RegexpTokenizer(r'\w+')
en_stop = set(get_stop_words('en'))
with open(os.path.join('c:\users\kaila\jobdescription.txt')) as f:
Reader = f.read()
Reader = Reader.replace("will", " ")
Reader = Reader.replace("please", " ")
texts = unicode(Reader, errors='replace')
tdm = []
raw = texts.lower()
tokens = tokenizer.tokenize(raw)
stopped_tokens = [i for i in tokens if not i in en_stop]
tdm.append(stopped_tokens)
dictionary = corpora.Dictionary(tdm)
corpus = [dictionary.doc2bow(i) for i in tdm]
ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics=8, id2word = dictionary)
for t in range(ldamodel.num_topics):
plt.figure()
plt.imshow(WordCloud().fit_words(ldamodel.show_topic(t, 200)))
plt.axis("off")
plt.title("Topic #" + str(t))
plt.show()
</code></pre>
<p>尽管从另一个库中可以看到<a href="http://ldaplusplus.com/topic-inference-visualization/" rel="nofollow">topic visualizations with corresponding code</a>的结果(免责声明:我是该库的作者之一)。</p>