一. 准备工作
(1).安装jieba库,可以直接使用pip下载安装
pip install jieba
(2).准备好小说的txt文件,自行百度下载(*^▽^*)
二.编码工作
(1).导入jieba包,读取txt文件,这里要注意可能下载的txt文件不是utf-8编码的,这里open的时候需要加上该txt的编码,这样应该就可以打开txt文件了,如果还有编码转换的bug,在open函数中加一个errors="ignore",这样一定就能正常读取文件了。
(2).jieba分词&简单过滤
jieba.lcut分词读取到的文件,得到一个列表,然后进行一个简单过滤,我们假设人物名字都是2到4个汉字(不考虑特殊情况),然后《天龙八部》中“萧峰”和“乔峰”实指同一人。把循环中的人物和出现次数都放到一个字典(人物名作key,出现次数作valve)里,字典的get方法是根据key值获取value,如果没有查到,就返回默认值。
(3).排序&输出
将上一步获取到的字典转换成列表,方便排序。上面定义了一个常用的非人名的字词,输出的时候判断是不是常用的非人名的字词,这里也简单的过滤了下。拿到这些数据后,就可以进行下一步的处理了,存文件或存数据库那就是后话了,这里就不再演示了。
三.完整代码&结果
(1).完整代码
import jieba txt = open("天龙八部精校版.txt", "r", encoding="gb2312", errors="ignore").read() # 常用的非人名的字词 no_name = ["说道", "出来", "如何", "跟着", "之后", "当真", "说话", "这里", "爹爹", "可是", "起来", "你们", "身上","两人","还是","这些","不会","自己","内力","怎么","南海","身子","脸上","原来","这么","弟子","众人", "这个","便是","倘若","突然","只是","不敢","他们","我们","见到","声音","心想","如此","只见","之中","不能","一个", "知道", "什么", "武功", "不是", "甚么", "一声", "咱们", "师父", "心中", "不知"] res = jieba.lcut(txt) count = {} # 定义存储人物和出现次数字典 for word in res: if len(word) == 1 or len(word) > 4: continue elif word == "萧峰": new_word = "乔峰" else: new_word = word count[new_word] = count.get(new_word, 0) + 1 # 字典转换为列表 names = list(count.items()) # 列表排序,根据出场次数排序 names.sort(key=lambda x: x[1], reverse=True) # 输出 for key, item in names: if key not in no_name: print("%s---->%s" % (key, item))
(2).结果分析
由图可知,乔峰,段誉,虚竹三兄弟是天龙八部的猪脚,而乔峰戏份最多,乔峰才是最大的猪脚。而事实上,《天龙八部》剧中也是以乔峰的身世之谜贯穿全剧的,程序诚不欺我,(#^.^#)!
PS:这里也放几张别的小说里的人物出场次数,处理方式都是一样的。
《倚天屠龙记》
1
《射雕英雄传》