基於python的wordcloud庫生成中文詞雲
阿新 • • 發佈:2018-12-12
安裝
pip install wordcloud -i https://mirrors.aliyun.com/pypi/simple/
wordcloud中主要有三個類:
WordCloud([font_path, width, height, …]) | 生成和繪圖的詞雲物件 |
---|---|
ImageColorGenerator(image[, default_color]) | 基於彩色影象的顏色生成器 |
random_color_func([word, font_size, …]) | 隨機色調顏色生成 |
第一個類:
class wordcloud.WordCloud(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling='auto', regexp=None, collocations=True, colormap=None, normalize_plurals=True, contour_width=0, contour_color='black', repeat=False)
主要引數:
- width : int (default=400) //輸出的畫布寬度,預設為400畫素
- height : int (default=200) //輸出的畫布高度,預設為200畫素
- prefer_horizontal : float (default=0.90) //詞語水平方向排版出現的頻率,預設 0.9 (所以詞語垂直方向排版出現頻率為 0.1 )
- mask : nd-array or None (default=None) //如果引數為空,則使用二維遮罩繪製詞雲。如果 mask 非空,設定的寬高值將被忽略,遮罩形狀被 mask 取代。 除了全白的部分將不會繪製,其餘部分會用於繪製詞雲。 背景圖片的畫布一定要設定為白色(#FFFFFF),然後顯示的形狀為不是白色的其他顏色。
- scale : float (default=1) //按照比例進行放大畫布,如設定為1.5,則長和寬都是原來畫布的1.5倍。
- min_font_size : int (default=4) //顯示的最小的字型大小
- font_step : int (default=1) //字型步長,如果步長大於1,會加快運算但是可能導致結果出現較大的誤差。
- max_words : number (default=200) //要顯示的詞的最大個數
- stopwords : set of strings or None //設定需要遮蔽的詞,如果為空,則使用內建的STOPWORDS
- background_color : color value (default=”black”) //背景顏色,
- max_font_size : int or None (default=None) //顯示的最大的字型大小
- color_func : callable, default=None //生成新顏色的函式,如果為空,則使用 self.color_func
- colormap : string or matplotlib colormap, default=”viridis” //給每個單詞隨機分配顏色,若指定color_func,則忽略該方法。 方法:
fit_words(frequencies) | 根據單詞的頻率生成詞雲 |
---|---|
generate(text) | 根據文字生成詞雲 |
generate_from_frequencies(frequencies[, …]) | 根據單詞的頻率生成詞雲 |
generate_from_text(text) | 根據文字生成詞雲 |
process_text(text) | 將長文字分詞並去除遮蔽詞 |
recolor([random_state, color_func, colormap]) | 改變現有佈局的顏色 |
to_array() | 轉化為 numpy array. |
to_file(filename) | 輸出為image檔案 |
第二個類:
classwordcloud.ImageColorGenerator(image, default_color=None)
基於RGB影象生成顏色。將使用彩色影象中包圍矩形的平均顏色對單詞進行著色。構造之後,該物件充當可呼叫物件,可以作為color_func傳遞給單詞雲建構函式或recolor方法。 Image:用於生成單詞顏色的影象 例子:
import jieba
import wordcloud
import matplotlib.pyplot as plt
class JiuJie(object):
"""
將九界天君小說做成詞雲
"""
def __init__(self):
self.my_txt = ''
self.words = []
def cut_words(self):
"""
函式說明:對九界天君的內容進行分詞
"""
# 讀取文字內容
with open('九界天君.txt', 'r', encoding='utf-8') as f:
self.my_txt = f.read()
# 用jieba分詞
words_list = jieba.lcut(self.my_txt, cut_all=False)
self.words = [word for word in words_list if len(word) > 1]
self.generate_wordcloud()
def generate_wordcloud(self):
"""
函式說明:對分詞生成詞雲
"""
fig, axes = plt.subplots(1, 2)
# 讀取image
background_img = plt.imread('timg.jpg')
# 生成wordcloud 物件
word_cloud = wordcloud.WordCloud(background_color='white', mask=background_img,scale=2 )
# 將self.words單詞 生成詞雲words_img
words_img = word_cloud.generate(' '.join(self.words))
# 直接顯示(顏色隨機分配)
axes[0].imshow(words_img)
# 基於background_img生成顏色
img_color = wordcloud.ImageColorGenerator(background_img)
# 對words_img 進行顏色重構(單詞顏色為圖片背景顏色)
axes[1].imshow(words_img.recolor(color_func=img_color))
# 去掉座標軸
for ax in axes:
ax.set_axis_off()
# 顯示詞雲
plt.show()
if __name__ == '__main__':
W = JiuJie()
W.cut_words()
原圖片:
生成結果: