完美解决Python词云库wordcloud不显示中文问题

发布时间 2023-09-08 22:11:11作者: Oten

你的Python词云库wordcloud显示的都是方框吗?别担心,我有一个妙招让你的中文词云变得美观又清晰!

背景:

  • wordcloud是一个基于python的词云生成库,它可以让你用简单的代码创建出各种形状和颜色的词云图像
  • wordcloudgithub地址:https://github.com/amueller/word_cloud
  • wordcloud\(\color{#FF3030}{默认是不支持显示中文的,中文会被显示成方框}\)

首先

安装wordcloud

pip install wordcloud

当做好数据预处理操作画词云图时

wc = WordCloud(collocations=False, width=1400, height=1400, margin=2).generate(text.lower())

当数据中有中文数据画图会出现以下情况:

这是因为使用的字体不能支持中文

解决方案

解决方法是使用一个能够支持中文的字体。wordcloud有个专门设置字体的参数:font_path : string #字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'
我们把font_path属性加上,再用纯中文的数据集测试。下面的代码是在Windows下安装的jupyterbook测试。

# 源数据太长只截取了一小段
st = 'Silent Angel期待您的光临,共赏美好的声音!Silent Angel期待您的光临,共赏美好的声音!这只HD650在1k的失真左声道是右声道的6倍左右,也超出官方规格参数范围(0.05%),看来是坏了达音科 17周年 倒是数据最好看,而且便宜bose,beats,apple的消費者根本不知道有曲線的存在不错的数据我觉得任何人都可以明确分别高端耳机之间的区别,不用出声都可以,毕竟佩戴感不一样,这还没法做到盲听听出区别是一方面,听出高低的层次要求就更高了。有没有人能从10条电源线里,听出最贵的是哪条?二级银耳朵,对号入座下一般来说所谓“发烧友”起步应该是铜耳朵这个级别,达不到的话就别在HIFI上浪费钱了,入门级产品玩玩就可以了。我觉得器材到一定级别,搭配好了,达到听出来线材区别是一件非常容易的事情。不知老大是哪个级别的自我定位一下,算个铜耳朵吧不是还要能分辩水电,火电和核电的吗。 能分辨这个的是什么耳朵看了下最多到一级银耳朵顶天了。但 mp3 和无损不一定能听出来。银耳飘过。。。'
st = jb.lcut(st)
st  =  '/'.join(st)
wordcloud = WordCloud(collocations=False,font_path='msyh.ttc', width=1400, height=1400, margin=2).generate(st)
# 显示图片 
plt.imshow(wordcloud) 
plt.axis('off')
plt.show()

使用其他中文字体

github有个Adobe开源的支持中文的字体库: https://github.com/adobe-fonts
如果想显示其他中文字体,可以去字体库中下载,font_path 属性后填为本地保存地址绝对路径即可,代码例如下:

font = r'C:\Windows\Fonts\simfang.ttf'
wc = WordCloud(collocations=False, font_path=font, width=1400, height=1400, margin=2).generate(text.lower())