上一篇博客用Python去分析《天龙八部》中谁是真正的猪脚说到用jieba库去分析小说中各个人物的出场次数,现在做一下进阶,利用分词后的结果去构建该小说的词云图。
一. 准备工作
下载安装wordcloud库
(1)pip安装
pip install wordcloud
如果pip安装失败,可以采用第二种安装方式
(2)下载whl文件安装
去这个网站Pyhton扩展库下载wordcloud的whl文件(ctrl+F搜索“wordcloud”),记得要下载对应安装python版本的。
然后还是通过pip命令安装,后面那个路径是你下载后的whl文件所在路径
二. 代码分析
(1).先上完整代码
import matplotlib as mpl mpl.use("Agg") import matplotlib.pyplot as plt # 数学绘图库 import jieba # 分词库 from wordcloud import WordCloud # 词云库 filename = "天龙八部精校版.txt" txt = open(filename, "r", encoding="gb2312", errors="ignore").read() words = jieba.cut(txt) result = "/".join(words) # 只有用"/"或" "等分割开的,才能用于构建词云图 # 常用的非人名的字词 no_name = ["说道", "出来", "如何", "跟着", "之后", "当真", "说话", "这里", "爹爹", "可是", "起来", "你们", "身上","两人","还是","这些","不会","自己","内力","怎么","南海","身子","脸上","原来","这么","弟子","众人", "这个","便是","倘若","突然","只是","不敢","他们","我们","见到","声音","心想","如此","只见","之中","不能","一个", "知道", "什么", "武功", "不是", "甚么", "一声", "咱们", "师父", "心中", "不知"] # wordcloud配置 wc = WordCloud( font_path="C:\Windows\Fonts\msyhbd.ttc", # 设置字体 background_color='white', # 背景颜色 width=800, height=600, # 设置宽高 max_font_size=70, min_font_size=10, # 字体最大/最小值 stopwords=no_name, # 设置停用词,不在词云图中显示 max_words=2000, # 设置最多显示的字数 mode='RGBA' ) wc.generate(result) # 保存图片的名字 img_name = filename[:filename.rfind("."):] + "_词云图" + ".png" # 生成图片 wc.to_file(img_name) # 4、显示图片 plt.figure("词云图") # 指定所绘图名称 plt.imshow(wc) # 以图片的形式显示词云 plt.axis("off") # 关闭图像坐标系 plt.show()
(2)代码分析
a)在导包的时候,容易出错,就是下图这个报错。
百度研究了很久,找到了解决办法,需要在导matplotlib.pyplot包前写上这两句import matplotlib as mpl mpl.use("Agg"),但是具体原因还不清楚。
import matplotlib as mpl mpl.use("Agg") import matplotlib.pyplot as plt # 数学绘图库
b)wordcloud配置&生成
# wordcloud配置 wc = WordCloud( font_path="C:\Windows\Fonts\msyhbd.ttc", #设置字体,不设置的话,无法显示中文,这里调用windows系统内的字体文件 background_color='white', # 背景颜色 width=800, height=600, # 设置宽高 max_font_size=70, min_font_size=10, # 字体最大/最小值 stopwords=no_name, # 设置停用词,不在词云图中显示 max_words=2000, # 设置最多显示的字数 mode='RGBA' ) wc.generate(result) # 保存图片的名字 img_name = filename[:filename.rfind("."):] + "_词云图" + ".png" # 生成图片 wc.to_file(img_name)
c)效果图
三.进阶篇——设置自定义背景图片
直接上代码
import matplotlib as mpl mpl.use("Agg") import matplotlib.pyplot as plt # 数学绘图库 from PIL import Image import numpy as np import jieba # 分词库 from wordcloud import WordCloud, ImageColorGenerator # 词云库 filename = "天龙八部精校版.txt" txt = open(filename, "r", encoding="gb2312", errors="ignore").read() words = jieba.cut(txt) result = "/".join(words) # 只有用"/"或" "等分割开的,才能用于构建词云图 # 常用的非人名的字词 no_name = ["说道", "出来", "如何", "跟着", "之后", "当真", "说话", "这里", "爹爹", "可是", "起来", "你们", "身上","两人","还是","这些","不会","自己","内力","怎么","南海","身子","脸上","原来","这么","弟子","众人", "这个","便是","倘若","突然","只是","不敢","他们","我们","见到","声音","心想","如此","只见","之中","不能","一个", "知道", "什么", "武功", "不是", "甚么", "一声", "咱们", "师父", "心中", "不知"] # 初始化自定义背景图片 bg_img = "img6.jpg" image = Image.open(bg_img) graph = np.array(image) # wordcloud配置 wc = WordCloud( font_path="C:\Windows\Fonts\msyhbd.ttc", # 设置字体 background_color='white', # 背景颜色 width=image.size[0], # 设置宽,我这里设置和背景图片宽一样 height=image.size[1], # 设置高,我这里设置和背景图片高一样 max_font_size=70, min_font_size=10, # 字体最大/最小值 stopwords=no_name, # 设置停用词,不在词云图中显示 max_words=2000, # 设置最大显示的字数 mode='RGBA' ) wc.generate(result) # 绘制文字的颜色以背景图颜色为参考 image_color = ImageColorGenerator(graph) # 从背景图片生成颜色值 wc.recolor(color_func=image_color) # 保存图片的名字 img_name = filename[:filename.rfind("."):] + "_词云图" + ".png" # 生成图片 wc.to_file(img_name) # 4、显示图片 plt.figure("词云图") # 指定所绘图名称 plt.imshow(wc) # 以图片的形式显示词云 plt.axis("off") # 关闭图像坐标系 plt.show()
与无背景图片相比,需要导入图片处理的包。
其中,
# 绘制文字的颜色以背景图颜色为参考 image_color = ImageColorGenerator(graph) # 从背景图片生成颜色值 wc.recolor(color_func=image_color)
这两行代码意思是从背景图片中提取颜色值作为词云图的颜色值,所以想要词云图有有些特殊图案的话,需要准备相应的背景图。
我这里背景图片:
效果图:
怎么样,是不是很神奇?