計算機告訴你,唐朝詩人之間的關係到底什麼樣?

ADVERTISEMENT

在我還念中學的時候,每當心情不好,就靠讀詩詞來排遣,慢慢讀得多了,就發現唐朝詩人之間存在著微妙的關係。比如杜甫非常喜歡李白,到了做夢都想見李白的地步:三夜頻夢君,情親見君意(《夢李白》)。而李白向孟浩然表過白:吾愛孟夫子,風流天下聞(《贈孟浩然》)。孟浩然的好基友則是王昌齡:數年同筆硯,茲夕間衾裯(《送王昌齡之嶺南》)。

出於好奇心,我一度想理清楚他們之間的關係。但是全唐詩一共四萬多首,再加上詩人之間經常稱呼對方的別稱,整理起來非常麻煩,慢慢的也就絕了這個念頭。

前不久又想起來這段十五年前的心事。事不宜遲,拖了這麼多年的願望,不能再拖了。

這次,我將程式設計完成這件事。

前面已經說過,這件事主要的麻煩在於以下兩點:

全唐詩數量太多,一共四萬多首。

詩人的別稱太多,比如杜甫:按字稱為子美,按排行稱為杜二,按官職稱為杜工部。

至於第一點,我們現在用計算機來做,再多也無所謂。第二點則稍微費事一點,我們使用哈佛大學編纂的《中國歷代人物傳記資料庫》(China Biographical Database Project,以下簡稱CBDB),CBDB記錄了中國歷代名人的傳記資料,並儲存在關係型資料庫中。

1. 利用CBDB查詢詩人的別名

CBDB由很多張表組成,每張表記錄了人物的不同資訊,我們隻用到了其中兩張表,人物的主要資訊表:BIOG_MAIN和人物的別名錶:ALTNAME_DATA

首先從BIOG_MAIN中查詢出人物編號c_personid,接著用c_personid從ALTNAME_DATA中查詢出別名。

下面我給大家演示一下如何從CBDB中查詢杜甫的別稱。

圖中能夠看到杜甫有三個別稱:子美、杜二、杜工部。

當然也有很多重名的現象,比如我們查詢王維。

會找出一堆叫王維的,這個時候,我們就要使用生卒年來判定:這個人物到底是不是唐朝的。這次要從資料庫中查詢人物的生卒年。

唐朝建立於618年,滅亡於907年。對比後立刻發現,第二個王維才是我們要找的詩人王維。

ADVERTISEMENT

查詢別名核實一下:

看到了熟悉的王右丞和摩詰,沒錯,這正是王維同學。

由於CBDB收羅的歷史人物太多,重名現象非常嚴重。經過一番探索,最終設定瞭如下的排除重名策略:

1.如果人物生卒年俱全,那麼只要生卒區間和唐朝持續時間有交集即可。如果存在這樣的詩人,那麼直接把這個人作為全唐詩中的作者。

2.如果人物只有生年或者卒年,那麼生年或卒年必須在唐朝的持續時間內。將這樣的人加入候選人列表。

3.如果人物生卒年都不詳,那麼捨棄之。

經過這三條判斷之後:

如果候選人列表為空,那麼說明CBDB中沒有目標人選,捨棄這位詩人。

如果候選人多於一個,則說明排除重名失敗,捨棄這位詩人。

這種策略並不完美,存在部分註明詩人被捨棄的情況。為此我手動新增了他們:

還有部分詩人的別稱比較尷尬,屬於唐詩中的常用詞,需要手動去除。如下:

過這一番篩選,全唐詩中原本的2609位作者,隻剩下了762位。這就夠了,著名的詩人都在這個列表當中,接下來我們隻關心這762位詩人之間的關係。

2. 搜尋詩人之間的引用關係

利用上面的詩人及別稱列表,我們在全唐詩中來搜尋詩人之間的引用關係。

規則是:詩的標題和正文中只要提到過對方,那麼兩者之間的引用關係加1。一首詩如果提到多次對方,隻算一次引用。

經過計算機一番運轉,最終得到了引用關係表。

2.1 李白和杜甫之間的引用關係

ADVERTISEMENT

首先來檢查一下李白和杜甫之間的引用關係:

不錯,杜甫寫了12首與李白有關的詩,李白則只有3首與杜甫有關的詩。李白這種朋友,確實差勁了一點啊……

從這張圖也可以看出,我們的程式能夠識別出詩人的別名,比如杜甫的《寄李十二白二十韻》和李白的《魯郡東石門送杜二甫》都沒有直接提到對方的名字。

2.2 引用關係排名

我給詩人之間的引用關係排了個座次,下面顯示了排名前三十的引用關係:

我們看到,全唐詩中排名第一的好基友絕對是陸龜蒙和皮日休。這兩位互相提到對方的次數都在百次以上,這是因為陸龜蒙和皮日休特別喜歡唱和,你寫一首送我,我再回一首贈你,跟現在微博大V之間的互動差不多。這兩位常年唱和,最後將往來的唱和詩作編寫了中國文學史上的第一本唱和詩集:《鬆陵集》。為了不辜負他們之間的友誼,文學史上通常將兩者合稱為“皮陸”。

並列第二的則是白居易和劉禹錫、白居易和元稹。白居易和劉禹錫同年(772年)出生,從政道路都是各種被貶謫。兩人都很長壽,劉禹錫71歲時去世,白居易則活了75歲。白居易在得知劉禹錫去世的訊息時,寫下了千古名句:

四海齊名白與劉,百年交分兩綢繆。

同貧同病退閒日,一死一生臨老頭。

白居易和元稹我不想多寫了,大家只要知道二人在文學史上被合稱為“元白”,就能想見二者的親密關係了。

從排名前三十的引用關係來看,白居易絕對是唐朝詩人朋友圈中的明星,是大V中的大V。

3. 引用關係的視覺化

只有引用關係列表豈不是有些乾巴巴的,接下來才是本文的重頭戲。我將使用ECharts來視覺化詩人之間的引用關係,最終得到詩人們的社交網路。

3.1 全唐詩人社交網路圖

因為一共有762位詩人,為了避免畫出的圖太擁擠,看不清,我隻將前一百的引用關係圖示化,如下圖:

可能會看不清,請大家放大後再看。

ADVERTISEMENT

圖中:

箭頭表示詩人們之間的引用關係。比如說白居易引用了元稹,那麼就有白居易指向元稹的箭頭,元稹引用了白居易,相應的也有元稹指向白居易的箭頭。

箭頭的粗細程度則表示了詩人們之間引用關係的強弱。白居易引用元稹的數量為167次,元稹引用白居易的數量為88次,那麼白居易指向元稹的箭頭就要粗一些。

圖中清晰地顯示除了唐朝詩人的兩個大型朋友圈:杜甫-李白朋友圈、白居易朋友圈。沒錯,他們分別是盛唐和中唐兩個時期的核心詩人。

雖然隻畫出了排名前一百的引用關係,但還是很擁擠。文學史上將唐詩根據時間劃分為4個階段:初唐、盛唐、中唐、晚唐。接下來我們就分別畫出這四個階段的社交網路圖。

3.2 初唐詩人社交網路圖

從箭頭的粗細來看,初唐詩人中關係最好的是宋之問和沈銓期。這兩位正是宮廷詩人的代表,他們兩位確定了近體詩的格律,對仗等規則。粗略的說,近體詩的規則就是他們倆發明出來的。對了,他們倆在文學史上一般也合成“沈宋”哦,看來要成為好基友,沒有文學史的認證是不行的。

3.3 盛唐詩人社交網路圖

注:為了製圖清晰,盛唐詩人社交網路隻畫出了引用數大於等於2的關係。

盛唐詩人的核心無疑是“李杜文章在,光焰萬丈長”中提到的李白和杜甫了。我們再次看到,杜甫指向李白的箭頭比李白指向杜甫的箭頭要粗得多。而且盛唐的詩人們明顯分為兩群,一群以李白-杜甫為核心,一群以皇甫冉和劉長卿為核心,為什麼有這樣的局面?我也不知道,對文學史比較瞭解的朋友請在評論裡賜教。

3.4 中唐詩人社交網路圖

注:為了製圖清晰,中唐詩人社交網路隻畫出了引用數大於等於2的關係。

中唐詩人社交網的特徵很明顯,各位詩人緊緊團結在以白居易、元稹、劉禹錫為核心的文壇政治局周圍,勠力同心,同舟共濟,為唐詩從浪漫主義向現實主義的偉大轉折做出了歷史性貢獻。

3.5 晚唐詩人社交網路圖

晚唐詩人的社交網路比較散亂,沒有明顯的核心。其中最重要的就是李商隱和杜牧了,他倆得到了文學史認證的“小李杜”好基友稱號。

4. 總結

文章寫到這裡,我突然意識到,即使一個人對唐詩沒有任何瞭解,他只要看這些社交網路圖,就能立刻發現哪位詩人是同時代詩人的核心,哪位詩人的影響最大。這些都是很有用的資訊。

而我們可以用計算機來分析任何時代的人物關係。中國恰好是歷史文獻最全的國家,如果能對這些文獻統一做系統的分析,豈不是可以做出隨著時間變化的歷史人物關係圖?

這在以前是不可能的事,現在隨著計算機技術的發展和古典文獻的數字化程式,逐漸有可能了。這當然是很大的工作量,任何個人都不可能實現。我想,有沒有可能參考linux的開發過程,用開源的方式,大家一起來完成這件事。

我會將這一篇和《當我們讀唐詩時,我們在讀什麼?》用到的python源碼上傳到github上,到時候感興趣的朋友可以fork過來共同研究。我的github賬號也是mrqianjinsi,歡迎大家關注。(編輯:遊識猷)

編者的話:這是一個非常有意思的研究思路,提供的關係圖譜也清晰明瞭,值得一讀。不過,需要特別說明的是,這樣的關係圖譜並不一定是對唐代詩人社交關係的完整、準確反映。首先,《全唐詩》並非一個最完備的資料來源,在《全唐詩》的基礎上後世研究者陸續拾遺補編了千餘篇唐人作品;其次,古代詩人在寫作、結集的過程中,會出現頻繁的增刪,文稿散佚也可能極大影響對詩人社交關係的體現;何況,單從數量分析而不考慮作者產量、早逝、年齡差、具體關係細節和個人習慣等等,本身也不足以完整反映詩人間聯絡。不過,作為近似的概貌和視覺化,這是一種非常有趣的方法,也為新時期的文學研究提供了很好的思路。

本文經授權轉載,禁止再次轉載。如有需要,請聯絡[email protected]

如在其他平臺看到此文章被盜用,請告訴我們(文章版權保護服務由維權騎士提供)

» 果殼網

ADVERTISEMENT