今天學習了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')
結果以下:字體