出现频率较低的词变大了 - Python 中的 WordCloud

Less Frequent Words appearing bigger - WordCloud in Python

我一直在使用 Python 中的 wordcloud 包绘制 wordcloud。这是代码示例:

from wordcloud import WordCloud, STOPWORDS
import matplotlib
import matplotlib.pyplot as plt
stopwords = set(STOPWORDS)

def show_wordcloud(data, title = None):
    wordcloud = WordCloud(
        background_color='black',
        stopwords=stopwords,
        max_words=200,
        max_font_size=40, 
        scale=3,
        random_state=1 # chosen at random by flipping a coin; it was heads
).generate(str(data))

    fig = plt.figure(1, figsize=(15, 15))
    plt.axis('off')
    if title: 
        fig.suptitle(title, fontsize=20)
        fig.subplots_adjust(top=2.3)
    matplotlib.rcParams.update({'font.size': 22})
    plt.title('Most Used Words for Emotion Tag 2 (What is the highlight?)')    
    plt.imshow(wordcloud)
    plt.savefig('2.jpg')
    plt.show()

show_wordcloud(df2['words'])

现在,我从Wordcloud的官方文档中了解到,最频繁出现的不间断词看起来更大,但这里出现了比Bengal更好的鸣叫声。但是当我检查鸣叫频率时:

In [20]: df2[df2['words'].str.contains("Chirping")]
Out[20]:    words             tagid
           Chirping of birds    2
           Chirping of birds    2

现在,当我检查孟加拉语的频率时:

In [21]: df2[df2['words'].str.contains("Bengal")]
Out[21]:     words                 tagid
        The mighty Bay Of Bengal    2
        Royal Bengal Tigers       2
        #NammaBengaluru             2
        Traditional Bengali Meal    2
        Royal Bengal Tiger          2
        Enterning Taj Bengal.       2

"Bengal" 在 "Trekking" 左边的 "Part" 字下方,"yellow" 颜色看起来很小。 现在我不明白为什么会这样,或者我该如何解决。我还想知道有没有办法从 wordcloud 中删除介词,例如 at、beside、inside 等

有没有一种方法可以分配权重或频率,然后绘制 wordcloud

你能post 'data' 变量的示例输出吗?整个文本在传递给 canvas 对象时可能是可能的。

您可以根据文本中单词的频率分配权重,使用 getFrequencyDictForText() API 获取文本的频率并使用 makeImage() 生成 canvas.

请参阅此处的 API 文档:https://amueller.github.io/word_cloud/auto_examples/frequency.html#sphx-glr-auto-examples-frequency-py

频率保存在 word_ 属性 类型的 WordCloud 中。它保存在如下字典类型中:

{
 'word1': 1.00,
 'word2': 0.980093876357,
 'word3': 0.978478648733,
 ...
}

所以,玩吧。下面的函数反转值,使频率最低的成为最高的。

def invert_wc(wc):
    keys = list(wc.words_.keys())
    values = list(wc.words_.values())
    values.reverse()
    wc.words_ = dict(zip(keys, values))
    return wc

然后,只需生成它:

wc.generate_from_frequencies(wc.words_)

这不是灵丹妙药,必须针对每种情况进行分析。