教程:用Python生成词云图
一. 词云图
“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
二. 前期准备
Python+jieba库+wordcloud库
如果需要自定义图像,还需要scipy库
jieba库
jieba库是用于中文分词的,可以将中文长文本切分成词组列表。jieba库提供三种分词模式:精确模式、全模式和搜索引擎模式。在生成词云图中,我们一般采用精确模式。其一般用法为:
lst=jieba.lcut(txt)
txt代表要分词的文本。有别于更常用的jieba.cut函数返回的是迭代器,jieba.lcut函数返回分词结果的列表。
需要特别注意的是,待分词的文本建议为UTF-8编码格式,GBK编码格式文本可能产生无法预料的错误。
如需了解更多,可参考jieba库官方文档
安装方法
可以在cmd中使用pip指令进行安装。安装语句为:
pip isntall jieba
wordcloud库
wordcloud库是Python中用于生成词云图的第三方库。其本身支持对英文的分词,但对中文分词效果较差,故需结合jieba库使用。
一般用法
我们使用wordcloud库中的WordCloud对象
w=wordcloud.WordCloud()
来实例化一个词云
之后使用generate方法将分词后的文本导入词云中
w.genetare(txt)
最后通过to_file方法将词云图导出为图片
w.to_file(path+pic_name)
如需了解更多,可参考官方文档
安装方法
第一种方法
可以采用pip指令安装
pip install wordcloud
但考虑到国内的网络因素,可能会安装失败。
第二种方法
可以下载编译好的.whl文件进行本地安装
这里推荐一个由UCI的lfd实验室汇总的网页,里面整理了众多经过编译的python第三方库包可供下载。
在其中下载适合python版本的wordcloud包后,进入cmd窗口。首先cd 至包所在的路径,然后使用pip指令安装该文件。例:
cd c://users//admin//downloads
pip install wordcloud-1.5.0-cp37-cp37m-win_amd64.whl
三. 生成词云图
这里直接给出源码,再逐一解释其用法。
import os
import jieba
from wordcloud import WordCloud
from scipy.misc import imread
file_dir=r"C:\Users\xmy\Documents\Code\Data\wordcloud"
file_name="党校资料.txt"
pic_dir=r"C:\Users\xmy\Pictures\Python"
pic_name="chinamap.jpg"
path=os.path.join(file_dir,file_name)
to_path=os.path.join(pic_dir,os.path.basename(file_name).split(".")[0]+".png")
with open(path,"r",encoding="utf-8") as f:
t=f.read()
ls=jieba.lcut(t)
txt=" ".join(ls)
mask=imread(os.path.join(pic_dir,pic_name))
w=WordCloud(font_path="msyh.ttc",mask=mask)
w.generate(txt)
w.to_file(to_path)
初看可能会觉得代码很长,但很多与os相关的代码都是不必要的,或者说仅为了修饰代码整洁性和修改文件名称而使用的。
核心代码从open部分开始:
- 使用with open语句打开.txt文件,再利用read()读取全部文本。
需要提醒的是,请特别注意编码格式。 - 调用jieba.lcut函数对文本进行分词并返回列表
- " ".join(ls)将分词得到的列表用空格分隔开生成一段新文本
- *imread用于读取图片(如不需要自定义图形,可忽略该语句)
- w.WordCloud实例化词云(如需自定义图形,将mask参数选为imread读取的图片)
需要注意,如果是生成中文词云,需指定中文字体格式,否则无法显示中文。我们使用的是系统自带的微软雅黑字体,即“msyh.ttc”。 - w.generate(txt)将分词后的文本导入词云中
w.to_file()将词云图导出为本地图片
这样,就完成了代码部分。
运行后,稍等片刻,即会在本地生成词云图片。
使用的底图是:
四. 尾巴
先讲讲踩过的坑:
- 最初确认wordcloud库安装完成后,运行代码总报
ImportError:cannot import name ‘WordCloud’
解决方案很简单,代码文件名不能是wordcloud,和库名一致导致代码无法正确运行。
- 读取的文档必须是txt格式的,最好是utf-8编码的,否则容易出错。
Ending
这篇教程只是生成简单的词云图,实现更多丰富功能可以参考wordcloud库的参考文档。祝大家Happy Coding!