什么是词云呢?

词云就是一些关键词组成的一个图片。大家在网上经常看到,下面看一些例子:

那用python生成一个词云的话怎么办呢,首先要有一些词,咱们随便找个吧,用see you again的歌词好了,放到again.txt里面,放着待会咱们用。

然后呢,咱们用 wrodcloud这个模块,他可以实现分词,生成咱们想要的词云图片,直接使用pip install wordcloud安装即可。

过程呢,就是先读取到歌词,然后给WordCloud,让他帮咱们分词,分词的意思就是把里面的一些关键词提取出来,以及指定图片的大小,背景颜色,字体等等,废话不多说,直接上代码。

 
1
2
3
4
5
6
7
8
9
10
11
from wordcloud import WordCloud #导入词云模块
words = open('again.txt',encoding='utf-8').read()#打开歌词文件,获取到歌词
wordcloud = WordCloud(width=1000, #图片的宽度
  height=860,  #高度
  margin=2, #边距
  background_color='black',#指定背景颜色
  font_path='simsun.ttf'#指定字体文件,要有这个字体文件,自己随便想用什么字体,就下载一个,然后指定路径就ok了
  )
wordcloud.generate(words) #分词
wordcloud.to_file('again.jpg')#保存到图片
 

简单的几行代码就ok拉,下面是生成的效果图

但是wordcloud这个模块对中文分词支持不怎么好,因为英文每个单词都是空格分开的,但是中文每个词语并部署,另外有个模块,对中文分词的比较好,这个模块是jieba,直接pip install jieba即可。

下面咱们再找个歌词,来个中文的,找到一路向北的歌词,保存到ylxb.txt里面,然后先使用wordcloud分词,保存到,lyxb1.jpg里面,再用jiba来分词,保存到lyxb2.jpg里面,看看差别

第一张,wordcloud自带的分词之后的词云

第二张,使用jieba分词之后的词云

明显就能看出来第一个基本就没有分词,使用jieba之后,把歌词里面的一些词语提取了出来,下面是代码。

 
1
2
3
4
5
6
7
8
9
10
11
12
import jieba
from wordcloud import WordCloud #导入词云模块
words = open('lyxb',encoding='utf-8').read()#打开歌词文件,获取到歌词
new_words = ' '.join(jieba.cut(words))#使用jieba.cut分词,然后把分好的词变成一个字符串,每个词用空格隔开
wordcloud = WordCloud(width=1000, #图片的宽度
  height=860,  #高度
  margin=2, #边距
  background_color='black',#指定背景颜色
  font_path='simsun.ttf'#指定字体文件,要有这个字体文件,自己随便想用什么字体,就下载一个,然后指定路径就ok了
  )
wordcloud.generate(new_words) #分词
wordcloud.to_file('lyxb2.jpg')#保存到图片y

ok,词云已经生成了,很完美。但是我看到别人的词云,都是各种形状的,为啥咱们都是一个矩形呢。当然是可以解决的了,咱们想让它成什么形状就是什么形状,需要先找到一个有形状的图片,我这里找了一棵树的图片作为例子,然后需要用到PIL模块,处理图片,用numpy把这个图片的各种属性转成数字,这2个模块需要安装,都是用pip安装即可,pip install PIL,pip install  numpy。先看下图片

原来的大树参照物

下面是产生大树形状的词云

下面直接上代码

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import jieba,numpy
from PIL import Image#导入PIL模块处理图片
from wordcloud import WordCloud #导入词云模块
words = open('lyxb',encoding='utf-8').read()#打开歌词文件,获取到歌词
new_words = ' '.join(jieba.cut(words))#使用jieba.cut分词,然后把分好的词变成一个字符串,每个词用空格隔开
alice_mask = numpy.array(Image.open('dashu.jpg'))
#使用pil模块打开这个图片,然后用numpy获取到这个图片各种乱八七糟的属性
wordcloud = WordCloud(width=1000, #图片的宽度
  height=860,  #高度
  margin=2, #边距
  mask=alice_mask,
  background_color='#d4ff80',#指定背景颜色,这里用的是颜色代码
  font_path='simsun.ttf'#指定字体文件,要有这个字体文件,自己随便想用什么字体,就下载一个,然后指定路径就ok了
  )
wordcloud.generate(new_words) #分词
wordcloud.to_file('lyxb4.jpg')#保存到图片
 
 

使用python生成词云的更多相关文章

  1. 用Python生成词云

    词云以词语为基本单元,根据词语在文本中出现的频率设计不同大小的形状以形成视觉上的不同效果,从而使读者只要“一瞥“即可领略文本的主旨.以下是一个词云的简单示例: import jieba from wo ...

  2. 新技能 get —— 使用 python 生成词云

    什么是词云(word cloud)呢?词云又叫文字云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据 ...

  3. python生成词云

    上代码: # -*- coding: utf-8 -*- # @Time : 19-1-10 上午10:27 # @Author : Felix Wang import jieba # pip ins ...

  4. python 生成词云

    1.知识点 """ WordCloud参数讲解: font_path表示用到字体的路径 width和height表示画布的宽和高 prefer_horizontal可以调 ...

  5. 从CentOS安装完成到生成词云python学习日记

    欢迎访问我的个人博客:原文链接 前言 人生苦短,我用python.学习python怎么能不搞一下词云呢是不是(ง •̀_•́)ง 于是便有了这篇边实践边记录的笔记. 环境:VMware 12pro + ...

  6. [python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写

    1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思.常见于博客.微博 ...

  7. python 基于 wordcloud + jieba + matplotlib 生成词云

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

  8. Python 情人节超强技能 导出微信聊天记录生成词云

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Python实用宝典 PS:如有需要Python学习资料的小伙伴可 ...

  9. 【python】itchat登录微信获取好友签名并生成词云

    在知乎上看到一篇关于如何使用itchat统计微信好友男女比例并使用plt生成柱状图以及获取微信好友签名并生成词云的文章https://zhuanlan.zhihu.com/p/36361397,感觉挺 ...

随机推荐

  1. 安装torch-opencv

    安装torch-opencv torch torch-opencv opencv-3.1.0 opencv-contrib 想在torch中使用光流法,于是就希望能够调用opencv中的光流代码,而t ...

  2. C++中的初始化参数列表

    c++中以下几种情况的变量的初始化不可以写在构造函数里,而是要写在初始化参数列表中 1.const常量 class AA { public : const int num; public : AA() ...

  3. HDOJ1005

    #include "iostream" using namespace std; int fun(int A,int B,int n) { ,y = ,z; || n == ) ; ...

  4. java连接MySql数据库 zeroDateTimeBehavior

    JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常, 就是所见的:java.sql.SQLException: Cannot convert va ...

  5. 深入了解 Java-Netty高性能高并发理解

    https://www.jianshu.com/p/ac7fb5c2640f 一丶 Netty基础入门 Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为 ...

  6. Quartz定时任务和IIS程序池闲置超时时间冲突解决方案

    一.问题描述 Bs项目中用Quartz功能执行一个定时任务(每隔5分钟执行一个Job),正常情况,Quartz定时任务会5分钟执行一次,但IIS程序池闲置 超时默认为20分钟,造成的结果是:定时任务只 ...

  7. File storage location distribution in firmware using binwalk

    tool function: Binwalk is a fast, easy to use tool for analyzing, reverse engineering, and extractin ...

  8. poj2892

    题解: 答案=后缀-前缀-1 如果被轰了,那么就时0 在一开始加入0,n+1,保证有前缀后缀 代码: #include<cstdio> #include<cmath> #inc ...

  9. 如何以编程方式打印到在 MFC 中的非默认打印机

    http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105790245b09c0252bd7a74a2485d315d2390f0750 ...

  10. pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。

    渣渣用法,请等待我心情好的时候更新. 1.第一个例子 1.1 先看mainwindow.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_M ...