今天学习了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')
结果如下: