1. 程式人生 > >新技能 get —— 使用 python 生成詞雲

新技能 get —— 使用 python 生成詞雲

什麼是詞雲(word cloud)呢?詞雲又叫文字雲,是對文字資料中出現頻率較高的“關鍵詞”在視覺上的突出呈現,形成關鍵詞的渲染形成類似雲一樣的彩色圖片,從而一眼就可以領略文字資料的主要表達意思。

0. 常見詞雲生成工具

從技術上來看,詞雲是一種有趣的資料視覺化方法,網際網路上有很多的現成的工具:

  • Wordle是一個用於從文字生成詞雲圖而提供的遊戲工具
  • Tagxedo 可以線上製作個性化詞雲
  • Tagul 是一個 Web 服務,同樣可以建立華麗的詞雲
  • Tagcrowd 還可以輸入web的url,直接生成某個網頁的詞雲
    ……

1. 庫的準備

  • jieba
  • matplotlib
  • wordcloud

2. 10 行代程式碼

#coding: UTF-8
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

text_from_file = open('檔案.txt', 'rb').read()
wordlist = jieba.cut(text_from_file, cut_all=True)           # 首先使用 jieba 中文分詞工具進行分詞
wordlist_space_split = ' '.join(wordlist)
my_wordcloud = WordCloud().generate(wordlist_space_split)

plt.imshow(my_wordcloud)            # 以圖片的形式顯示詞雲
plt.axis('off') # 關閉座標軸 plt.show()

剛開始執行這十行程式碼的時候,只顯式了若干彩色的小矩形框,中文詞語顯式不出來,以為是萬惡的 UTF8 問題,debug一下,發現 print 結巴分詞的結果是可以顯示中文的,那就是 wordcloud 生成詞語的字型庫問題了。開源的好處來了,直接進入wordcloud.py 的原始碼,找字型庫相關的程式碼:

FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__), "DroidSansMono.ttf"
))

wordcloud 預設使用了DroidSansMono.ttf 字型庫,改一下換成一個支援中文的ttf 字型檔(比如simsun.ttc,常規-宋體), 重新執行一下這十行程式碼,就可以了。