python生成詞雲

上代碼:app

# -*- coding: utf-8 -*-
# @Time    : 19-1-10 上午10:27
# @Author  : Felix Wang

import jieba  # pip install jieba
from scipy.misc import imread  # 這是一個處理圖像的函數 pip install scipy
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator  # pip install wordcloud
import matplotlib.pyplot as plt  # pip install matplotlib


# 該函數的做用就是把屏蔽詞去掉,使用這個函數就不用在WordCloud參數中添加stopwords參數了
# 把你須要屏蔽的詞所有放入一個stopwords文本文件裏便可
def stop_words(texts, stopwords=None):
    """
    中止詞處理
    :param texts: 文本內容
    :param stopwords: 中止詞路徑
    :return:
    """
    words_list = []
    word_generator = jieba.cut(texts, cut_all=False)  # 返回的是一個迭代器
    if stopwords:
        with open(stopwords) as f:
            str_text = f.read()
            unicode_text = str(str_text)  # 把str格式轉成unicode格式
            f.close()  # stopwords文本中詞的格式是'一詞一行'
    else:
        unicode_text = ''
    for word in word_generator:
        if word.strip() not in unicode_text:
            words_list.append(word)
    return ' '.join(words_list)  # 注意是空格


def get_img(base_img_path, goal_img_path, text_path, stopwords_path=None):
    """
    得到詞雲圖片
    :param base_img_path: 詞雲基準圖片
    :param goal_img_path: 輸出目標圖片
    :param text_path: 文本路徑
    :param stopwords_path: 中止詞路徑
    :return:
    """
    back_color = imread(base_img_path)  # 解析該圖片

    wc = WordCloud(background_color='white',  # 背景顏色
                   max_words=1000,  # 最大詞數
                   mask=back_color,  # 以該參數值做圖繪製詞雲,這個參數不爲空時,width和height會被忽略
                   max_font_size=100,  # 顯示字體的最大值
                   font_path="/home/felix/.local/share/fonts/SIMHEI.TTF",  # 解決顯示口字型亂碼問題,可以使用查看 fc-list :lang=zh
                   random_state=42,  # 爲每一個詞返回一個PIL顏色
                   # width=1000,  # 圖片的寬
                   # height=860  #圖片的長

                   )
    # WordCloud各含義參數請點擊 wordcloud參數

    # 添加本身的詞庫分詞,好比添加'金三胖'到jieba詞庫後,當你處理的文本中含有金三胖這個詞,
    # 就會直接將'金三胖'看成一個詞,而不會獲得'金三'或'三胖'這樣的詞
    # jieba.add_word('金三胖')

    # 打開詞源的文本文件
    with open(text_path) as f:
        text = stop_words(f.read(), stopwords_path)
        wc.generate(text)
    # 基於彩色圖像生成相應彩色
    image_colors = ImageColorGenerator(back_color)
    # 顯示圖片
    plt.imshow(wc)
    # 關閉座標軸
    plt.axis('off')
    # 繪製詞雲
    plt.figure()
    plt.imshow(wc.recolor(color_func=image_colors))
    plt.axis('off')
    # 保存圖片
    wc.to_file(goal_img_path)


get_img('002.jpg', 'word_cloud.jpg', 'news.txt')  # 不指定中止詞
get_img('002.jpg', 'word_cloud.jpg', 'news.txt', stopwords_path='stopwords.txt')  # 指定中止詞

效果圖:dom

相關文章
相關標籤/搜索