天天看點

Python學習筆記——WordCloud

效果圖

Python學習筆記——WordCloud
# !/user/bin/env Python3
# -*- coding:utf-8 -*-

"""
file:WordCloudTest.py
create time:2018/6/7 10:53
author:Loong Xu
desc: 詞雲測試
"""
# 用wordcloud生成詞雲
from wordcloud import WordCloud
import jieba
# 詞頻計算
import jieba.analyse as analyse
from scipy.misc import imread
import matplotlib.pyplot as plt


class WordCloudTest(object):
    """
    詞雲展示類
    """

    def draw_wordcloud(self):
        """
        繪制詞雲
        :return:
        """
        with(open('data/ori.txt', 'r', encoding="utf-8")) as file:
            comment_text = file.read()
            cut_text = " ".join(jieba.cut(comment_text))
            result = jieba.analyse.textrank(cut_text, topK=1000, withWeight=True)
            # 生成關鍵詞比重字典
            keywords = dict()
            for i in result:
                keywords[i[0]] = i[1]
            color_mask = imread("data/imgs/bg.png")  # 背景圖檔
            cloud = WordCloud(
                font_path="data/fonts/simsun.ttc",  # 設定字型,否則容易出現亂碼
                width=400,  # 畫布寬度
                height=200,  # 畫布高度
                prefer_horizontal=0.9,  # 詞語水準方向排版出現頻率,預設0.9
                scale=1,  # 按照比例放大畫布,預設為1
                font_step=1,  # 字型步長,若大于1,會加快運算,但是可能會導緻誤差
                stopwords=None,  # 屏蔽詞,若為空,則使用内置屏蔽詞
                mode="RGBA",  # 預設為“RGB”,設為“RGBA”後背景為透明
                relative_scaling=0.5,  # 詞頻與字型大小的相關性,預設為0.5
                color_func=None,  # 生成新顔色的函數,若為空,則調用self.color_func
                regexp=None,  # 使用正規表達式分割輸入的文本
                collocations=True,  # 是否包括兩個詞的搭配,預設為True
                colormap="viridis",  # 給每個單詞随機配置設定顔色
                background_color='black',  # 背景顔色,若指定了color_func,則忽略此方法
                mask=color_mask,  # 詞雲形狀
                max_words=2000,  # 允許最大詞彙量
                min_font_size=8,  # 最小字型号
                max_font_size=80  # 最大字型号
            )
            # word_cloud = cloud.generate_from_frequencies(keywords, 2000)  # 根據詞頻産生詞雲
            word_cloud = cloud.fit_words(keywords)  # 根據詞頻産生詞雲
            # word_cloud = cloud.generate(cut_text)  # 根據文本産生詞雲
            # word_cloud = cloud.generate_from_text(cut_text)  # 根據文本産生詞雲
            # word_cloud = cloud.process_text(cut_text)  # 英語長文本分詞并去除屏蔽詞産生詞雲
            word_cloud.to_file("data/imgs/result_fit_black.png")  # 儲存圖檔
            # word_cloud.to_array()  # 轉化為numpy array
            plt.imshow(word_cloud)
            plt.axis('off')
            plt.show()


if __name__ == '__main__':
    wordcloud_test = WordCloudTest()
    wordcloud_test.draw_wordcloud()
           
Python學習筆記——WordCloud

小技巧:

1.要讓詞雲裡的文字更清晰的話可以吧scale設的大一些,需要注意圖像的像素(尺寸)也會相應放大scale倍(是以放大個幾倍就好,太大了會增加運算量)

2.要讓詞雲裡的詞語密度增加的話可以把max_words設定大一些(也不能太大,太大詞雲還是會變稀疏);再就是設定max_font_size大一些,字型大了,看起來密度也就大了;還有将repeat設定為True,否則詞語數量太少,就隻能讓詞語間隔增大了