Создать облако слов из значений словаря

Я только что написал сценарий, который извлекает весь устный текст голландского парламента из нескольких тысяч XML-файлов. Для каждого говорящего подсчитывается количество раз, когда говорящий сказал несколько слов.

После этого я рассчитал значение TF * IDF для каждого слова для каждого говорящего в голландском парламенте. Если вы не знакомы с этим, перейдите по этой ссылке: объяснение TF IDF

Итак, теперь у меня есть словарь для каждого выступающего в голландском парламенте, где ключами являются слова, которые он сказал, а значениями являются соответствующие значения TF*IDF:

{u'asielzoekers': 0.0034861170591325486,
 u'belastingverlaging': 0.0018551991553514675,
 u'buma': 0.0020712555982839408,
 u'islam': 0.0029519544163739155,
 u'moslims': 0.0027958002747301355,
 u'ouderen': 0.0022803123245457566,
 u'pechtold': 0.0021525864470786928,
 u'president': 0.003281844532743345,
 u'rutte': 0.0023488684001475584,
 u'samsom': 0.0019304632325980841} 

Прямо сейчас я хочу создать облако слов из этих значений. Я быстро изучил модуль wordcloud, написанный amueller, но, насколько я понимаю, этот модуль работает не со словарем, а с обычным текстом.

Поэтому любая помощь в том, как создать облако слов из значений словаря, будет высоко оценена.

Заранее спасибо!


person Niels Gorsel    schedule 31.03.2017    source источник
comment
После github.com/amueller/word_cloud/issues/207 вы сможете сделать WordCloud().generate_from_frequencies(MyData) где MyData — это словарь.   -  person fredtantini    schedule 31.03.2017
comment
@fredtantini - ваше предложение сработало для меня. Вы должны опубликовать это как ответ и получить некоторые из этих сладких сладких очков кармы :).   -  person Plasty Grove    schedule 14.04.2018


Ответы (3)


import matplotlib.pyplot as plt
from wordcloud import WordCloud

word_could_dict = {'Git':100, 'GitHub':100, 'push':50, 'pull':10, 'commit':80, 'add':30, 'diff':10, 
                  'mv':5, 'log':8, 'branch':30, 'checkout':25}

wordcloud = WordCloud(width = 1000, height = 500).generate_from_frequencies(word_could_dict)

plt.figure(figsize=(15,8))
plt.imshow(wordcloud)

И получаем: введите здесь описание изображения

person George Pipis    schedule 25.02.2021

Создание Wordcloud со словарями

02.05.21 | 5 февраля 2021 г. |

Создание визуализированного изображения облака слов из словарных значений пары имя-значение с помощью следующего метода модуля WordCloud: generate(), generate_from_text() и generate_from_frequencies() не будет работать после того, как я столько раз пытался выяснить, как решить эту проблему.

Проверив переполнение стека, есть ли способ обойти это, я попытался воспроизвести решение из приведенных выше ответов в своей программе. Это не решило мою проблему, которая была TypeError исключением из создания и отображения изображения wordcloud.

После проверки документации WordCloud API на официальном сайте модуля, Я узнал, что вам нужно вручную использовать что-то, называемое multidict. Это модуль Python, который действует как словарь, использующий...

[a] набор пар ключ-значение, где ключ может встречаться в контейнере более одного раза

цитата с главной вводной страницы Multidict по PyPi

Взято со страницы Галерея примеров WordCloud и представляет собой фрагмент использования модуля multidict для создания частотного словаря значений, визуализируемых на экране wordcloud. :

import multidict as multidict
...

def getFrequencyDictForText(sentence):
    
    # instantiate multidict object
    fullTermsDict = multidict.MultiDict()
    tmpDict = {}

    # making dict for counting frequencies
    for text in sentence.split(" "):
        ...
        val = tmpDict.get(text, 0)
        tmpDict[text.lower()] = val + 1
    
    for key in tmpDict:
        fullTermsDict.add(key, tmpDict[key])
    
    return fullTermsDict


def makeImage(text):
    alice_mask = np.array(Image.open("alice_mask.png"))
    
    # instantiate and define wordcloud properties 
    wc = WordCloud(background_color="white", max_words=1000, mask=alice_mask)
    
    # generate wordcloud
    wc.generate_from_frequencies(text)

    # display and show "wc"
    plt.imshow(wc, interpolation="bilinear")
    plt.show()

...
...

Примечание. Это не полный источник. Чтобы увидеть весь код, посетите веб-сайт Amueller WordCloud.

person A.Addison    schedule 05.02.2021

person    schedule
comment
Кажется, wordcloud недоступен для python ›= 3.7 - person Aashish Chaubey; 18.07.2021