Как создать Wordcloud из модели LDA? - PullRequest
0 голосов
/ 02 апреля 2020

Следуя документации ?gensim.models.ldamodel, я хочу обучить ldamodel и (из этого ТАКого ответа создайте из него облако ошибок). Я использую следующий код из обоих источников:

from gensim.test.utils import common_texts
from gensim.corpora.dictionary import Dictionary
import gensim
import matplotlib.pyplot as plt
from wordcloud import WordCloud

common_dictionary = Dictionary(common_texts) # create corpus
common_corpus = [common_dictionary.doc2bow(text) for text in common_texts]

lda = gensim.models.LdaModel(common_corpus, num_topics=10) # train model on corpus
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()

Однако я получаю AttributeError: 'list' object has no attribute 'items' на линии plt.imshow(...)

Может кто-нибудь помочь мне здесь? (Ответы на подобные вопросы не работают для меня, и я пытаюсь составить минимальный конвейер с этим.)

1 Ответ

1 голос
/ 02 апреля 2020

Из документов метод WordCloud.fit_words() ожидает словарь в качестве ввода.

Ваша ошибка, кажется, подчеркивает, что он ищет атрибут 'items', обычно атрибут словарей , но вместо этого находит объект list.

Итак, проблема в том, что lda.show_topic(t, 200) возвращает список вместо словаря. Используйте dict(), чтобы разыграть его!

Наконец:

plt.imshow(WordCloud().fit_words(dict(lda.show_topic(t, 200))))
...