解决python wordcloud中文乱码, 中文词频问题

前言

python的wordcloud可以很方便的生成词云图, 然而美中不足的是, 该库对中文支持并不是那么友好, 存在以下两个问题

  1. 中文字符会乱码
  2. 中文分词有问题

以下介绍如何解决

解决中文乱码

wordcloud 不支持显示中文, 可以通过如下修改来支持中文:

  1. 进入python根目录, 然后进入Lib\site-packages\wordcloud
  2. 进入C:\Windows\Fonts目录下, 拷贝一个中文字库, 如华文新魏, 将其复制粘贴到Lib\site-packages\wordcloud目录下

  3. 打开Lib\site-packages\wordcloud目录下wordcloud.py, 找到如下这行代码

    将代码改为对应拷入进来的字库名字, 如华文新魏的字库名字为STXINWEI.TTF
  4. 至此解决中文乱码问题

解决中文分词问题

wordcloudWordCloud类中的generate方法是先对传进去的文字进行分词, 但是对中文的分词效果不太好, 建议先自己计算词频, 存放到字典中, 然后使用generate_from_frequencies来生成词云

{cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from wordcloud import WordCloud
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 SimHei为黑体
mpl.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

text = '清华大学清华大学北京大学北京大学暨南大学'
textDic = {
'清华大学': 2,
'北京大学': 2,
'暨南大学': 1
}
wc1 = WordCloud().generate(text) # generate对中文分词效果不好
wc2 = WordCloud().generate_from_frequencies(textDic) # 自己来计算词频, 改善效果

plt.title('generate生成的词云')
plt.imshow(wc1, interpolation="bilinear")
plt.axis("off")

plt.figure()
plt.title('自己计算词频')
plt.imshow(wc2, interpolation="bilinear")
plt.axis("off")
plt.show()

-------本 文 结 束 感 谢 您 的 阅 读-------
赞赏一杯咖啡
0%