原标题:使用Python进行文本挖掘:没想到你竟是这样的全职高手...
源 / 数据团学社 文 / 聚聚
有这样一部网文~火遍大江南北,人物形象饱满,现实世界、网游世界、职业联赛三个世界线并行,且不同世界线之间互动丰富、交叉紧密,还号称网文界的“CP百科全书”~它就是《全职高手》!
当然,情节这么丰富的文自然篇幅不会小~洋洋洒洒500w字,怕不是要让诸多读者望而生畏~我,为了帮助广大读者理清人物关系,决心和大家一起通过先进的技术手段,用文本挖掘的方式提取网文内容,选出优质的网文作品!!~
工具准备:jieba分词
为了提取小说中的关键词,我们需要一个工具——jieba分词。名字很形象哈,结…巴~!来看看怎么用~
iv. 用词库转换器,把细胞词库转换成txt文本格式,便于处理。
原文、停用词表、特殊词库都准备好了~开始写代码!~
代码编辑:计算关键词频
i. 先导入一些会用到的模块
ii. 导入停用词,转换为列表格式。
iii. 导入小说原文(这里需要运行约30秒,小说字太多有500W)
v. 设置一个分词功能的函数,并对小说进行分词
vi. 分词完毕,我们对小说的词频取前二十进行简单统计,画出柱状图方便查看
统计结果图&表大致是这样的~
注意到“叶修”这个词,词频高达2W,可以据此推断,他就是本书的男主角;又据说这本书是一部关于游戏的小说,那么词频排名第二的“君莫笑”,应该就是主人公的游戏角色。
作为资深读者的我,看到眼前二十个高频词,就已经可以推断出这部小说的剧情了!~来!我给大家造个句:
下面,再来玩个有趣的东西:对高频词汇画个词云图。
i.实例化一个词云类,然后添加分词。
Font_path: 词云中词的字体,中文词汇必须用中文字体,否则显示会异常。字体文件,大家可以在电脑中字体文件夹中找喜欢的。Mask:
遮罩,设置词云图案的形状。可以导入图片设置,图片要简单,以面为主,清晰度无所谓,但分辨率一定要调高,否则做出的词云会很不清晰。图片主体不能是纯白色,因为白色被认为是背景,会被忽略识别。这里我导入一张全职高手的Logo。
ii.对词的颜色做点美化
这里用到了scipy和numpy两个库的功能。我们要导入描绘底色的图片,图片尺寸要大于等于遮罩图片的分辨率。计算机会根据底色图的颜色映射到词语图上。所以底色图同样不求清晰,但颜色饱和度要高,对比度要明显!这样效果才好。
我选了一张全职高手的全家福。
绘制完成!见证奇迹吧!
还记得一开始我说《全职高手》是一部CP百科全书吗?我们继续深入挖掘一下文中的人物关系,给他们组一组CP。
遍历文本每一行,再提取每一行中出现的人物,如果两个人物同时出现在同一行,那么他们之间人物关系密切度+1,最后,密切度最高的为最佳CP。
首先需要对词库进行一些完善,筛选出哪些词是人名
字典结构是这样的,一个词占一行,有【词,词频,词性】词频我们暂时无需关注,写个1代替。词性,我只要甄别出人名,所以,小说中的人名统一设成nr,其余的词,偷个懒,设成n(nr代表人名,n代表名词。其他词性含义可查看词性对照表)
i. 新开一个脚本,导入模块。
codecs库:用来读取文本时,防止文本编码不统一,造成错误;
ii. 建立三个容器用于转换数据。
1names= {} #提取的人名,和出现的频数。
iii. 导入词库和文本
遍历文本每一行进行分词。排除词性不为nr,长度大于3小于2的所有词汇(通常人物名字为两个字和三个字)。
iv. 将符合要求的词汇分别添加入容器中
11#排除词性不为nr,长度大于3小于2的所有词汇
v. 遍历lineNames,对每一行出现的人名进行匹配,建立人物关系
10 #对于已有的人物关系,密切度+1
我们最终会把人物关系通过Gephi进行模拟。而Gephi构建关系网络,需要特定格式的数据。
Gephi是一款开源免费跨平台基于JVM的复杂网络分析软件,,其主要用于各种网络和复杂系统,动态和分层图的交互可视化与探测开源工具。
vi. 这里先构建两个数组,用于归类点数据和边数据
vii. 把清洗好的数据添加进数组中
脚本编写完毕,运行一下看看。小说一共有206436行,所以,需要计算一段时间:
只分析关系密切的CP,所以我们只取边数据中权重在100以上的数据。按照这个标准,整理点数据和边数据如下::
最后,我们把数据导入Gephi。
根据对美的认知,调一调颜色和布局。
嗯嗯!挺有意思的!人物关系真是复杂得不得了!这里忍不住要剧透了!
叶陈CP:叶修是战队队长,全权负责战队经营。陈果是战队老板娘,霸气侧漏。两人类似于总裁和总经理的关系吧。~~哎,这不是妥妥的霸道总裁爱上我的剧情嘛。叶唐CP:唐柔是富家千金,才女。不过,不小心让叶修带坏了,迷恋上了打游戏。两人算是师徒和队友关系吧。啧啧~叶苏CP:这个厉害了!叶修从前认识个兄弟,叫苏沐秋,两人一起打游戏。苏沐秋有个妹妹叫苏沐橙。后来,苏沐秋死了……贵圈真乱啊!
好了,剧透结束。其实,大家有兴趣的话,可以导入更多的数据,然后根据关系网络中簇群的颜色继续研究……
那么,本次分享到此结束!希望大家少看网文,多多学习~!
转载声明:本文转载自「数据团学社」,搜索「metrodata_xuexi」即可关注。