您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何打印LDA主题模型和每个主题的词云

如何打印LDA主题模型和每个主题的词云

假设您已经训练了gensim lda模型,则可以使用以下代码轻松创建词云

# 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()

我将在您的代码上突出显示一些错误,以便您可以更好地遵循上面的内容

WordCloud().generate(something)希望某些东西是原始文本。它将标记它,将其小写并删除停用词,然后计算词云。您需要单词大小以匹配其在主题中的概率(我认为)。

lda.print_topics(8, 200)返回主题的文本表示形式,如prob1*"token1" + prob2*"token2" + …您所需要的那样,lda.show_topic(topic, num_words)以具有相应概率的单词作为元组。然后,您需要WordCloud().fit_words()生成词云

以下代码是具有上述可视化效果代码。我还要指出的是,您是从单个文档中推断主题的,这很不常见,可能不是您想要的。

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()

尽管从不同的库中可以看到主题可视化以及带有相应代码的结果(免责声明:我是该库的作者)。

其他 2022/1/1 18:44:10 有551人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶