1 实验内容

在进行了上一个实验《利用Python定制个性化词云》之后,掌握了初步的词云制作。出于对三国历史的喜爱,因此想制作一个关于《三国演义》版的词云,以一个新的角度去看这段历史。但由于本人掌握的数据分析技术有限,直接处理原版的《三国演义》难度很大(因为原版中很多简称,例如“公”、只称名不称姓等),因此文本内容使用的是《白话三国》(电子赵括 著)的TXT版本(讲真~找个可以分析的白话版TXT文档真的不容易)。

2 前期准备

实验环境:python 3.6

涉及扩展包:re、pandas、pickle、codecs、jieba、wordcloud (这里需要安装jieba、wordcloud,此处采用了pip安装)

jieba:

pip install jieba

wordcloud:

pip install wordcloud

古代很多人都有自己的“字号”,如诸葛亮,字孔明。例如在白话文中大部分称诸葛亮,但仍有部分称作孔明。因此需要我们找到这些对应关系,并进行替换。这里使用的是百度知道上一个较为完整的回答,并且格式较为标准,便于处理。

问题及回答的地址:https://zhidao.baidu.com/question/192918537.html,部分数据如下,

将内容复制到TXT文档中,并以utf-8格式进行保存(因为之后的处理过程中是默认以utf-8的方式进行的)。要想进行替换,我们需要将上述数据处理为字典格式。观察数据格式,需要做以下处理:

1、去掉多余的空格;

2、通过split拆分数据,并作成字典格式;

3、用生成的字典替换原文中的字号,并保存替换后的文本;

4、将姓名及词性以字典的形式保存(该文件用于之后的词云生成)。

代码如下:

import re
import pandas as pd
import picklewith open('F:/sanguo/namelist.txt','r',encoding='utf-8') as f:result = f.readline()  f.close()#去掉多余的空格
result=re.sub(r'\s+', '', result)     #以括号切分数据 ,把姓名和字号整理为字典格式
a=result.split(")")
del a[len(a)-1]
dict_ming_zi=pd.DataFrame(columns=['ming','zi'])
j=0
for i in a:dict_ming_zi.loc[j,'ming']=str(i).split("(")[0]dict_ming_zi.loc[j,'zi']=str(i).split("(")[1]j+=1#替换原文中的字号,并保存替换文本
with open('F:/sanguo/三国演义白话本.txt','r',encoding='utf-8') as f1:original_text = f1.read()f1.close()
for i in range(len(dict_ming_zi)):original_text=original_text.replace(dict_ming_zi.iloc[i,1],dict_ming_zi.iloc[i,0])
with open('F:/sanguo/三国演义替换文.txt','w',encoding='utf-8') as f2:    f2.write(original_text)f2.close()  #将姓名及词性以字典的形式保存(该文件用于之后的词云生成)
list_ming=[]
list_ming= dict_ming_zi['ming']
name_dict={}
for i in list_ming:name_dict[i]='nr'
with open('F:/sanguo/dict_name.txt','wb') as f3:pickle.dump(name_dict,f3)f3.close()

通过以上操作,我们得到了三国演义替换文本.txt和dict_name.txt两个文档。

3 词云的生成

关于词云的生成,在上一个实验《利用Python定制个性化词云》中已经做出了较为详细的介绍,此处不再赘述。此处的背景用的是三国鼎立时期的势力划分图。

经美图秀秀处理后的结果:

接下来是完整的词云生成代码:

import codecs
import jieba
import pickle
import numpy as np
from scipy.misc import imread
from wordcloud import WordCloud
import matplotlib.pyplot as plt#生产词云文本
def seg_sentence(file_name):  file=open('f:/sanguo/dict_name.txt','rb')           #读取dict_name文档,用于jieba的自定义词典和关键词的筛选      dict_name = pickle.load(file)jieba.load_userdict(dict_name)   with codecs.open(file_name,encoding='utf-8') as f:  #读取文档original_text = f.read()                                  wordList = jieba.cut(original_text)                 #全文分词,结果存储在wordlist中print('---全文分词完成---')                                      allow_pos = ('nr',)                                 #设置筛选参数为”nr“,名字tags = jieba.analyse.extract_tags(original_text, topK=1000, withWeight=False, allowPOS=allow_pos)  #从原文文本original_text中,筛选词性为”nr“的前30个词汇作为关键词print('---关键词筛选完成---')stags=" ".join(tags)                                #将关键词通过空格连接为字符串stagsf2=open(u"stags.txt","w+")                          #将获得的关键词存储到stags.txt文件中(供调试查看)f2.write(stags)f2.write("\n")f2.close()    count=0    outstr = ''                                         for word in wordList:                               #遍历全文分词结果wordlistif word  in stags:                              #与关键词字符串比较,只保留关键词if word in dict_name:                       #在关键词中只保留人名if len(word) > 1:                       # 去掉长度小于1的词  if word != '\t':  outstr += word  outstr += " " count=count+1 print ("---词云文本完成---")                                    return outstr                                       #将保留下的词输出到字符串outstr中,通过空格连接为字符串                     # 绘制词云
def draw_wordcloud(file_name):outstr=seg_sentence(file_name)                       #调用分词函数,生成只包含关键词的分词文本outstr,字符串格式                            f2=open(u"分词后.txt","w+")                          #将outstr保存到 分词后.txt文件中 (供调试查看)f2.write(outstr)f2.write("\n")f2.close()                                           font='C:\Windows\Fonts\STXINGKA.TTF'                 #选择字体路径color_mask = imread("F:\sanguo\map_副本.jpg")           #读取模板图片,这里使用了一张五角星图片#设置词云参数,字体,模板,背景白色,最大词量1000个,最大字体尺寸60cloud = WordCloud(font_path=font,background_color='white',mask=color_mask,max_words=1000,min_font_size=1,max_font_size=60,scale=2,height=500,width=500,relative_scaling=1)word_cloud = cloud.generate(outstr)                  # 产生词云数据 word_cloudprint ("---词云完成---")word_cloud.to_file("w_cloud.jpg")                    #词云保存为图片w_cloud.jpgprint ("---词云保存成功---")return word_cloudfile_name = 'F:\sanguo\三国演义替换文.txt'              #设置小说文本所在路径word_cloud=draw_wordcloud(file_name)                   #调用词云生成函数,生成词云word_cloud,并保存成为图片
plt.figure(figsize=(20,20))
plt.imshow(word_cloud)
plt.axis("off")
plt.show()                                             #显示词云图

生成的词云是这样的:

此时词云参数relative_scaling设置为1,反应的是词频与词大小的关联度为1,只能说曹操的出场率很高呀,刘皇叔、诸葛亮等众人只能算配角了。(ps.词的位置是随机的)

这样可以准确的反映词频,词频高的关键词字体会比较大。但是这样的词云看起来并不美观,因此我们将relative_scaling改为了0.5,此时生成的词云如下:

这样看上去,比刚才好多了。

至此此次分析实验结束,可能还有小伙伴感觉不是很美观,这个可以根据自己的喜好调整背景图和词云参数。此次是在上篇文章的基础上完成的,因此介绍的基础内容比较少,只是讲了分析处理流程。源码、文档及图片资源已经上传,如需下载请点击:python词云进阶——三国版

欢迎大家交流学习,QQ:285899326。

python词云进阶——三国版相关推荐

  1. 词云进阶:神奇的stylecloud

    词云进阶:神奇的stylecloud stylecloud介绍 安装stylecloud 简单的stylecloud 自定义调色板 stylecloud常用参数 自定义文字颜色 Stopwords 好 ...

  2. python词云安装什么库_python词云安装什么库

    python词云需要安装wordcloud库. 安装方法: 在cmd使用pip install wordcloud命令即可安装. wordcloud库把词云当作一个WordCloud对象:wordcl ...

  3. python词云_python词云

    python词云[编辑] 概述 python词云是一种构建词云的方法,利用通用的编程语言Python来做词云,虽然不如专用工具便捷,但是适用范围很广,满足了不同人对词云的个性化需求. 一.Python ...

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

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

  5. python词云下载什么_python词云安装什么库

    python词云需要安装wordcloud库. 安装方法: 在cmd使用pip install wordcloud命令即可安装. wordcloud库把词云当作一个WordCloud对象:wordcl ...

  6. 建议收藏chatGPT说的Python词云教程

    写在前面 这个是当下最流行最时髦的AI神器chatGPT和我一起合作写的一篇通用技术文章,请读者笑纳! Python词云教程 介绍 Python是一种流行的编程语言,它可以用于许多不同的应用程序,包括 ...

  7. python词云库的安装和使用

    python词云库的安装和使用 文章目录 python词云库的安装和使用 词云库的安装 词云库的使用 词云库的安装 如果正常使用pip install wordcloud安装命令通常会报错 error ...

  8. 李严冰:云是“三国版”计算模式的演变

    本文讲的是李严冰:云是"三国版"计算模式的演变,[编者按]随着虚拟化技术和互联网的发展,自2007年以来,云计算的概念逐渐火热起来,成为人们关注的焦点.节能.灵活.高效--这些IT ...

  9. 【小盐巴学习笔记】—美团吃饭哪家强?Python词云分析告诉你

    [小盐巴学习笔记]-美团吃饭哪家强?Python词云分析告诉你 效果图 前言 一.爬虫分析 1.分析网址 2.分析数据 二.完整代码 1.爬取美团牛排店评论 2.绘制词云图 3.词云分析 总结 效果图 ...

最新文章

  1. C语言实现一种简单的应用服务器内部数据结构的思路(三)
  2. [Snipaste]系统截图工具
  3. 1.2.2 认识各个硬件部件
  4. 课时 11:可观测性:你的应用健康吗?(莫源)
  5. 创建vue-cli项目
  6. Linux中逻辑卷的快照与还原
  7. shell之for循环的3个简单脚本
  8. Bailian2708 平衡饮食【序列处理】
  9. python中的exec()函数和eval()函数
  10. Java中JSON的解析方式
  11. 频域自适应 matlab,FDAF 频域自适应滤波器( )演示程序 Matlab; LMS算法 266万源代码下载- www.pudn.com...
  12. 安卓dj专业打碟机软件_18号免费软件集合
  13. 4家运营商、17家通信企业这样回应5G牌照发放
  14. 戴尔电脑插上耳机之后仍然外放
  15. 旋转屏幕猫狗游戏java_java-猫狗继承案例
  16. cocos creator开发攀爬类游戏
  17. 金融机构业务连续性管理
  18. c语言里函数rand()和srand()的用法
  19. 图南淘宝开网店运营培训电商课程之学历分析
  20. python绘制太阳系模型_太阳系模型Python列表操作困难

热门文章

  1. 等离子与液晶电视:谁是未来彩电主角?
  2. MAC 搭建vue开发环境,配置环境变量
  3. Java代码混淆(把类和变量混淆成诸如abcdefg的样子)
  4. 计算机基础测试题及答案
  5. TVS二极管,您不知道的都在这里
  6. axios中文官方文档
  7. Redhat7.3安装步骤
  8. keilmdk为什么不会自动提示代码
  9. 库仑微压分析仪测定水含量两种方法的差异
  10. python+pyautogui—PC端自动化(二)键盘鼠标及对话框操作