实战:python分析天龙八部

为了完成伟大的工作,有两样东西是必须的,一个计划以及已经不多的时间。 伦纳德·伯恩斯坦

大家好,我是今天的值班小编,python爱好者一枚,同时也是多年的武侠小说爱好者。

今天是正月初六了,要是按照往年的情况来看,小编应该是在回北京的火车上了;今年情况比较特殊,这几天一直宅在家里躺床上看小说。

话说小编从初中时开始看金庸低武,后来逐渐过渡到高武、穿越、修仙、科幻、网游一路看下来各种小说(盗版居多)。这两天回忆了一下初中时光,准备把金庸老先生的《天龙八部》再翻出来看看。

打开百度搜索一把,还真有盗版小说,50章网页版的,可惜不喜欢该网站的字体,不如咱们把它抓取下来保存成本地的txt文件吧。

python爬虫

开发环境:win 10

不高兴用scrapy这类框架了(因为忘记要怎样用框架了,还要翻文档才能想起来),直接手写几段python代码吧,html的解析就交给beautiful soup了,需要先用pip安装一下。

上图中的代码很简单,主要流程是:

1)遍历页码。

2)构造url。

3)使用urllib.request发送请求并获取响应。

4) 使用beautiful soup解析html代码得到每一章的标题和正文内容。

5) 把标题和正文内容附加到本地的txt文件尾部。

cmd里面运行一下,很快的,十几秒的时间就完成了50章小说的抓取,真是让人感叹:科学技术就是第一生产力。 最终得到了2.4MB的《天龙八部.txt》。

数据分析

看完《天龙八部》之后,有一个问题在小编脑海中萦绕不去绕梁三日而不绝,那就是“天龙八部小说里面,有三个男主,萧峰、段誉、虚竹,谁的出场次数最多,谁才是金老先生最看重的男主角?”

这个问题自从小编在初中时第一次读完《天龙八部》的时候就有了,当时和同学们讨论争辩了很久,最终也是无解;现在已经学会了python的一点皮毛,可以自己尝试着写代码分析一把。

话说python代码就是简单的不要不要的,因为复杂的操作都有各种库可以调用:

代码主要流程有4步:

1)从刚抓取到的txt文件里面读出全部内容。

2)使用jieba这个库来做切词的操作。所谓“切词”就是把一段话或者一句话切割成一个一个独立的词。

由于“萧峰”在小说前期名为“乔峰”,所以要写个if语句把这两个名字给统一一下。

3)调用wordCloud库生成词云。

4)调用pyplot库把词云作为图片展示出来。

词云的效果如下:

从上面的词云里面可以看到,乔峰和段誉的出场次数不相上下,虚竹、慕容、正淳、坦之就要差一个档次了。

这里,小编要提出一个问题,朋友们可以在评论里面进行解答:为什么词云图里面没有 "的","是","我", "你" 这几个字呢?从直觉上来看,这几个字的出现频率应该是比较高的。

wordCloud库生成词云的时候,还有一个神奇的功能,可以自定义图片样式,比如下面这样,是不是很有意思呢:

词云图的优点是可以一眼就看到出现次数较多的词,直击重点一针见血,缺点就是看不到具体的数字了。还是用matplotlib画个柱状图看看吧,x轴是角色名称,y轴是出现次数:

可能有朋友区分不清楚柱状图和直方图的区别,小编这里教朋友们一招:柱状图的每个竖条之间是有间隔的,直方图则没有。

从柱状图中也可以看出,乔峰的出场次数比段誉多了那么一点点;此外,王语嫣是当之无愧的第一女主角。

分析完男女主角之后,再分析一下4个字的词,看看金老先生喜欢使用哪些4字词(或者成语):

出现次数最多的是“哈哈大笑”,“大吃一惊”,“英雄好汉”。 小编猜测了一下,可能江湖中的英雄好汉们一般为莽夫,智商普遍偏低,正常情况下就哈哈大笑,出现意外就大吃一惊。

后记

文章写到这里,也就差不多结束了,朋友们有空也可以自己写几行python代码分析一下小说或者其它文本数据。

其实小编还想训练一下模型分析一下人物关系的,但是有几个包一直安装不成功,也就先放弃了,等以后有空再做吧。

为了完成伟大的工作,有两样东西是必须的,一个计划以及已经不多的时间。 伦纳德·伯恩斯坦

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200130A0HT1J00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券