使用Python相关技术实现对一本中文小说(自选)进行词频分析,字数不低于10万字,显示小说中出现率前50的中文词组,并用图表展示。
将此题分为两个步骤:
找出高频词汇
首先我们需要使用python中的jieba库;目前最好的 Python 中文分词组件,它主要有以下 3 种特性:
- 支持 3 种分词模式:精确模式、全模式、搜索引擎模式
- 支持繁体分词
- 支持自定义词典
具体案例:https://www.jianshu.com/p/883c2171cdb5
安装:
使用管理员身份打开CMD:输入pip install jieba
下载成功后打开pyCharm->File->Settings->Project Interpreter,如果Package中没有jieba,点击右边的“+”号添加即可。
读取文本文件,我们在第十章学到过:with open(file) as name:** = name.read(),这里同样使用。不过我们需要加上编码格式encoding=“utf-8”。
with open("D:\\Python\\projects\\python_01\\files\\JourneytotheWest.txt", encoding="gb18030") as file:contents = file.read()
接着我们使用jieba中的方法lcut对文本进行精确分词:导入jieba库
import jieba
# 使用jieba中的方法lcut对文本进行精确分词
words = jieba.lcut(contents)
再自定义一个存储词语及其出现次数的容器,最后遍历。需要注意的是我们要排除单个字。
# 存储词语及其出现的次数
counts = {}
for word in words:# 单个字排除if len(word) == 1:continueelse:counts[word] = counts.get(word, 0) + 1
将键值对转换成list列表,且按照降序的排序顺序。
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
items.sort(key=lambda x: x[1], reverse=True)这个语句中的sort函数用于对原列表就行排序,如果指定参数,则使用比较函数指定的比较函数。reverse=True是降序的意思,反之False为升序。这里的难点是key=lambda x: x[1],这个lambda是一个隐函数,后面的x: x可以自定义两个一样的字母,[0]按照第一维排序,[1]按照第二维排序,[2]按照第三维排序。我们这里排序是根据该词语出现的次数进行排序,我们输出的结果格式是(word,count),count就是次数。
打印输出词频为前50的词语:
for i in range(50):word, count = items[i]txt = "{0:<5}{1:>5}".format(word, count)print(txt)
txt = ("{0:<5}{1:>5}".format(word, count))这个是format方法的格式控制。比如:"{0}{1}".format(name,jack),这里大括号里的数字表示的是位置,也就是0对应的name,1对应的jack。同理,题中0对应的是word,1对应的是count。其次,冒号是引导符,后面跟的是格式控制方法。<表示左对齐,>表示右对齐,数字表示宽度。同理,题中<10表示左对齐,并占10个位置,>5表示右对齐,占5个位置。运行后报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa1 in position 0——这是Python 编码中编码解码的问题,我这个错误就是‘utf-8’不能解码位置0的那个字节(0xa1),也就是这个字节超出了utf-8的表示范围了,我们这里将前面打开文本文件语句中的encoding="utf-8"换成encoding="gb18030"即可。
结果:
最后就是绘图。我们结合第十七章练习完成。练习中是从一个json文件中获取,那么我们可不可以直接使用上一步生成的数据来生成图表呢?练习中我们从json文件中通过遍历取的的值作为图表的参数,这里我们直接省去了json文件遍历,直接使用数据作为图表的参数。
定义储存词汇和次数的空数组,并且在将具体的数据append
到空数组中:
names, dicts = [], []
for i in range(50):word, count = items[i]txt = "{0:<5}{1:>5}".format(word, count)# print(txt)names.append(word)dicts.append(count)
可视化
my_style = LS('#333366', base_style=LCS)chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)chart.title = '《西游记》文章中出现率前50的中文词组(2字)'chart.x_labels = nameschart.add('', dicts)
最后在生成图表(svg):
chart.render_to_file('111.svg')
全部代码:
import jieba
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LSwith open("D:\\Python\\projects\\python_01\\files\\JourneytotheWest.txt", encoding="gb18030") as file:contents = file.read()
# 使用jieba中的方法lcut对文本进行精确分词
words = jieba.lcut(contents)
# 存储词语及其出现的次数
counts = {}
for word in words:# 单个字排除if len(word) == 1:continueelse:counts[word] = counts.get(word, 0) + 1# 将键值对转换成list列表
items = list(counts.items())
# reverse=True降序
items.sort(key=lambda x: x[1], reverse=True)
names, dicts = [], []
for i in range(50):word, count = items[i]txt = "{0:<5}{1:>5}".format(word, count)# print(txt)names.append(word)dicts.append(count)# 可视化my_style = LS('#333366', base_style=LCS)chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)chart.title = '《西游记》文章中出现率前50的中文词组(2字)'chart.x_labels = nameschart.add('', dicts)
chart.render_to_file('111.svg')
PS:上文提到的”第十章“”第十七章“均来自图书《Python编程:从入门到实践》。
西游记.txt获取:https://gitee.com/desiy/python_01/blob/master/files/JourneytotheWest.txt
使用Python相关技术实现对一本中文小说(自选)进行词频分析,字数不低于10万字,显示小说中出现率前50的中文词组,并用图表展示。相关推荐
- 【Python爬虫实战】3.A股上市公司年报关键词词频分析
在前面两篇文章中,我们已经成功用Python爬取到了A股上市公司年报并转换为txt格式,接下来就是对数据的处理,我们以经管类常用的文本挖掘方式为例,编写从多个文本文件中提取关键词并统计词频,然后将结果 ...
- 我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练 为了出国交流,跟乒乓球相关的人员都要学习英语 请用所有知识分析: 这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现
文章目录 分析 定义学英语接口 定义抽象人类 定义抽象教练类 定义抽象运动员类 定义具体类乒乓球运动员类 定义具体类篮球运动员类 定义具体类乒乓球教练类 定义具体类篮球教练类 定义测试类 运行结果 分 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- 类的继承python事例_【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸...
作者:白宁超 2016年10月10日22:36:57 摘要:继一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简 ...
- 计算机科学与技术检修建筑学,2020年东南大学最好专业排名:43个专业上榜,建筑学居全国前5%!...
对于很多江苏省外的考生和家长而言,对东南大学都不甚了解,甚至是不知道东南大学位于什么城市.作为一所低调的大学,但它的实力却是不低调的.今天我们就来了解一下东南大学. 东南大学,位于江苏省南京市,是我国 ...
- 解决java web中safari浏览器下载后文件中文乱码问题
解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...
- Python后端相关技术/工具栈
Python后端相关技术/工具栈 转载http://python.jobbole.com/83486/ 整理下目前涉及到的python的技术栈和工具栈(用过或了解的, 其他的后续用到再补充) 编辑器 ...
- Python GUI编程-了解相关技术[整理]
Python GUI编程-了解相关技术[整理] 我们可以看到,其实python进行GUI开发并没有自身的相关库,而是借用第三方库进行开发.tkinter是tcl/tk相关,pyGTK是Gtk相关,wx ...
- 【第2期免费送书】 10本机器学习与Python相关书籍等你来领!经典之作,绝对领你心动......
微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 AI系列公开课,限时免费 [强烈推荐] AI 系列免费公开课.. ...
最新文章
- c++中的string类
- (4.12)全面解析-SQL事务+隔离级别+阻塞+死锁
- 动态规划——买卖股票的最优时机含手续费(Leetcode 714)
- Python办公自动化(八)|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转
- SDK Manager配置
- 听说Unscrambler HSI是个很牛的光谱分析软件?
- 如何在PlayStation 4上查看或清除浏览历史记录
- 如何压缩PDF文件、图片转PDF、PDF合并拆分!!!!
- 计算机单元格数值不保留小数,excel如何用公式让单元格数值保留两位小数
- 中国移动彩信业务割接
- 母牛的故事【HDOJ2018】
- 初学者如何选择适合自己的服务器
- CanMV K210 AI开发板全网首发,项目代码完全开源,千套开发板限时优惠!
- U盘保存文件未完成时拔掉U盘导致数据丢失的解决办法
- 基于Python实现的PageRank算法
- HTB打靶(Active Directory 101 Mantis)
- ios挂载 yum源配置
- Apache Flink写入Clickhouse报错 code: 1002, ip:8123 failed to respond
- java基础之自定义异常_繁星漫天_新浪博客
- ENVI中使用水体指数法NDWI提取水体
热门文章
- [附源码]Python计算机毕业设计SSM流浪猫狗救助站(程序+LW)
- 全面深改直面民生“硬骨头” 这些领域获得感满满
- C++课程设计-失物招领系统
- ElementUI引入自定义图标
- DedeCMS-Dede伪原创自动采集发布
- 卓有成效的团队建设经验与见解 Team Leader你会带团队吗?
- 自动驾驶系统入门(一) - 环境感知
- 基于MATLAB的人脸考勤识别系统
- 关于Mybatis的错误Statement returned more than one row, where no more than one was expected
- 点击文本框弹出热门标签