python:用wordcloud生成一个文本的词云

今天学习了wordcloud库,对《三国演义》生成了词云图片,非常漂亮。就想多尝试几个,结果发现一系列问题。
最常出现的一个错误就是"UnicodeDecodeError : ...", 冒号后面的info不一而足。看意思也能猜出是"encoding"解码方式不对,于是各种编码尝试,有的默认或者"ANSI"就可以解码,有的必须用"UTF-8", 一狠心用了”errors='ignore', 结果顺利运行了,词云图片却是一堆乱码。
注:如果图片各种方框,应该是字体没加对了(ttf文件系统里搜一下):font_path = "msyh.ttf"
想着应该有个办法能获取到文本的编码方式啊,一搜果然如此, 链接:https://blog.csdn.net/qq_32618817/article/details/81363235. 

 1 #wordcloud_V2.py
 2 import jieba
 3 import wordcloud
 4 import chardet    
 5 #from scipy.misc import imread                  #用于生成图片形状的词云(安装命令:pip install -U scipy) #新版里用from imageio import imread代替
 6 def get_encoding(file):                         #用命令安装这个包"pip install chardet"
 7     with open(file,'rb') as f:                  #二进制方式读取,获取字节数据,检测类型
 8         encode = chardet.detect(f.read())       #获取文件的编码方式, 获取到的是个字典类型
 9         return encode['encoding']               #编码方式为encoding的键值。 为字符串类型。
10 #mask = imread('pic.png')                       #加载图片
11 #打印文件编码
12 file_type = get_encoding('22.txt')
13 print(file_type)
14 
15 
16 #制作词云
17 test = open('22.txt','r',encoding=file_type,errors='ignore')  #因为是字符串类型,这里可以直接引用。
18 
19 t_read = test.read()
20 t_lcut = jieba.lcut(t_read)
21 
22 test.close()
23 
24 txt = " ".join(t_lcut)
25 #print(type(t_lcut))
26 
27 
28 fo = wordcloud.WordCloud(width=800,height=600,font_path="msyh.ttf",mask = mask)
29 
30 fo.generate(txt)
31 fo.to_file('lala.jpg')

结果如下

 

posted @ 2019-02-28 19:01  奔跑的蜗牛腿儿  阅读(1982)  评论(0编辑  收藏  举报