1. 程式人生 > >基於python的wordcloud庫生成中文詞雲

基於python的wordcloud庫生成中文詞雲

安裝

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()

原圖片: 在這裡插入圖片描述

生成結果: 在這裡插入圖片描述