不太频繁的单词显得更大-Python中的WordCloud

时间:2018-09-02 13:26:56

标签: python pandas matplotlib nlp word-cloud

我一直在使用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'])

enter image description here

现在,我从Wordcloud的官方文档中了解到,最常见的不停词似乎更大,但是这里出现的than叫声比孟加拉语高。但是当我检查一下鸣叫的频率时:

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

“孟加拉语”在“徒步旅行”左侧的单词“ Part”下方显示为黄色的黄色。 现在我不明白为什么会这样,或者我怎么解决。我也想知道是否有一种方法可以从wordcloud中删除介词,例如在旁边,旁边,里面等。

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

2 个答案:

答案 0 :(得分:0)

您可以发布“数据”变量的示例输出吗?整个文本传递到画布对象时可能会出现。

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

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

答案 1 :(得分:0)

频率保存在 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_)

这不是灵丹妙药,必须针对每个案例进行分析。