将此题分为两个步骤:

找出高频词汇

首先我们需要使用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的中文词组,并用图表展示。相关推荐

  1. 【Python爬虫实战】3.A股上市公司年报关键词词频分析

    在前面两篇文章中,我们已经成功用Python爬取到了A股上市公司年报并转换为txt格式,接下来就是对数据的处理,我们以经管类常用的文本挖掘方式为例,编写从多个文本文件中提取关键词并统计词频,然后将结果 ...

  2. 我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练 为了出国交流,跟乒乓球相关的人员都要学习英语 请用所有知识分析: 这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现

    文章目录 分析 定义学英语接口 定义抽象人类 定义抽象教练类 定义抽象运动员类 定义具体类乒乓球运动员类 定义具体类篮球运动员类 定义具体类乒乓球教练类 定义具体类篮球教练类 定义测试类 运行结果 分 ...

  3. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  4. 类的继承python事例_【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸...

    作者:白宁超 2016年10月10日22:36:57 摘要:继一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简 ...

  5. 计算机科学与技术检修建筑学,2020年东南大学最好专业排名:43个专业上榜,建筑学居全国前5%!...

    对于很多江苏省外的考生和家长而言,对东南大学都不甚了解,甚至是不知道东南大学位于什么城市.作为一所低调的大学,但它的实力却是不低调的.今天我们就来了解一下东南大学. 东南大学,位于江苏省南京市,是我国 ...

  6. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...

  7. Python后端相关技术/工具栈

    Python后端相关技术/工具栈 转载http://python.jobbole.com/83486/ 整理下目前涉及到的python的技术栈和工具栈(用过或了解的, 其他的后续用到再补充) 编辑器 ...

  8. Python GUI编程-了解相关技术[整理]

    Python GUI编程-了解相关技术[整理] 我们可以看到,其实python进行GUI开发并没有自身的相关库,而是借用第三方库进行开发.tkinter是tcl/tk相关,pyGTK是Gtk相关,wx ...

  9. 【第2期免费送书】 10本机器学习与Python相关书籍等你来领!经典之作,绝对领你心动......

    微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 AI系列公开课,限时免费 [强烈推荐] AI 系列免费公开课.. ...

最新文章

  1. c++中的string类
  2. (4.12)全面解析-SQL事务+隔离级别+阻塞+死锁
  3. 动态规划——买卖股票的最优时机含手续费(Leetcode 714)
  4. Python办公自动化(八)|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转
  5. SDK Manager配置
  6. 听说Unscrambler HSI是个很牛的光谱分析软件?
  7. 如何在PlayStation 4上查看或清除浏览历史记录
  8. 如何压缩PDF文件、图片转PDF、PDF合并拆分!!!!
  9. 计算机单元格数值不保留小数,excel如何用公式让单元格数值保留两位小数
  10. 中国移动彩信业务割接
  11. 母牛的故事【HDOJ2018】
  12. 初学者如何选择适合自己的服务器
  13. CanMV K210 AI开发板全网首发,项目代码完全开源,千套开发板限时优惠!
  14. U盘保存文件未完成时拔掉U盘导致数据丢失的解决办法
  15. 基于Python实现的PageRank算法
  16. HTB打靶(Active Directory 101 Mantis)
  17. ios挂载 yum源配置
  18. Apache Flink写入Clickhouse报错 code: 1002, ip:8123 failed to respond
  19. java基础之自定义异常_繁星漫天_新浪博客
  20. ENVI中使用水体指数法NDWI提取水体

热门文章

  1. [附源码]Python计算机毕业设计SSM流浪猫狗救助站(程序+LW)
  2. 全面深改直面民生“硬骨头” 这些领域获得感满满
  3. C++课程设计-失物招领系统
  4. ElementUI引入自定义图标
  5. DedeCMS-Dede伪原创自动采集发布
  6. 卓有成效的团队建设经验与见解 Team Leader你会带团队吗?
  7. 自动驾驶系统入门(一) - 环境感知
  8. 基于MATLAB的人脸考勤识别系统
  9. 关于Mybatis的错误Statement returned more than one row, where no more than one was expected
  10. 点击文本框弹出热门标签