词云项目的地址:https://github.com/amueller/word_cloud(里面有很多example可以自己玩一下)
这个wordcloud包可以根据自己的需求自定义词云的形状。词云其实逻辑比较简单,就是做词汇的词频统计,加上可视化。如果自己去实现是一个比较麻烦的事,这个包用着还不错,就是在做中文词云的时候偶尔会有一点点的小问题需要解决一下。下面就是我自己用的过程中遇到的一些问题,以及解决办法。由于词云的使用示例比较多,所以这里主要记录遇到的问题,没有给出简单示例。
1、中文词云显示的问题
词云是基于matplotlib画图的,我们知道,这个Python画图包一直就不支持中文,之所以wordcloud库创建词云时会将中文显示为矩形,是因为使用的字体不能支持中文,解决方法是使用一个能够支持中文的字体。wordcloud有个专门设置字体的参数,我是通过这个解决问题的。解决步骤大概就是:
(1)下载支持中文的字体,我下载的"simhei.ttf"
(2)添加字体的路径:
font = r'C:\Windows\Fonts\simfang.ttf'
wc = WordCloud(collocations=False, font_path=font, width=1400, height=1400, margin=2).generate(text.lower())
上面是我找到的比较有用的解决办法,也看到有其它解决办法可以参考一下:
https://blog.csdn.net/qq_34777600/article/details/77455674
2、词的重复出现
问题是,自己统计的词频很正常,但是在图片里面会出现一个词出现两次显示的情况,这个时候我找到了一个解决办法就是:
与collocations参数有关,默认collocations=True,会统计搭配词。比如你的text是“我在 拜访 客户”,当collocations为True时,就会把“拜访客户”也当作一个词进行统计,所以会出现重复。
wcd=WordCloud(font_path='simsun.ttc', collocations=False,width=900,height=400,background_color='white',max_words=100,scale=1.5).generate(text)
3、不在考虑范围内的词的出现(子词自动统计)
解决了上面两个问题后,还出现了一下让人很头疼的问题,就是没有考虑过的子词,它自动给统计出来了,比如“阿里巴巴有限公司”,“百度有限公司”,“腾讯有限公司”,这三个词,最后词云会显示“有限公司”这个词。后面无意间看到了一个同时解决词重复出现和子词自动统计的办法,那就是,自己先把词统计好,然后用generate_from_frequencies
()的方式生成词云,这样什么问题都解决了。
import collections
word_count = collections.Counter(words_list)
wcd=WordCloud(font_path='simsun.ttc', collocations=False,background_color='white',scale=1.5).generate_from_frequencies(word_count)
在画图的时候可以设置一些属性,比如图云的形状,背景颜色,字体的颜色什么的,可以参考下面的设置: