【詞雲】wordcloud安裝與使用
wordcloud 是一個python實現的高效詞頻視覺化工具,除了可以使用各種mask和顏色提供個性化的掩膜,還可以通過api便捷的挑戰獲得個性化的詞雲輸出。
安裝:pip install wordcloud
wordcloud 包含三個主要api:
WordCloud([font_path, width, height, …])
最重要的函式生成和描繪詞雲.ImageColorGenerator(image[, default_color])
通過輸入rgb影象獲得色彩資訊.random_color_func([word, font_size, …])
隨機渲染顏色.
1.簡單的小栗子
首先我們需要一篇文字文件來顯示,作為例子就copy了紐約時報的一篇報道存為demo.txt
,隨後使用wordcloud來視覺化:
import matplotlib.pyplot as plt #匯入畫圖包
from wordcloud import WordCloud #匯入wordcloud api
text = open('./demo.txt').read() #開啟剛剛儲存的api
wordcloud = WordCloud().generate(text) #利用text生成詞雲
#顯示詞雲
plt.imshow( wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
這時候我們就有一副粗糙的詞雲圖像了,可以看到詞雲基本上表示了文章的主題:
接下來我們要精煉一下我們的影象,讓它變得更漂亮,這就需要詳細地瞭解一下API
的資訊了。
修改後的詞雲圖:
2.API–wordcloud.WordCloud
class wordcloud.WordCloud(font_path=None, #可以指定詞雲的字型
width=400, height=200, margin=2, #詞雲長寬
ranks_only= None, prefer_horizontal=0.9, #水平豎直方向的比例
mask=None, scale=1, #mask為詞雲的掩膜,可由影象突入二值BW圖
color_func=None, #定義顏色函式,可由ImageColorGenerator定義
max_words=200, #最多顯示的詞數
max_font_size=None,min_font_size=4,
font_step=1, #定義最小最大字型及其變化步長
stopwords=None, random_state=None, #待清除的詞
background_color='black', #定義背景顏色
mode='RGB', #RGBA時可以使得背景透明
relative_scaling='auto', #詞頻與顯示字型的相對大小
regexp=None, #輸入分詞的正則表示式
collocations=True, #
colormap=None,
normalize_plurals=True, #單複數單詞是否看成一致
contour_width=0, contour_color='black', #邊緣設定
repeat=False) #小於最大值時是否重複
3.個性化詞雲
針對api中的設定,我們可以修改剛才的程式碼來實現更好看的詞雲:
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
import cv2
text = open('./demo.txt').read()
mask = cv2.imread('./font/Burdick-Scutoid.jpg') #讀入用於作為mask的圖
image_colors = ImageColorGenerator(mask) #生成顏色
wc = WordCloud(font_path='./font/CabinSketch-Bold.ttf', #設定字型,可以從google/font下載
background_color='white', #設定背景顏色
mask = mask,colormap='autumn', #設定掩膜和colormap,會被color_func覆蓋
#color_func=image_colors, #設定顏色生成函式
#repeat=True,
contour_width=1, contour_color='gold' #設定邊框
)
#字型下載地址:https://github.com/google/fonts/blob/master/ofl/cabinsketch/CabinSketch-Bold.ttf
wc.generate(text)
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
執行後就得到了下面的圖啦
4.中文詞雲
同樣我們先準備一份cn.txt
的中文文件,儲存為utf-8
編碼:
import io
import jieba #匯入jieba包作為切分詞語的工具
import matplotlib.pyplot as plt #匯入畫圖包
from wordcloud import WordCloud #匯入wordcloud api
text = io.open('./zh.txt',encoding ='utf-8').read() #python2中需要利用io.open中的編碼功能encoding
cut_str = jieba.cut(text) #使用Jieba分詞進行 -> generator
text = r' '.join(cut_str) #將分詞結果組合為字串
wordcloud = WordCloud(font_path = './font/simhei.ttf',background_color='white',colormap='jet').generate(text) #利用text生成詞雲
#必須設定中文字型才能顯示 from:http://www.font5.com.cn/font_download.php?id=151&part=1237887120
#顯示詞雲
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
ref
https://amueller.github.io/word_cloud
https://github.com/amueller/word_cloud
https://blog.csdn.net/fyuanfena/article/details/52038984
http://www.zyy1217.com/
jieba
http://www.cnblogs.com/fonttian/p/9819770.html
https://blog.csdn.net/fontthrone/article/details/72782971
https://blog.csdn.net/sinat_34022298/article/details/75943272
encoding:
https://blog.csdn.net/j2iayu7y/article/details/80193340
http://python.jobbole.com/87145/
http://www.cnblogs.com/fkissx/p/5417363.html