zoukankan      html  css  js  c++  java
  • python 基于 wordcloud + jieba + matplotlib 生成词云

    词云##

    词云是啥?词云突出一个数据可视化,酷炫。以前以为很复杂,不想python已经有成熟的工具来做词云。而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑。准备好了吗,快跟我一起动手吧

    模块##

    本案例基于python3.6, 相关模块如下,安装都是直接 pip install <模块名>

    1. wordcloud 作用如其名。本例核心模块,它把我们带权重的关键词渲染成词云
    2. matplotlib 绘图模块,主要作用是把wordcloud生成的图片绘制出来并在窗口展示
    3. numpy 图像处理模块,读取图片生成像素矩阵
    4. PIL (pip install pillow) 图片处理模块, 打开初始化图片
    5. jieba 牛逼的分词模块,因为我是从一个txt文本里提取关键词,所以需要 jieba 来分词并统计词频。如果是已经有了现成的数据,不再需要它

    代码##

    # -*- coding=utf8 -*-
    import matplotlib.pyplot as plt
    import jieba.analyse
    import numpy
    from PIL import Image
    from wordcloud import WordCloud, ImageColorGenerator
    
    def readTxt(file, encoding='utf8'):
        """
        :param file:
        :param encoding:
        :return:
        """
        with open(txt_file, 'r', encoding='utf16') as f:
            txt = f.read()
        return txt
    
    def textDict(content):
        """
        jieba 提取1000个关键词及其比重
        :param content:
        :return:
        """
        result = jieba.analyse.textrank(content, topK=1000, withWeight=True)
        # 转化为比重字典
        keywords = dict()
        for i in result:
            keywords[i[0]] = i[1]
        return keywords
    
    def renderWordCloud(keywords, sourceImg):
        # 获取图片资源
        image = Image.open(sourceImg)
        # 转为像素矩阵
        graph = numpy.array(image)
    
        # wordcloud 默认字体库不支持中文,这里自己选取中文字体
        fontPath = 'C:/Windows/Fonts/SIMLI.TTF'
        #fontPath = 'C:/Windows/Fonts/mplus-1mn-regular.ttf'
        wc = WordCloud(
            font_path=fontPath,
            background_color='white',
            max_words=1000,
            # 使用的词云模板背景
            mask=graph
        )
        # 基于关键词信息生成词云
        wc.generate_from_frequencies(keywords)
        # 读取模板图片的颜色
        image_color = ImageColorGenerator(graph)
        # 生成词云图
        plt.imshow(wc)
        # 用模板图片的颜色覆盖
        plt.imshow(wc.recolor(color_func=image_color))
        # 关闭图像坐标系
        plt.axis('off')
        # 显示图片--在窗口显示
        plt.show()
    
    
    txt_file = 'C:/Users/KF/Downloads/《围城》钱钟书(完美版).TXT'
    source_img = 'C:/Users/KF/Pictures/ul1241-2001.jpg'
    #source_img = 'C:/Users/KF/Pictures/微信图片_20170710102042.jpg'
    #source_img = 'C:/Users/KF/Pictures/微信图片_20170710102054.jpg'
    #source_img = 'E:DOCCarlwallpapersd250038c4fde4ea7f36ebe010a7b58ca.jpg'
    
    content = readTxt(txt_file)
    keywords = textDict(content)
    renderWordCloud(keywords, source_img)
    

    成果##

  • 相关阅读:
    常用开发技巧系列(三)
    快速排序OC、Swift版源码
    一步一步学习SignalR进行实时通信_8_案例2
    一步一步学习SignalR进行实时通信_7_非代理
    一步一步学习SignalR进行实时通信_6_案例
    一步一步学习SignalR进行实时通信_5_Hub
    一步一步学习SignalR进行实时通信_4_Hub
    一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
    一步一步学习SignalR进行实时通信_2_Persistent Connections
    一步一步学习SignalR进行实时通信_1_简单介绍
  • 原文地址:https://www.cnblogs.com/dapianzi/p/7505886.html
Copyright © 2011-2022 走看看