首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用python分析《三国演义》中的社交网络

作为一个三国迷,我就有了这样的想法:能不能用文本处理的方法,得到《三国演义》中的人物社交网络,再进行分析呢?python中有很多好工具能够帮助我实践我好奇的想法,现在就开始动手吧。

准备工作

获得《三国演义》的文本。

《三国演义》并不是很容易处理的文本,它接近古文,我们会面对古人的字号等一系列别名。比如电脑怎么知道“玄德”指的就是“刘备”呢?那就要我们给它一些知识。我们人通过学习知道“玄德”是刘备的字,电脑也可以用类似的方法完成这个概念的连接。我们需要告诉电脑,“刘备”是实体(类似于一个对象的标准名),而“玄德”则是“刘备”的一个指称,告诉的方式,就是提供电脑一个知识库。

除了人的实体和指称以外,我们也能够包括三国势力等别的类型的指称,比如“蜀”又可以叫“蜀汉”,所以知识库里还可以包括实体的类型信息来加以区分。

有了这些知识,理论上我们就可以编程联系起实体的各个绰号啦。不过若是要从头做起的话,其中还会有不少的工作量。而HarvestText[1]是一个封装了这些步骤的文本处理库,可以帮助我们轻松完成这个任务。

社交网络建立

成功地把指称统一到标准的实体名以后,我们就可以着手挖掘三国的社交网络了。具体的建立方式是利用邻近共现关系。每当一对实体在两句话内同时出现,就给它们加一条边。那么建立网络的整个流程就如同下图所示:

我们可以使用HarvestText提供的函数直接完成这个流程,让我们先在第一章的小文本上实践一下:

他们之间具体有什么关系呢?我们可以利用文本摘要得到本章的具体内容:

本章的主要内容,看来就是刘关张桃园三结义,并且共抗黄巾贼的故事。

三国全网络绘制

有了小范围实践的基础,我们就可以用同样的方法,整合每个章节的内容,画出一张横跨三国各代的大图。

整个社交网络有1290个人那么多,还有上万条边!那么我们要把它画出来几乎是不可能的,那么我们就挑选其中的关键人物来画出一个子集吧。

用pyecharts进行可视化

博客上不能显示交互式图表,这里就给出截图:显示了刘备的邻接结点

整个网络错综复杂,背后是三国故事中无数的南征北伐、尔虞我诈。不过有了计算机的强大算力,我们依然可以从中梳理出某些关键线索,比如:

人物排名-重要性

对这个问题,我们可以用网络中的排序算法解决。PageRank就是这样的一个典型方法,它本来是搜索引擎利用网站之间的联系对搜索结果进行排序的方法,不过对人物之间的联系也是同理。让我们获得最重要的20大人物:

《三国演义》当仁不让的主角就是他们了,哪怕你对三国不熟悉,也一定会对这些人物耳熟能详。

人物排名-权力值

这个问题看上去跟上面一个问题很像,但其实还是有区别的。就像人缘最好的人未必是领导一样,能在团队中心起到凝聚作用,使各个成员相互联系合作的人才是最有权力的人。中心度就是这样的一个指标,看看三国中最有权力的人是哪些吧?

结果的确和上面的排序有所不同,我们看到刘备、曹操、孙权、袁绍等主公都名列前茅。而另一个有趣的发现是,司马懿、司马昭、司马师父子三人同样榜上有名,而曹氏的其他后裔则不见其名,可见司马氏之权倾朝野。司马氏之心,似乎就这样被大数据揭示了出来!

社群发现

人物关系有亲疏远近,因此往往会形成一些集团。社交网络分析里的社区发现算法就能够让我们发现这些集团,让我使用community库[2]中的提供的算法来揭示这些关系吧。

在下面3个社区里,我们看到的主要是魏蜀吴三国重臣们。(只有一些小“问题”,有趣的是,电脑并不知道他们的所属势力,只是使用算法。)

community 3: 孙权 孙策 周瑜 陆逊 吕蒙 丁奉 周泰 程普 韩当 徐盛 张昭[吴] 马相 黄盖[吴] 潘璋 甘宁 鲁肃 凌统 太史慈 诸葛瑾 韩吴郡 蒋钦 黄祖 阚泽 朱桓 陈武 吕范

还有一些其他社区。比如在这里,我们看到三国前期,孙坚、袁绍、董卓等主公们群雄逐鹿,好不热闹。

这个社区是三国后期的主要人物了。这个网络背后的故事,是司马氏两代三人打败姜维率领的蜀汉群雄,又扫除了曹魏内部的曹家势力,终于登上权力的顶峰。

动态网络

研究社交网络随时间的变化,是个很有意思的任务。而《三国演义》大致按照时间线叙述,且有着极长的时间跨度,顺着故事线往下走,社交网络会发生什么样的变化呢?

这里,我取10章的文本作为跨度,每5章记录一次当前跨度中的社交网络,就相当于留下一张快照,把这些快照连接起来,我们就能够看到一个社交网络变化的动画。快照还是用networkx得到,而制作动画,我们可以用moviepy。

江山代有才人出,让我们看看在故事发展的各个阶段,都是哪一群人活跃在舞台中央呢?

美观起见,动画中省略了网络中的边。

随着时间的变化,曾经站在历史舞台中央的人们也渐渐地会渐渐离开,让人不禁唏嘘感叹。正如《三国演义》开篇所言:

古今多少事,都付笑谈中。

今日,小辈利用python做的一番笑谈也就到此结束吧……

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

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券