查看list的形状_用Wordcloud生成指定形状的词云图

09c45465e2579b7f2d1056d10498207d.png

wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概。

首先贴出一张词云图(以哈利波特小说为例):

d64a56cbbb63c5985773d4c81b736784.png

在生成词云图之前,首先要做一些准备工作

1.安装结巴分词库

pip install jieba

30ea71d2d738de075e3d21542d37c300.png

Python中的分词模块有很多,他们的功能也都是大同小异,我们安装的结巴分词 是当前使用的最多的类型。

下面我来简单介绍一下结巴分词的用法

结巴分词的分词模式分为三种:

(1)全模式:把句子中所有的可以成词的词语都扫描出来, 速度快,但是不能解决歧义问题

(2)精确模式:将句子最精确地切开,适合文本分析

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

下面用一个简单的例子来看一下三种模式的分词区别:

import jieba# 全模式:把句子中所有的可以成词的词语都扫描出来, 速度快,但是不能解决歧义问题text = "哈利波特是一常优秀的文学作品"seg_list = jieba.cut(text, cut_all=True)print(u"[全模式]: ", "/ ".join(seg_list))# 精确模式:将句子最精确地切开,适合文本分析seg_list = jieba.cut(text, cut_all=False)print(u"[精确模式]: ", "/ ".join(seg_list))# 默认是精确模式seg_list = jieba.cut(text)print(u"[默认模式]: ", "/ ".join(seg_list))# 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词seg_list = jieba.cut_for_search(text)print(u"[搜索引擎模式]: ", "/ ".join(seg_list))

下面是对这句话的分词方式:

8fd28e6d5d6fd41554cd66767832e96e.png

通过这三种分词模式可以看出,这些分词模式并没有很好的划分出“哈利波特”这个专有名词,这是因为在结巴分词的字典中并没有记录这个名词,所以需要我们手动添加自定义字典。

添加自定义字典:找一个方便引用的位置(下图的路径是我安装的位置),新建文本文档(后缀名为.txt),将想添加的词输入进去(注意输入格式),保存并退出。

8356ecb41f1bdcd2ccaec836872db6f2.png

在上面的代码中加入自定义字典的路径,再点击运行。

jieba.load_userdict("/home/jmhao/anaconda3/lib/python3.7/site-packages/jieba/mydict.txt")

分词结果,可以看出“哈利波特”这个词已经被识别出来了。

39d383e0d402f46bd0189e2719f0c84a.png

结巴分词还有另一个禁用词的输出结果。

stopwords = {}.fromkeys(['优秀', '文学作品'])#添加禁用词之后seg_list = jieba.cut(text)final = ''for seg in seg_list:if seg not in stopwords:final += segseg_list_new = jieba.cut(final)print(u"[切割之后]: ", "/ ".join(seg_list_new))

可以看到输出结果中并没有“优秀”和“文学作品”两个词

ebc65986e7b350dacdbf0585f7ed8bfc.png

结巴分词还有很多比较复杂的操作,具体的可以去官网查看,我就不再过多的赘述了。

下面我们正式开始词云的制作。

首先下载模块,这里我所使用的环境是Anaconda,由于Anaconda中包含很多常用的扩展包,所以这里只需要下载wordcloud。若使用的环境不是Anaconda,则另需安装numpy和PIL模块。

pip install wordcloud

8e6f6030f834da7fb96ebe57c5411467.png

然后我们需要找一篇文章并使用结巴分词将文章分成词语的形式。

# 分词模块def cut(text):# 选择分词模式word_list = jieba.cut(text,cut_all= True)# 分词后在单独个体之间加上空格result = " ".join(word_list)# 返回分词结果return result

这里我在当前文件夹下创建了一个文本文档“xiaoshuo.txt”,并复制了一章的小说作为词云的主体文字。

使用代码控制,打开并读取小说的内容

#导入文本文件,进行分词,制作词云with open("xiaoshuo.txt") as fp:text = fp.read()# 将读取的中文文档进行分词text = cut(text)

在网上找到一张白色背景的图片下载到当前文件夹,作为词云的背景图(若不指定图片,则默认生成矩形词云)

#设置词云形状,若设置了词云的形状,生成的词云与图片保持一致,后面设置的宽度和高度将默认无效mask = np.array(image.open("monkey.jpeg"))

接下来可以根据喜好来定义词云的颜色、轮廓等参数 下面为常用的参数设置方法

1d9300513c6d21a8d9fca3c0247358c2.png

完整代码

#导入词云库from wordcloud import WordCloud#导入图像处理库import PIL.Image as image#导入数据处理库import numpy as np#导入结巴分词库import jieba# 分词模块def cut(text):# 选择分词模式word_list = jieba.cut(text,cut_all= True)# 分词后在单独个体之间加上空格result = " ".join(word_list)return result#导入文本文件,进行分词,制作词云with open("xiaoshuo.txt") as fp:text = fp.read()# 将读取的中文文档进行分词text = cut(text)#设置词云形状mask = np.array(image.open("monkey.jpeg"))#自定义词云wordcloud = WordCloud(# 遮罩层,除白色背景外,其余图层全部绘制(之前设置的宽高无效)mask=mask,#默认黑色背景,更改为白色background_color='#FFFFFF',#按照比例扩大或缩小画布scale=,# 若想生成中文字体,需添加中文字体路径font_path="/usr/share/fonts/bb5828/逐浪雅宋体.otf").generate(text)#返回对象image_produce = wordcloud.to_image()#保存图片wordcloud.to_file("new_wordcloud.jpg")#显示图像image_produce.show()

注:若想要生成图片样式的词云图,找到的图片背景必须为白色,或者使用Photoshop抠图替换成白色背景,否则生成的词云为矩形

我的词云原图:

f8897b4c446c75087bc3813200a2009d.png

生成的词云图:

71a9ad572c4574989dcbbda04a63825b.png 

- END -

文源网络,仅供学习之用,如有侵权,联系删除。往期精彩

ad5dc60936ac156605db5689de15c4ca.png

◆  50款开源工具你都用过吗?

◆  你知道Python的就业方向和薪资吗?(赠学习资料)

◆  python网络爬虫的基本原理详解

0c30d8b9a62a01a4fdc833702d14f59e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oc引导win方法_[OC更新]机械革命8代、9代标压稳定版更新

加关注这种话银家怎么好意思说出口嘛更新机型机械革命Z2G机械革命Z2AIRG机械革命X3(9th ver)机械革命umi air(1080p ver)机械革命X9TI机械革命X8TI-R机械革命X8TI-G机械革命Z2机械革命Z2AIR机械革命X8TI机械革命X8TI PLUS机械革命X3(8th ver)机械革命S1PLUS(8750H)机械革命X2更…

有机晶体数据库_Cambridge Structural Database 2017 晶体结构分析软件分享

文 / 利刃君微信ID / ziyuanliren666全文共2024字,推荐阅读时间6分钟。剑桥结构数据库系统(The Cambridge Structural Database System,简写为CSDS)是基于X光和中子衍射实验唯一的小分子及金属有机分子晶体的结构数据库,收录了全世界范围内所…

win ftp 指定的密码无效。请键入新密码。_重设OS X (macOS)系统帐户密码的5种方法...

为了保护自己的隐私安全,不少 Mac 用户都会选择给自己的设备设置密码,但是时不时的会出现忘掉密码的情况。分享找回(重设)OS X (macOS)系统账号密码的5种方法。如果你忘记了 OS X (macOS&#x…

滑动翻页效果_Flutter实现3D效果,一个字,炫!

老孟的博客地址:http://laomengit.com/Flutter 中3D效果是通过Transform组件实现的,没有变换效果的实现:class TransformDemo extends StatelessWidget {overrideWidget build(BuildContext context) {return Scaffold( appBar: AppBar(…

MySQL8怎么设置时区为东八区_mysql时区设置为东八区

场景:后台返回给页面的时间统一差8小时。 分析:差八小时,应该是时区问题。具体的是哪一层出的问题呢,mybatis?mysql?系统时间? 解析: 1.查询mysql时区(正常) 输入show variables like "%time_zone%";,显示当前时区 全局参数system_time_zone 系统时区,在My…

mysql网络异常_mysql运行过程中因网络或者数据库原因导致的异常

1、异常信息:The driver has not received any packets from the server异常栈:原因:此异常为jdbc自身的超时限制,一般为应用调用jdbc的API设置了queryTimeout超时限制,当成功获取数据库连接执行sql的时候与mysql服务端断开&#…

js清空文本框的值_一个Vue.js实例控制字变大变小,含样式操作,flex布局。「603」...

这是一个用vue.js对css操作完成的实例。当然用了flex简单布局。一、先创建一个html文件,记得添加vue库文件。二、创建一盒容器vmdiv,用vue绑定它,测试vue绑定后的插入值text1效果。三、加入文本框和两个按钮。四、通过flex排序,让…

mysql mybatis 工具类_我肝了一个星期,为你们整理出了mybatis程序配置教程

1、搭建实验数据库我们创建一个mybatis实验数据库,并创建一个user表为后续实验准备2、IDEA新建项目,连接数据库新建一个普通的maven项目删除src目录,作为父工程pom.xml中导入相关的maven依赖1、 MySQL驱动2、 MyBatis驱动3、 junit驱动连接我…

mysql gt resource_实用干货,MYSQL这么用就对啦

本文主要梳理了 SQL 的基础用法,会涉及到以下方面内容:SQL大小写的规范数据库的类型以及适用场景SELECT 的执行过程WHERE 使用规范MySQL 中常见函数子查询分类如何选择合适的 EXISTS 和 IN子查询了解 SQLSQL 是我们用来和数据打交道的方式之一&#xff0…

python 查看当前目录_Python学习第156课--ls的运用、环境变量以及PATH

【每天几分钟,从零入门python编程的世界!】之前简单的介绍了Linux中几个简单的命令。这节再深入一点介绍下 ls 的运用。lsls相当于是list的简写,它的作用是把我们当前目录中的文件列举出来。ls -l把当前目录下的文件以及它的具体信息列举出来…

python对数组的操作_Python对数组的基本操作

# codingutf-8Created on 2014-3-29author: Administrator创建并打印数组arr ["aex", "bfe", "mpilgrim", "zddd", "example"];print(arr);#[aex, bfe, mpilgrim, zddd, example]print(arr[2]);#mpilgrim数组的负索引li[-n…

莫烦python博客_《莫烦Python》笔记 -- numpy部分

个人感觉,在numpy里,从说法上,数组与矩阵可以互换1.1 numpy & pandas有什么用?1.2 numpy & pandas的安装安装Anaconda2.1 numpy属性import numpy as np# 将一个列表转化为矩阵array np.array([[1,2,3],[2,3,4]])# 查看矩…

java 内存情况_java查看jvm内存使用情况

java查看jvm内存使用情况(2012-03-22 15:50:54)标签:jvm内存虚拟机分配itjava.lang.Runtime类提供了查看当前JVM内存的使用情况。每个java实例(即虚拟机实例)只有一个Runtime的实例,通过Runtime.getRuntime()可以得到当前虚拟机中的Runtime实例对象。Run…

java 密码生成器_Java课程设计-随机密码生成器

1.团队课程设计博客链接2.个人负责模板设计程序运行界面,数据的输入,判断数据输入类型的错误,判断密码类型是否选择。3.自己的代码提交记录截图4自己负责模块或任务详细说明(一)总体设计1.系统主要功能(1)输入生成密码长度;(2)判断…

pyecharts本地文件_python数据可视化-pyecharts插件使用文档

pyecharts是百度开源的可视化插件,可以将设计的可视化图表以html格式保存,配合jupyter可以一键生成动态的html数据分析报告。pyecharts和matplotlib的区别在于,pyecharts有更加强大交互的可视化和嵌入html的功能,pyecharts缺点在于…

gdal获取像元的灰度值java_GDAL利用地理坐标读取图像像元值

最近的一个项目需要在电子海图中下载已知水深点,导出点的地理坐标(经纬度)。然后在arcgis中打开这些地理坐标输出为shp,利用GDAL读取不同波段的点对应的像元值,从而构建水深和像元值的对应关系。其实想要根据经纬度得到像元值有两种方法。1.通…

kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode...

在之前的文章 “Elasticsearch:使用 Runtime fields 对索引字段进行阴影处理以修复错误 – 7.11 发布”,我展示了如何使用 runtime field 来 shadow 一个已有的在 mapping 中的字段,比如 duration。在今天的练习中,我将展示如何创…

java根据uml图写出实现代码,根据java代码生成UML图

根据java代码生成UML图根据java代码生成UML图这里介绍一个简单易用的eclipse插件ModelGoon,用来对已有代码生成UML图,下面以之前文章中的spring mvc工程为例如何安装和使用这个插件;这个spring mvc工程的代码在githbu上,地址是&am…

highcharts php 动态数据,php动态传数据到highcharts的方法

本文主要介绍了通过php动态传数据到highcharts的相关知识。具有很好的参考价值。1:在平时工作中,在对数据进行展示的时候,是直接通过后台提供的接口来获取json串,用来展示。今天别人问怎么在本地演示一下请求的动态数据。2&#x…

php tar.gz文件,PHP解压tar.gz格式文件的方法,_PHP教程

PHP解压tar.gz格式文件的方法,本文实例讲述了PHP解压tar.gz格式文件的方法。分享给大家供大家参考,具体如下:1、运用php自带压缩与归档扩展(phar)$phar new PharData(song.tar.gz);//路径 要解压的文件 是否覆盖$phar->extractTo(c:/tmp,…