1引言
2前提知识
2.1jieba库
2.2文件打开和读写
3算法设计
3.1概要设计
3.2初步代码及修改思路
3.3代码的改进
【摘要】本文详细介绍了利用Python语言对中国的四大名著之三国演义中的人物出场次数进行了词频统计,根据得出的结果分析出作者罗贯中的写作风格和对某位三国时期历史人物较为宠爱。
【关键词】jieba库; 词频统计;
1 引言
随着计算机技术的不断发展,我们可以利用计算机的运算高速率性能进行一系列的计算,作为很高效的Python程序语言,凭借着含有很多第三方库,简单和开源的特点,Python语言成为很多学习编程的同学的首选,我们就利用Python可以对中文进行分词的第三方库——jieba库,对中国四大名著之《三国演义》进行词频统计,分析出出场次数前10名的历史人物。我们需要提前了解一下Python的一些简单的知识,如jieba库的使用,如何在代码中打开文件,关于字典类型的相关知识,列表类型的知识,print方法的格式化等
2前提知识
2.1 jieba库
在电脑的Windows键中搜索cmd(command),打开cmd后进行安装。Pip是第三方库最主要的安装方式,可以安装 超过95%以上的第三方库,也可以自定义安装第三方库。使用pip安装第三方库需要连接网络安装jieba库的命令如下 pip install jieba。如果要运行带有jieba库的代码时,必须安装jieba库,否则无法运行。
2.2 文件打开和读写
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。读文件要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
f = open(’/Users/michael/test.txt’, ‘r’)
标示符’r’表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误和详细的信息告诉你文件不存在。
3 算法设计
3.1 概要设计
首先我们通过浏览器下载《三国演义》,保存在电脑中,名称为 三国演义.txt,通过command(cmd),下载安装Python的第三方库jieba,利用jieba的分词功能对其产生的词进行词频统计得出结果。
获取三国演义的文章,并且将文章中的出现最多的词进行词频统计,但是会有一些问题,有些词就是一个字,但是不能将文章的每个字都进行词频统计,还有逗号冒号等标点符号,所以要对这些进行干扰处理。
3.2 初步代码及修改思路
import jieba
txt=open(“三国演义.txt”,“r”).read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
else:
counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key = lambda x:x[1],reverse = True)
print(“英雄 出场次数”)
for i in range(10):
word,count = items[i]
print("{} {}".format(word,count))
输出结果:
英雄 出场次数
曹操 934
孔明 830
将军 760
却说 647
玄德 568
关公 509
丞相 488
二人 465
不可 435
荆州 420
由于输出的结果可以看出其实结果并不是都是英雄的名字,所以我们要对输出的结果进行处理,对不是名字的删除如:将军,却说等。对名字重复的进行合并如诸葛亮,孔明曰,孔明等。
3.3 代码的改进
import jieba
txt = open(“三国演义.txt”,“r”).read()
excludes = {‘将军’,‘却说’,‘荆州’,‘二人’,‘不可’,‘不能’,‘如此’,‘商议’,‘如何’,‘主公’,‘军士’,‘左右’,
‘军马’,‘引兵’,‘次日’,‘大喜’,‘天下’,‘东吴’,‘于是’,‘今日’,‘不敢’,‘魏兵’,‘陛下’,‘人马’,‘一人’,‘都督’}
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word ==“诸葛亮” or word == “孔明曰”:
rword = “孔明”
elif word ==“关公” or word ==“云长”:
rword = “关羽”
elif word ==“玄德” or word ==“玄德曰”:
rword = “刘备”
elif word ==“孟德” or word == “丞相”:
rword =“曹操”
else:
rword = word
counts[rword] = counts.get(rword,0) + 1
for word in excludes:
del counts[word]
items = list(counts.items())
items.sort(key = lambda x:x[1],reverse = True)
print(“英雄 出场次数”)
for i in range(10):
word,count = items[i]
print("{} {}".format(word,count))
输出结果:
英雄 出场次数
曹操 1429
孔明 1372
刘备 1224
关羽 779
张飞 349
吕布 300
孙权 264
赵云 256
司马懿 221
周瑜 217
从输出的结果看出已经得到我们想要的三国演义中出现英雄次数进行统计,分析出作者罗贯中对曹操,诸葛亮以及刘关张三兄弟有特殊的喜爱。
三国演义小说文本找寻位置:https://python123.io/resources/pye/threekingdoms.txt
来源:https://blog.csdn.net/sdau_shao/article/details/98882604