计算机告诉你,唐朝诗人之间的关系到底是什么样的?

在我还念中学的时候,每当心情不好,就靠读诗词来排遣,慢慢读得多了,就发现唐朝诗人之间存在着微妙的关系。比如杜甫非常喜欢李白,到了做梦都想见李白的地步:三夜频梦君,情亲见君意(梦李白)。而李白向孟浩然表过白:吾爱孟夫子,风流天下闻(赠孟浩然)。孟浩然的好基友则是王昌龄:数年同笔砚,兹夕间衾裯(送王昌龄之岭南)。

出于好奇心,我一度想理清楚他们之间的关系。但是全唐诗一共四万多首,再加上诗人之间经常称呼对方的别称,整理起来非常麻烦,慢慢的也就绝了这个念头。

直到前不久在网上看到了这张非常火的图,又让我想起来这段十五年前的心事。事不宜迟,拖了这么多年的愿望,不能再拖了。

这次,我将编程完成这件事。前面已经说过,这件事主要的麻烦在于以下两点:

  • 全唐诗数量太多,一共四万多首。
  • 诗人的别称太多,比如杜甫:按字称为子美,按排行称为杜二,按官职称为杜工部。

至于第一点,我们现在用计算机来做,再多也无所谓。第二点则稍微费事一点,我们使用哈佛大学编纂的《中国历代人物专辑资料库》(China Biographical Database Project 以下简称CBDB),CBDB记录了中国历代名人的传记资料,并保存在关系型数据库中。

1 利用CBDB查找诗人的别名

CBDB由很多张表组成,每张表记录了人物的不同信息,我们只用到了其中两张表,人物的主要信息表:BIOG_MAIN和人物的别名表:ALTNAME_DATA

首先从BIOG_MAIN中查询出人物编号c_personid,接着用c_personid从ALTNAME_DATA中查询出别名,如下图所示:

下面我给大家演示一下如何从CBDB中查询杜甫的别称。

图中能够看到杜甫有三个别称:子美、杜二、杜工部。

当然也有很多重名的现象,比如我们查询王維。

会找出一堆叫王维的,这个时候,我们就要使用生卒年来判定:这个人物到底是不是唐朝的。这次要从数据库中查询人物的生卒年。

唐朝建立于618年,灭亡于907年。对比后立刻发现,第二个王维才是我们要找的诗人王维。

查询别名核实一下:


看到了熟悉的王右丞和摩诘,没错,这正是王维同学。

由于CBDB收罗的历史人物太多,重名现象非常严重。经过一番探索,最终设置了如下的排除重名策略:

  1. 如果人物生卒年俱全,那么只要生卒区间和唐朝持续时间有交集即可。如果存在这样的诗人,那么直接把这个人作为全唐诗中的作者。
  2. 如果人物只有生年或者卒年,那么生年或卒年必须在唐朝的持续时间内。将这样的人加入候选人列表。
  3. 如果人物生卒年都不详,那么舍弃之。

经过这三条判断之后:
如果候选人列表为空,那么说明CBDB中没有目标人选,舍弃这位诗人。
如果候选人多于一个,则说明排除重名失败,舍弃这位诗人。

这种策略并不完美,存在部分注明诗人被舍弃的情况。为此我手动添加了他们:

还有部分诗人的别称比较尴尬,属于唐诗中的常用词,需要手动去除。如下:

经过这一番筛选,全唐诗中原本的2609位作者,只剩下了762位。这就够了,著名的诗人都在这个列表当中,接下来我们只关心这762位诗人之间的关系。

2 搜索诗人之间的引用关系

利用上面的诗人及别称列表,我们在全唐诗中来搜索诗人之间的引用关系。
规则是:诗的标题和正文中只要提到过对方,那么两者之间的引用关系加1。一首诗如果提到多次对方,只算一次引用。
经过计算机一番运转,最终得到了引用关系表。

2.1 李白和杜甫之间的引用关系

首先来检查一下李白和杜甫之间的引用关系:

不错,杜甫写了12首与李白有关的诗,李白则只有3首与杜甫有关的诗。李白这种朋友,确实差劲了一点啊。

从这张图也可以看出,我们的程序能够识别出诗人的别名,比如杜甫的《寄李十二白二十韵》和李白的《鲁郡东石门送杜二甫》都没有直接提到对方的名字。

2.2 引用关系排名

我给诗人之间的引用关系排了个座次,下面显示了排名前三十的引用关系:

我们看到,全唐诗中排名第一的好基友绝对是陆龟蒙和皮日休。这两位互相提到对方的次数都在百次以上,这是因为陆龟蒙和皮日休特别喜欢唱和,你写一首送我,我再回一首赠你,跟现在微博大V之间的互动差不多。这两位常年唱和,最后将往来的唱和诗作编写了中国文学史上的第一本唱和诗集:《松陵集》。为了不辜负他们之间的友谊,文学史上通常将两者合称为“皮陆”。

并列第二的则是白居易和刘禹锡、白居易和元稹。白居易和刘禹锡同年(772年)出生,从政道路都是各种被贬谪。两人都很长寿,刘禹锡71岁时去世,白居易则活了75岁。白居易在得知刘禹锡去世的消息时,写下了千古名句:

四海齐名白与刘,百年交分两绸缪
同贫同病退闲日,一死一生临老头

白居易和元稹我不想多写了,大家只要知道二人在文学史上被合称为“元白”,就能想见二者的亲密关系了。
从排名前三十的引用关系来看,白居易绝对是唐朝诗人朋友圈中的明星,是大V中的大V。

3 引用关系的可视化

只有引用关系列表岂不是有些干巴巴的,接下来才是本文的重头戏。我将使用ECharts来可视化诗人之间的引用关系,最终得到诗人们的社交网络。

3.1 全唐诗人社交网络图

因为一共有762位诗人,为了避免画出的图太拥挤,看不清,我只将前一百的引用关系图示化,如下图:

可能会看不清,请大家放大后再看。图中:

  • 箭头表示诗人们之间的引用关系。比如说白居易引用了元稹,那么就有白居易指向元稹的箭头,元稹引用了白居易,相应的也有元稹指向白居易的箭头。
  • 箭头的粗细程度则表示了诗人们之间引用关系的强弱。白居易引用元稹的数量为167次,元稹引用白居易的数量为88次,那么白居易指向元稹的箭头就要粗一些。

图中清晰的显示除了唐朝诗人的两个大型朋友圈:杜甫-李白朋友圈、白居易朋友圈。没错,他们分别是盛唐和中唐两个时期的核心诗人。
虽然只画出了排名前一百的引用关系,但还是很拥挤。文学史上将唐诗根据时间划分为4个阶段:初唐、盛唐、中唐、晚唐。接下来我们就分别画出这四个阶段的社交网络图。

3.2 初唐诗人社交网络图

从箭头的粗细来看,初唐诗人中关系最好的是宋之问和沈铨期。这两位正是宫廷诗人的代表,他们两位确定了近体诗的格律,对仗等规则。粗略的说,近体诗的规则就是他们俩发明出来的。对了,他们俩在文学史上一般也合成“沈宋”哦,看来要成为好基友,没有文学史的认证是不行的。

3.3 盛唐诗人社交网络图

注:为了制图清晰,盛唐诗人社交网络只画出了引用数大于等于2的关系。

盛唐诗人的核心无疑是“李杜文章在,光焰万丈长”中提到的李白和杜甫了。我们再次看到,杜甫指向李白的箭头比李白指向杜甫的箭头要粗得多。而且盛唐的诗人们明显分为两群,一群以李白-杜甫为核心,一群以皇甫冉和刘长卿为核心,为什么有这样的局面?我也不知道,有没有对文学史比较了解的朋友,请在评论里赐教。

3.4 中唐诗人社交网络图

注:为了制图清晰,中唐诗人社交网络只画出了引用数大于等于2的关系。

中唐诗人社交网的特征很明显,各位诗人紧紧的团结在以白居易、元稹、刘禹锡为核心的文坛政治局周围,勠力同心,同舟共济,为唐诗从浪漫主义向现实主义的伟大转折做出了历史性贡献。

3.5 晚唐诗人社交网络图

晚唐诗人的社交网络比较散乱,没有明显的核心。其中最重要的就是李商隐和杜牧了,他俩得到了文学史认证的“小李杜”好基友称号。

原文发布时间为:2017-03-14

时间: 2024-11-03 09:08:39

计算机告诉你,唐朝诗人之间的关系到底是什么样的?的相关文章

[译] 单元测试,精益创业,以及两者之间的关系

本文讲的是[译] 单元测试,精益创业,以及两者之间的关系, 原文地址:Unit testing, Lean Startup, and everything in-between 原文作者:Itamar Turner-Trauring 译文出自:掘金翻译计划 译者:gy134340 校对者:zhaochuanxing,yifili09 为什么软件需要测试? 我曾经以为是为了产出高质量的代码:你总是需要测试因为你总是需要写出高质量的代码. 但是这个观点有几点问题. 有时候质量不是主要问题. 在"精益

大数据、物联网、智慧城市三者之间的关系

大数据是信息化社会无形的生产资料,其概念被社会各界不断演绎出多种版本,但关于大数据.物联网.智慧城市三者之间的关系,很多人不甚明了.对此,记者采访了同方物联网产业应用本部技术总监赵英,她对此做出了详细的解读. 大数据.物联网.智慧城市三者之间的关系简单来说就是:大数据的发展源于物联网技术的应用,并用于支撑智慧城市的发展.物联网技术作为互联网应用的拓展,正处于大发展阶段.物联网是智慧城市的基础,但智慧城市的范畴相比物联网而言更为广泛;智慧城市的衡量指标由大数据来体现,大数据促进智慧城市的发展;物联

常见Web技术之间的关系,你了解多少?

摘要:本文主要探讨了Web开发技术之间的关系,以及他们组合起来到底有什么用的问题. 如果你是一个Web开发初学者,那么你难免会在网上搜索HTML, CSS, XML, JS(Javascript), DOM, XSL等等这些词的意思,然而,随着学习的深入.当你把他们搅在一起,你又糊涂了,你会不停的问,HTML是什么?CSS是什么?XML是什么?JS是什么?它们到底有什么用?无论是网络百科,还是一些IT专题网站,又或者一些牛人博客,他们都会告诉你,某个单一的东西是什么,这类文章很多,但很少有涉及,

求数字之间的关系,请大家看下

问题描述 求数字之间的关系,请大家看下 想问下数字: 1 9 3 6 5 3 这些数字之间的关系,该选哪个 A.0 B.3 C.4 D.7 E.9 解决方案 你这文不对题,选项和问题有啥关系啊,你是不是该问后面的数是什么 解决方案二: 我选择A,因为我把他看成时间1936年5月30日!其他就不对! 解决方案三: 这个纯粹是闹着玩的吧,我不知道这个和计算机有什么关系 解决方案四: 1 3 5 7-- 难道是7? 解决方案五: 这种题有一千种答案,那我也给你写一串数字,0000000,问下一个数字,

银联和第三方支付之间的关系向来微妙

银联和第三方支付之间的关系向来微妙.而昨日,银联在董事会上的一份"一统天下的"<议案>让双方之间的火药味更浓. 南都记者获悉,在上个月的银联董事会上,银联推出了<关于进一步规范非金融支付机构银联卡交易维护成员银行和银联权益的议案>,督促各成员银行统一行动,逐步将非金融机构银联卡交易全面迁移至银联网络,并首次明确提出了实现该目标的时间节点―――2014年7月1日之前. 业内人士测算表示,如果银联真的如愿收编第三方支付 ,按照2014年网上支付预计8万亿的交易额来看

浅谈网站源码与SEO之间的关系

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 众所周知,目前我们建站已经有越来越多的开源程序了,像CMS里有织梦.帝国.PHP168等,论坛用的Discuz.PHPWIND等,博客里的Zblog.wordpss等等吧,这些都提供用户免费下载使用,这只是几款比较知名的程序,当然还有很多不知名的程序,对我们草根站长而言,目前的这些开源程序已经足够我们选择和使用了,究竟选择什么样的源码建站,目

Laravel的Container/ServiceProvider/Facade之间的关系

简述 当你接触一段时间Laravel的Service Container, Service Provider,Contracts和Facade后,也许已经知道它们是什么了,但是对于如何使用,在什么时候使用,以及它们之间的关系是什么,还不是非常清楚. 而关键是如果你反复看文档,你会被它坑死,因为文档有些部分不但没有解释清楚,反而有误导的内容: 现在我们就来一次性把它们搞定: 基本概念 在继续本教程之前,你需要先对以上概念有基本了解,知道它们是什么: Service Container和 Servi

总结java实现八大排序算法及之间的关系

8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如此反复循环,直到全部排好顺序. (2)实例 (3)用java实现 [java] view plaincopy package com.njue; public class insertSort { public insertSort(){ inta[]={49,38,65,97,76,13,27,

slf4j-api、slf4j-log4j12以及log4j之间的关系

几乎在每个jar包里都可以看到log4j的身影,在多个子工程构成项目中,slf4j相关的冲突时不时就跳出来让你不爽,那么slf4j-api.slf4j-log4j12还有log4j是什么关系?      slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade.Facade门面,更底层一点说就是接口.它允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统.更直观一点,slf4j是个数据线,一端嵌入程序,另一端链接日志系统,从而实现将