媽媽再也不用擔心我寫專欄找不到合適的封面了!B站專欄的封面至少是我一直頭疼的問題,每次寫完文章卻找不到合適的圖片作為封面。
詞云是一個很不錯的選擇,既美觀,又提綱挈領。網上也有詞云生成的工具,但大多收費/只能試用,很多設置也不能調整。于是我最終決定自己動手豐衣足食。
網上有很多關于詞云生成的Python代碼,但大多結構松散,要調一項設置要在代碼里上上下下各個庫里進行修改,不方便使用。于是我想把我們常用的設置封裝到一個函數里,這樣方便我們日常使用。
總的思路是采用Jieba庫對中文文章進行詞語拆分,使用Matplotlib庫進行底層繪圖支持,使用WoldCloud庫對分詞后的文章進行詞頻統計并畫出詞云。
原本的WordCloud庫是針對英語所開發的,在英文里每個單詞都是由空格分開的,所以只需統計一篇文章中單詞的頻率并畫圖即可。中文的詞語則需要通過Jieba庫來進行識別并分詞,并再將文中的詞語之間插入空格,才算完成對數據的準備工作,可以使用WordCloud庫生成詞云。WordCloud庫默認生成的是充滿整個畫圖區域的詞云,效果不夠美觀。
一般的解決方案是選擇一張已有的圖片作為mask遮罩,使WordCloud在圖形區域進行畫圖。在本項目中,預設了常用形狀的遮罩(圓形、橢圓、矩形、多邊形),通過matplotlib.patches模塊,進行遮罩的生成,免去了手動上傳遮罩圖片的麻煩。
代碼采用了函數的方式,對每個功能部分進行了封裝,便于調用,也便于代碼的理解。分成了make_mask生成遮罩圖片;jieba_split使用jieba分詞并插入空格;以及最后的cloud_generate生成WordCloud對象并調用Matplotlib繪圖。
最終只需要調用cloud_generate()函數并填寫相應的參數即可:
cloud_generate()中的參數:
text_addr:需要生成詞云的文本文檔的地址
shape:詞云的形狀
'circle' 或'c':圓形
'ellipse' 或'e':橢圓
'rectangle' 或'r':矩形
'square' 或's':正方形
整數n:正n邊形
colormap:Matplotlib中的colormap數據對象,是顏色的組合部分Colormap預設
dpi:生成圖片分辨率(默認為200)
output_addr:輸出的圖片的地址(默認為當前文件夾下wordcloud_output.png)
stopwords:列表,停止詞(即你不希望出現在圖片里的詞)
例:
cloud_generate(text_addr = '.\\bili.txt', shape = 'e', colormap = 'Set2', dpi = 400, stopwords = ['進行',? '我們'], output_addr = '.\\output.png')
即在當前目錄下打開bili.txt作為要生成詞云的文章,詞云形狀是橢圓,顏色組合是Set2,分辨率是400dpi,停止詞是‘進行’和‘我們’(因為這兩個詞在文中出現的頻率較高,但對文章內容的提示性不大,所以選擇不生成在詞云里),最后輸出的圖片在當前文件夾下,文件名為‘output.png’
最后,上代碼~為了語法高亮,以截圖的形式發上來,源碼評論區自取~注:
1. 本項目依賴Jieba庫、wordcloud庫、matplotlib庫。
2. 與程序文件同一文件夾下要有字體文件:“simhei.ttf”
3. 由于采用了函數的封裝,在同一目錄下的py文件可以直接將WordCloudGenerate.py當做庫來導入,直接使用cloud_generate()函數from?WordCloudGenerate?import?cloud_generate
也可以將WordCloudGenerate.py添加到python的庫中,從任意地方調用此庫。