話不多說,直接上代碼!
import jieba,wordcloud,imageio #導入jieba中文分詞庫、詞雲生成庫、導入圖檔接口庫
w=wordcloud.WordCloud(font_path='msyh.ttc',width=1000,height=700,background_color='lightpink',max_words=200,mask=imageio.imread('map1.png')) #配置詞雲對象的基本參數 #導入背景圖檔
w.generate(' '.join(jieba.lcut(open("陪你朝朝暮暮.txt","r",encoding="ANSI").read())))#向wordcloud的w對象中導入文本
w.to_file('ciyun.png')#儲存生成的詞雲圖檔
就是這樣短短4行代碼,快準狠!
再來看看效果:

那麼,為什麼短短4行python代碼就能制作出這樣的效果?
背景介紹
1.詞雲
詞雲圖即文字雲,是對文本資料中的高頻關鍵詞進行可視化的操作,生成一張類似雲朵的文字圖形,從中會過濾掉大量的文本資訊,以文字大小展現文本出現的頻率,給使用者耳目一新之感。
通俗地說就是講文章中的高頻詞彙統計出來,再制作成一張可視化的圖檔。
2.準備工作
這裡筆者首先向朋友要來了一本名叫《陪你朝朝暮暮》的小說,當然,這裡最好是準備.txt格式的文檔,其次在網上收集了一張世界地圖(這裡使用的是.png格式的圖檔)。
當然,這裡的文本檔案及圖檔檔案均可以使用網絡爬取的方式擷取,為了突出标題的作用,筆者自然是使用本地檔案了hia ~ hia ~ hia~
3.設計思路
- 導入生态庫
- 擷取本地圖檔及檔案
- 配置詞雲對象
- 儲存詞雲圖檔
代碼解析
1.導庫
import jieba
import wordcloud
import imageio
import jieba
#導入jieba中文分詞庫,
jieba
庫是一個十分優秀的中文詞彙分詞工具,其會根據中文使用習慣将長文本切分成一個個我們熟知的詞語。由于
wordcloud
庫預設不能進行中文詞彙,是以jieba專為中文分詞而生。
jieba.lcut()
方法用來切分文本,預設采用精确比對模式(模糊模式對本案例不适用,不多贅述)
import wordcloud
#導入詞雲生成庫,
wordcloud
庫能夠将文本資訊以圖檔形式展現,本案例将wordcloud的WordCloud對象用于儲存文本資訊并加以配置其屬性,詳細配置過程見下文分解。
import imageio
#導入圖檔接口庫,
imageio
庫提供了很多
圖檔接口
,可用于讀取網絡圖檔資訊,視訊以及GIF檔案。筆者常用
imageio
庫來制作GIF圖檔(當然更多的是制作表情包!)
本案例使用imread導入事先準備好的
世界地圖
(此圖檔筆者建議白色背景),
mask=imageio.imread('map1.png')
#導入背景圖檔。如果圖檔和文本檔案存儲位置不在目前檔案路徑下,需要給定檔案路徑。
2.配置詞雲
mask=imageio.imread('map1.png')
将導入的世界地圖作為詞雲的背景圖檔,導入到詞雲對象中。
max_words=200
設定詞雲中最大文字的大小,也可以使用
min_words
來設定最小文字。
background_color='lightpink'
設定詞雲背景顔色
width=1000,height=700
設定詞雲圖檔的大小
font_path='msyh.ttc'
設定詞雲中文字的字型樣式,這裡采用的是微軟雅黑。
3.導入文本
open().read()
打開并讀取檔案,需要在open()中指定檔案位置及編碼模式,常用編碼模式為
utf-8
,在Windows中,檔案默然會儲存為
ANSI
編碼。
打開之後還應該使用.close()将檔案關閉,否則檔案将保持打開狀态。
打開之後文本資訊會被儲存為清單,此時使用
jieba.lcut()
将文本進行分詞,分詞之後是連續的,用
' '.join()
可以在分詞之間加上空格,最後全部通過。
generate()
導入到WordCloud對象中。
4.儲存圖檔
w.to_file('ciyun.png')
#儲存生成的詞雲圖檔,此時就能看到一張名為ciyun.png的圖檔了。