出现频率较低的词变大了 - 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_)
这不是灵丹妙药,必须针对每种情况进行分析。
我一直在使用 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_)
这不是灵丹妙药,必须针对每种情况进行分析。