将此题分为两个步骤:

找出高频词汇

首先我们需要使用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. 使用方差阈值过滤(VarianceThreshold)进行特征选择、删除方差低于某一阈值的特征、详解及实战
  2. iOS Automated Tests with UIAutomation
  3. 深入浅出 Javascript API(五)--Query Find 查询
  4. awk rand函数问题
  5. linux 引导程序修复工具,linux 引导修复工具
  6. 【2018.4.21】模拟赛之二-ssl2403 蜡烛【贪心】
  7. 22 省遭受重大洪灾,机器学习未来能预报么?
  8. Centos7常用命令[网络]
  9. MATLAB 添加文件路径
  10. [iOS] 响应式编程开发-ReactiveCocoa(二)
  11. go mysql stmt exec_Go语言操作MySQL
  12. vba mysql_VBA连接Mysql数据库
  13. 模2除法介绍(CRC校验码计算)
  14. Newton牛顿法(二)| 收敛性和收敛速度 +初值的选取方法
  15. python-类(class)是什么?怎么用?
  16. 标志Logo设计的起源和艺术特点
  17. 现代控制理论基础总结
  18. 学习学习学习学习学习学习
  19. java区分输入的字母是元音字母还是辅音字母
  20. 完美解决 unbuntu中vim编辑完成后 按ESC毫无反映

热门文章

  1. PUK 码为8位数字
  2. 大数据分析——点“数”成金
  3. 除了编程语言本身,你如果还懂这 7 点,绝对可以在北上深杭拿到 15k
  4. 高一计算机专业班主任工作总结,高中计算机专业班主任工作总结.doc
  5. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式...
  6. 麻省理工学院智能探索计划,旨在探索人类智力基础
  7. Linux必会100个命令(十六)ping、nc
  8. php 提取文字,如何使用PHP从word文档中提取文本内容?
  9. DNA 4. SCI 文章中基因组的突变信号(maftools)
  10. 人工智能 3.确定性推理方法