查看原文
其他

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

柯广 数据科学专栏 2022-10-15


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

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


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


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

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

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

爬取的Python代码如下:

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

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

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

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

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

1、新建系统变量JAVA_HOME;变量值为jdk的路径比如我习惯性的路径:D:\Program Files\Java\jdk1.7.0_79;
2、在PATH变量后加入:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;末尾最好有分号,防止下次加时漏掉分号,养成好习惯;
3、在命令行窗口输入javac,会出现相关目录表示配置成功。

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

(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]

  }

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

函数主体部分:

(3)、调用函数

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

保存的词云图:

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

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

第45张图:

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

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

下面是主要代码:

生成的词云如下:

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

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

以后有机会,可能会看一下这部神剧。哈哈!如果感兴趣,回复“人民”即可获得源码。需要小说可以加我微信:as2601538122,当然了小说网上有!

欢迎留言,觉得不错,记得点赞分享哦!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存