专栏名称: 机器学习研究会
机器学习研究会是北京大学大数据与机器学习创新中心旗下的学生组织,旨在构建一个机器学习从事者交流的平台。除了及时分享领域资讯外,协会还会举办各种业界巨头/学术神牛讲座、学术大牛沙龙分享会、real data 创新竞赛等活动。
目录
相关文章推荐
爱可可-爱生活  ·  【Promptim 提示优化器:用于优化 ... ·  2 天前  
黄建同学  ·  llama-ocr,这是一个免费的开源OCR ... ·  5 天前  
宝玉xp  ·  //@刘群MT-to-Death:真好啊!日 ... ·  5 天前  
宝玉xp  ·  //@高飞:人是瓶颈//@QuantumDr ... ·  5 天前  
小互AI  ·  炸裂:P图软件将全部倒闭 ... ·  5 天前  
小互AI  ·  炸裂:P图软件将全部倒闭 ... ·  5 天前  
51好读  ›  专栏  ›  机器学习研究会

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

机器学习研究会  · 公众号  · AI  · 2017-03-13 19:05

正文



点击上方“机器学习研究会”可以订阅哦
摘要
 

转自:前进日志

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

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

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

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

  • 全唐诗数量太多,一共四万多首。

  • 诗人的别称太多,比如杜甫:按字称为子美,按排行称为杜二,按官职称为杜工部。

至于第一点,我们现在用计算机来做,再多也无所谓。第二点则稍微费事一点,我们使用哈佛大学编纂的《中国历代人物专辑资料库》(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位诗人之间的关系。


原文链接:

http://mp.weixin.qq.com/s/2Xcz5W5E1qt-zZ2FdFT9Mg

“完整内容”请点击【阅读原文】
↓↓↓