人民的名义》小说文本分析

你只要不干坏事,就没人能坏你的事。

 ——《人民的名义》经典语录

《人民的名义》,听说很好看。一向不喜欢看电视的我还是想了解一下这部剧,可是又不想花时间去看剧,怎么办呢?我就考虑把小说拿来文本分析一下,以此来满足我小小的好奇心!

这是我从网上下载的.txt格式的小说——《人民的名义》,一共有54个章节。

0?wx_fmt=png

鉴于没有看过《人民的名义》,我想知道剧中主角是谁,有哪些演员,于是我百度了一下,《人民的名义》角色,把它们都爬取下来了。

0?wx_fmt=png

根据标签的结构,我发现角色处于<a>、<span>标签中,前面一部分在<a>标签中,中间既有<a>标签也有<span>标签,最后一部分只有<span>标签。这个爬虫本身不难,只是结构不很人性化!所以可以看到:我用了好多条件选择语句。

爬取的Python代码如下:

0?wx_fmt=png

下面我用R语言的基于rjava包的Rwordseg包分词,然后画词云可视化。

(1)、导入相应的包与停词库

用到的包:rjava、Rwordseg、wordcloud,其它需要的包会自动加载进去。

当然了,rjava包是基于java环境的,需要安装jdk,并配置相应的java环境变量;这里停词库用的是【四川大学机器智能实验室停用词库】,网上都可以下载的到,当然了,我还根据实际情况添加了一些词。

我这个人喜欢做笔记,这是我总结的java环境变量配置过程:

1、新建系统变量JAVA_HOME;变量值为jdk的路径比如我习惯性的路径:D:\Program Files\Java\jdk1.7.0_79;

下面是导入相应的包与停词库:

0?wx_fmt=png

(2)、分词、词云保存函数的构造

一共有54个章节,我想分别词云分析一下,在每个章节里的情况。我写了一个函数plt(),功能为生成词云并且保存到本地。

其实在这里,我遇到了一个坑。分词、停词后的列联表会有缺失,开始一直没发现,后来发现了,就去缺失值。而且,去除缺失值前提是序列里确实有缺失值,否则会把完整的没缺失的变成缺失。因为我用的语句是:

a <- which(dat_pure %in% NA)

dat_pure <- dat_pure[-a]

这时候,又到了与女同学跑步的时间了,算了,跑步再说吧。结果跑步回来后,就想起来了,哈哈。

后来,我将上面一句调整为:

a <- which(dat_pure %in% NA)

  if(length(a)>0){

    dat_pure <- dat_pure[-a]

  }

每次去缺失前做一个判断,其实上次遇到过,这次还是不长记性,不过好在解决了。

函数主体部分:

0?wx_fmt=png

(3)、调用函数

循环读取小说的54个章节,调用函数代码如下:

0?wx_fmt=png

保存的词云图:

0?wx_fmt=png

随便打开,发现就那么就个人,在小说中出现的频率最高,应该是几个主要演员。

随便打开第14张图片如下:

0?wx_fmt=jpeg

第45张图:

0?wx_fmt=jpeg

(4)、整部小说分词、画词云

下面,我想整体分析一下,在整部小说中的人物情况。我考虑把54个章节的内容全部整合到一起,画词云。

下面是主要代码:

0?wx_fmt=png

生成的词云如下:

0?wx_fmt=png

我们可以看到,词云上的人名就是《人名的名义》主人公,这与我网上爬取的角色前几名保持一致:

侯亮平、李达康、沙瑞金、高育良、祁同伟、陆亦可、钟小艾、高小琴、吴惠芬、欧阳菁

如果感兴趣,回复“人民”即可获得源码。

点击【阅读原文】,免费课程限时送!欢迎留言,觉得不错,记得点赞分享哦!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值