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

小技巧:

1.要让词云里的文字更清晰的话可以吧scale设的大一些,需要注意图像的像素(尺寸)也会相应放大scale倍(所以放大个几倍就好,太大了会增加运算量)

2.要让词云里的词语密度增加的话可以把max_words设置大一些(也不能太大,太大词云还是会变稀疏);再就是设置max_font_size大一些,字体大了,看起来密度也就大了;还有将repeat设置为True,否则词语数量太少,就只能让词语间隔增大了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值