图片来自网络所谓“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

环境准备python -m pip install wordclud

python -m pip install matplotlib

python -m pip install jieba

在Windows上,如无法成功安装,可使用已经编译好的二进制包,下载安装

wordcludPython用于生成词云的库。

wordclud 官方文档

属性简述font_path字体路径,做中文词云必须设置字体,否则无法显示

width输出的画布宽度,默认为400像素

height输出的画布高度,默认为200像素

mask如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取

min_font_size显示的最小的字体大小

max_font_size显示的最大的字体大小

max_words要显示的词的最大个数,默认200

scale按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5

color_func生成新颜色的函数,如果为空,则使用 self.color_fun

prefer_horizontal词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )

stopwords设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS

font_step字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误,默认1

background_color背景颜色

relative_scaling词频和字体大小的关联性,默认0.5

mode当参数为“RGBA”并且background_color不为空时,背景为透,默认“RGB”

regexp使用正则表达式分隔输入的文本

collocations是否包括两个词的搭配,默认True

colormap给每个单词随机分配颜色,若指定color_func,则忽略该方法

matplotlib一个Python 2D绘图库。Matplotlib试图让简单易事的事情成为可能。只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等,该库最常用于Python数据分析的可视化。

官方文档

最小示例from wordcloud import WordCloud

import matplotlib.pyplot as plt

with open("野性的呼唤.txt", encoding="utf-8") as file:

word_cloud = WordCloud().generate(file.read())

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标轴

plt.show()

interpolation 参数的用法

中文词云wordcloud 对中文分词支持不足,因此需要配合jieba分词库使用from wordcloud import WordCloud

import matplotlib.pyplot as plt

with open("fanrenxiuxian.txt", encoding="gbk") as file:

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1000,

height=860).generate(file.read())

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()

添加图片背景效果from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate(file.read())

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()

扩展:将图片加载的几种方法PIL.Image.open

scipy.misc.imread

skimage.io.imread

cv2.imread

matplotlib.image.imread

jieba

特点支持三种分词模式:精确模式,试图将句子最精确地切开,适合文本分析;

全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

支持繁体分词

支持自定义词典

MIT 授权协议

简单示例import jieba

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:

# jieba.enable_parallel(4) 并行运算,类unix系统,Windows不支持

seg_list = jieba.cut(file.read(), cut_all=False)

print("/".join(seg_list))

提取关键词import jieba.analyse

# TF-IDF算法关键词抽取

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:

jieba.analyse.set_stop_words('stopwords.txt')

tags = jieba.analyse.extract_tags(file.read(), 100)

print(tags)

中文词云实例

网络上关于中文词云的博客资料99.9%是对wordcloud官网示例的翻译,我要说的是官方示例基本就是个大坑,不知道是不太放心上还是本身就是临时工lowB程序员写的。而国内的博主习惯了粘贴复制,已经丧失了独立思考的能力,不假思索的就照搬,反正我是被坑了,用官方示例将一部《凡人修仙传》在Windows上单线程生成词云花了300多秒,而我经过仔细阅读jieba库和wordcloud库的API后,发现根本就不是官网示例那么个写法,经过我重新改造后,只需要大概60秒就能生成《凡人修仙传》的词云。

首先我们进入wordcloud文档,找到 create wordcloud with chinese 这个示例,查看一下官方示例,代码我这里就不贴了,点击链接可直接跳转第一种写法

我们结合jieba库,修改词云代码。这里使用WordCloud的stopwords参数加入停止词,而不是像官方示例那样去做遍历筛选停止词,特别是写出if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:这种低性能的代码,就算是遍历, len(myword.strip()) > 1也应放在最前面去判断,而不是把停止词放在最前面去判断,这样大大的增加了时间复杂度。from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba, time

def get_stopwords():

with open("stopwords.txt", encoding='utf-8') as f_stop:

return f_stop.read().splitlines()

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

stop_words = get_stopwords() # 获取停止词列表

seg_list = jieba.cut(file.read(), cut_all=False) # 返回一个生成器

cut_list = " ".join(seg_list)

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=1000,

max_font_size=100,

width=1920,

stopwords=stop_words,

mask=back_img,

height=1080).generate(cut_list)

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()第二种写法

这里的第二种写法基本就官方示例的写法,只是略微调整了筛选停止词时的判断条件的顺序from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba, time

def get_stopwords():

with open("stopwords.txt", encoding='utf-8') as f_stop:

return f_stop.read().splitlines()

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

stop_words = get_stopwords() # 获取停止词列表

seg_list = jieba.cut(file.read(), cut_all=False) # 返回一个生成器

cut_list = "/".join(seg_list).split("/")

content_list = []

for word in cut_list:

if len(word.strip()) > 1 and not (word.strip() in stop_words):

content_list.append(word)

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate(' '.join(content_list))

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()第三种写法,最终版

这种是我推荐的做法。整个文本的分词包括关键词提取,我们都直接交给jieba库去做就行了,WordCloud库仅仅根据jieba库返回的关键词以及权重去生成词云图片就行。这里主要用到WordCloud库的generate_from_frequencies这个函数,API文档给出的说明是Create a word_cloud from words and frequencies.,有了这个API,不知道官方中文词云示例为什么还写成那样,难道是自己的API都不清楚吗?令人费解from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba.analyse

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

jieba.analyse.set_stop_words('stopwords.txt') # 设置止词列表

tags = jieba.analyse.extract_tags(file.read(), 1000, withWeight=True)

data = {item[0]: item[1] for item in tags}

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=1000,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate_from_frequencies(data)

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()

简单说一下这里的stop_words停止词其实就是需要被过滤掉的词,比如一篇文章中肯定有无数个“的”、“了”之类的对于词频而言无意义词,根据具体需求,一些副词、逻辑连接词之类的也都要过滤掉,否则就会影响准确性。

由于我这里停止词没有单独去添加,而是用了一个通用的停止词表,导致最终生成的词云不是特别准确,这个就要大家自己去小心调试了

关注个人公众号:编程之路从0到1编程之路从0到1

python中文词云生成_Python 词云生成相关推荐

  1. python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码)

    文章中的例子主要借鉴wordColud的examples,在文章对examples中的例子做了一些改动. 一.wordColud设计中文词云乱码 使用wordColud设计词云的时候可能会产生乱码问题 ...

  2. python怎样安装词云库_python词云库wordcloud的使用方法与实例详解

    wordcloud是优秀的词云展示第三方库 一.基本使用 import jieba import wordcloud txt = open("1.txt", "r&quo ...

  3. python的总结与心得词云设计理念_Python词云展示十九大报告

    "不忘初心,牢记使命,高举中国特色社会主义伟大旗帜,决胜全面建成小康社会,夺取新时代中国特色社会主义伟大胜利,为实现中华民族伟大复兴的中国梦不懈奋斗." 十九大召开已过去近一个月, ...

  4. python中文词云图代码_python词云图与中文分词

    2019-12-12中文文本分词和词云图具体功能介绍与学习代码: import jieba a="由于中文文本的单词不是通过空格或者标点符号来进行分割" #jieba.lcut() ...

  5. python云资源管理_python管理云服务器

    如今是云时代,公司买服务器也从传统的IDC托管到现在的各大云厂商采购 .这里,我们将以阿里云.腾讯云为例实现云服务器实例的获取. 1.首先部署django环境,然后安装django drf, 把drf ...

  6. python 中文转拼音原理_Python中文转拼音

    –人人可以学Python– pypinyin安装与使用 pip命令安装: pip install pypinyin (venv) allenwoo@~/renren$ pip install pypi ...

  7. python中文字符串比较模块_python比较字符串相似度,原创度检测工具

    #-*- coding: utf-8 -*- """基于gensim模块的中文句子相似度计算 思路如下: 1.文本预处理:中文分词,去除停用词 2.计算词频 3.创建字典 ...

  8. python产生5个随机数_Python和numpy生成随机数

    http://blog.csdn.net/pipisorry/article/details/39086463 随机数种子 要每次产生随机数相同就要设置种子,相同种子数的Random对象,相同次数生成 ...

  9. python中文词组统计次数_python统计中文词组出现次数

    2018年9月7日在百度google没有找到python统计中文词组的,查出来的都是统计英文单词,词组的,所以我想来实现python中文词组统计分享. 首先我是用textrank4zh库将句子转化成词 ...

最新文章

  1. 在对话框中应用CScrollView显示图像
  2. C/C++中的数据类型转换
  3. html 判断是苹果几个版本号,这是我第一次遇到判断ios系统版本的问题
  4. 《暗黑地牢》—“克苏鲁”式的绝望冒险
  5. 学习《apache源代码全景分析》之存储段和存储段组摘录
  6. iPhone XR再降价:64GB到手最低仅需4149元
  7. 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)
  8. 简短介绍_简短的自我介绍
  9. Maven自动压缩脚本 和 样式文件配置
  10. shell编程脚本练习题
  11. 抛开当下的迷惘,IT技术人的发展之路该怎么走?
  12. 会计学硕和计算机,会计学与会计硕士有什么区别
  13. 关于DB9和DB25
  14. 华硕笔记本电脑重装系统教程,华硕笔记本系统重装教程
  15. python制作qq机器人_使用python打造一个自己的QQ机器人 【基础篇】
  16. 第114课:SparkStreaming+Kafka+Spark SQL+TopN+Mysql+KafkaOffsetMonitor电商广告点击综合案例实战(详细内幕版本)
  17. 第九课堂-#零基础学服装设计# 服装立体裁剪体验课(第18期)
  18. cookie与session区别
  19. 从CNCB下载单细胞转录组fastq文件并定量
  20. 万恶的ie8 hack问题

热门文章

  1. Linux下编写选择排序(C语言)
  2. springMVC3.0(文件上传,@RequestMapping加参数,@SessionAttributes,@ModelAttribute,转发,重定向,数值获取,传参,ajax,拦截器)
  3. 项目--properties--Builder;MyEclipse---project---clean---指定项目
  4. 线性代数之行列式矩阵术语中英对照
  5. Visual Studio Code连接SQL SERVER 2019
  6. 真实的linux系统是怎样的,只使用Linux系统是怎样一种体验?_科技数码通
  7. sql 问号的使用 php_PHP中bindParam和bindValue的区别
  8. python编程的条件语句_自学Python编程【第五节】if条件语句
  9. linux内核组件分析之--设备驱动模型之bus
  10. [译]Go如何优雅的处理异常