刷了一天综艺节目,看完跑男感觉一天时间又浪费了许多,不行,我爱学习。。。
1.斗宗强者,恐怖如斯
接触了jieba库感觉这个库挺有意思的,中国文化博大精深,不同的汉字可以组成不同的词语,构成不同的含义,jieba库可以把汉字组成“正常”的词语,是实话有点强。
jieba分词有三种模式,目前只学了精确模式,即调用lcut()函数进行分词,对文本精确的切分开,不存在冗余的词。
刚刚刷到段子看到《斗破苍穹》的梗,便想着用这本小说试一下,看看能分出这里面出现最多的词是什么。
from jieba import lcut
with open('斗破苍穹.txt', 'r', encoding='utf-8')as f: #读取文件
book_txt = f.read()
words_list = lcut(book_txt) #调用lcut函数分词
counts = {}
for word in words_list:
if len(word) == 1: #过滤一个字的词,一个字没什么太大意义
continue
else:
counts[word] = counts.get(word, 0) + 1
print(sorted(counts.items(), key=lambda x: x[1], reverse=True))
想尝试的可以自己下载txt文件,for循环看着很别扭,想改成解析式但是我没有成功...看结果没什么意义,作为第三人称小说,毫无疑问主角名字出现最多,嘶~~斗帝强者,恐怖如斯!我不禁倒吸了一口凉气,此子不除,后患无穷!看着这些高频词我已经脑补了一些中二场面了......
斗破里面“斗宗强者,恐怖如斯”为什么会成为梗,会不会是这句话出现的太多所以令网友们印象深刻遂拿来调侃之......?继续分析一波,添加下面的代码
li = ['斗之气', '斗者', '斗师', '大斗师', '斗灵',
'斗王', '斗皇', '斗宗', '斗尊', '斗尊巅峰',
'半圣', '斗圣', '斗帝', '恐怖', '斗宗强者', '恐怖如斯']
items_list = list(counts.items())
#解析式构造字典,把li列表的词和频率添加进去
items = {items_list[i][0]: items_list[i][1] for i in range(len(items_list)) if items_list[i][0] in li}
items = sorted(items.items(), key=lambda x: x[1], reverse=True)#排序
#print(items)
for i, j in items:
print(i, j)
果不其然,斗宗强者,恐怖如斯!(因为jieba分不出“恐怖如斯”这个词,所以定义了“恐怖”)
这波分析看不出什么所以然来,斗宗,斗皇,斗尊出现最多说明主角在这段时期的故事是整篇小说的高潮部分,这个结论没什么太大意义,正如商品受顾客欢迎程度与商品价值有关,这个结论显而易见。斗破这本小说不按套路出牌,分出的词都是些什么玩意儿,博主我心中不忿,决定分析一波经典名著----《三国演义》----的兄弟《水浒传》......
2.《水浒传》一百零八将
总所周知,《水浒传》里面有108位好汉,这个设定好呀,用来给jieba分词再适合不过了,在分析之前先准备好108好汉的数据,嗯,手打108好汉的名字,手打是不可能手打的,我王境泽就算是猝死进ICU也不可能.....
本来想爬取百度百科的,翻车了,没爬到,只好换个网页,随便点进一个网页
import requests
from lxml import etree
url = 'http://www.360doc.com/content/17/1104/13/42795007_700811421.shtml'
response = requests.get(url)#请求网页
html = etree.HTML(response.text)#整理
name_list = []
for i in range(1, 109):#遍历取出人名
name = html.xpath('//*[@id="artContent"]/div/p/text()')[i]
new_name = str(name).split()
name_list.append(new_name[-1])
print(name_list)
得到各位好汉的数据之后开始分析
from jieba import lcut
with open('水浒传.txt', 'r', encoding='utf-8')as f:
book_txt = f.read()
words_list = lcut(book_txt)
counts = {}
name_list = ['宋江', '卢俊义', '吴用', '公孙胜', '关胜', '林冲', '秦明', '呼延灼', '花荣', '柴进', '李应', '朱仝', '鲁智深', '武松', '董平', '张清', '杨志', '徐宁', '索超', '戴宗', '刘唐', '李逵', '史进', '穆弘',
'雷横', '李俊', '阮小二', '张横', '阮小五', '张顺', '阮小七', '杨雄', '石秀', '解珍', '解宝', '燕青', '朱武', '黄信', '孙立', '宣赞', '郝思文', '韩滔', '彭玘', '单廷圭', '魏定国', '萧让', '裴宣', '欧鹏',
'邓飞', '燕顺', '杨林', '凌振', '蒋敬', '吕方', '郭盛', '安道全', '皇甫端', '王英', '扈三娘', '鲍旭', '樊瑞', '孔明', '孔亮', '项充', '李衮', '金大坚', '马麟', '童威', '童猛', '孟康', '侯健', '陈达', '杨春',
'郑天寿', '陶宗旺', '宋清', '乐和', '龚旺', '丁得孙', '穆春', '曹正', '宋万', '杜迁', '薛永', '李忠', '周通', '汤隆', '杜兴', '邹渊', '邹润', '朱贵', '朱富', '施恩', '蔡福', '蔡庆', '李立', '李云', '焦挺', '石勇',
'孙新', '顾大嫂', '张青', '孙二娘', '王定六', '郁保四', '白胜', '时迁', '段景住']
for word in words_list:
if word in name_list:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i, j in items:
print(i, j)
贴一部分结果,上面是两个分开的程序,jieba分词如果文本太大运行太慢了,就不写到一个类里面了。
从频次上看,宋江应该就是主角了,不对......宋江本来就是主角呀,这波分析好像并没有什么意义...