作為中國文學史上第一部章回小說,《三國演義》為我們展示出了一幅波瀾壯闊亂世英雄爭天下的歷史畫面,故事情節隨著幾大人物陣營的演變緊緊抓牢看客眼球。那麼隨著時間推移,三國人物陣營是怎樣變化的呢?狗熊會根據《三國演義》原著電子版漢語文本,應用文本分析、關聯規則挖掘和社區探測技術,從數據角度分析三國各個時期的人物陣營情況。
數據說明1、本案例數據來源於《三國演義》原著電子版和《三國演義》人物總表,人物總表說明如下:
(1) 人名總表中包含1152人。
(2) 不包含「單于」、「督郵」、「山神」、「梨樹神」、「師婆」等不確切指代某一個人的人名。
(3) 收集了人物的姓名、字號和別稱。有些人物的字號,雖史書上有記載,但在《三國演義》中未提及,不列入此表。
表1 《三國演義》部分人物表2、對每一自然段出場人物進行統計
根據人物總表中的姓名、字號、別稱,統計每一自然段中出現的人物。例如,某自然段中提到「曹操」或「孟德」或「阿瞞」,均認為「曹操」在該段出場。有兩種情況需要特殊說明:
首先,根據作者用詞習慣,若某一自然段中用某人物的「名」代替該人物,則上一自然段中提到過此人。例如:
「董卓屯兵城外,每日帶鐵甲馬軍入城,橫行街市,百姓惶惶不安。卓出入宮庭,略無忌憚…」
「…『不可!不可!汝是何人,敢發大語?天子乃先帝嫡子,初無過失,何得妄議廢立!汝欲為篡逆耶?』卓視之,乃荊州刺史丁原也…」
處理方法為:如果第i自然段出現了人物x,則在第i+1自然段需對人物x的「名」進行匹配,並以此遞歸。
其次是特殊人物的處理。例如:「張飛」和「張翼」。為了準確地統計此二人的出場頻次,將「張翼德」統一替換為「張飛」。再如:兩個「馬忠」。一個來自吳國,一個來自蜀國,並非羅老筆誤,三國時期確實存在兩個「馬忠」。由於二人出場時間不同,遂將第八十五回之前的「馬忠」替換為「馬忠(吳)」,第八十六回之後的「馬忠」替換為「馬忠(蜀)」。
3、把原著一百二十回,根據故事情節劃分為八個部分。
描述分析1、人物出場次數
圖1 《三國演義》中人物出場段落數的頻數直方圖從圖中可以看出,《三國演義》的三大男主角為曹操、劉備和諸葛亮,他們擁有極其複雜的人物關係,於整套書中出場次數最多。重要配角有很多,如關羽、趙雲、孫權、張飛、司馬懿、袁紹等人物,他們出場次數也相當多,配合三大男主角演義,為小說增添故事性和藝術性。毛宗崗稱三國有「三絕」:智絕-諸葛亮、義絕-關羽、奸絕-曹操,均屬於前四號人物。由此圖還能看出,《三國演義》主要講述了男人之間的故事。
2、親密二人組、三人組
Apriori算法是一種關聯規則挖掘方法,最早被應用於購物籃分析。在本案例中,Apriori算法用於準確並快速地發現多次在同一自然段中出現的二人組和三人組,並統計這些人物組合的共同出場頻次。應用Apriori算法挖掘出的「親密二人組」和「親密三人組」如下:
表2 親密二人組經典故事和相關人物:青梅煮酒論英雄(曹操、劉備),白帝城託孤(劉備、諸葛亮),鞭打督郵(劉備、張飛),火燒新野(趙雲、諸葛亮),千裡走單騎(關羽、劉備),赤壁之戰(曹操、諸葛亮)。
表3 親密三人組《三國演義》故事情節圍繞曹操、劉備、諸葛亮三大男主角展開。由於蜀魏兩大陣營的戰爭較多,三男主經常一起登場。涉及到曹操、關羽、劉備三人的經典故事有溫酒斬華雄、斬顏良誅文丑、掛印封金、千裡走單騎等;涉及到劉備、關羽、張飛三人的經典故事有桃園三結義、三英戰呂布、三顧茅廬、古城相會等。
3、三國人物關係網絡
圖2 《三國演義》全文人物關係網絡(僅顯示度大於100人物)網絡中的節點代表三國人物,邊的粗細正比於兩個人物共同出場的段落數。某節點的度即網絡上與該節點相連接的節點數量。某人物的度就是和他一起出場過的人物數。為了可視化方便,左圖僅展示了《三國演義》全文人物關係網絡中度大於100的人物及其相互關係。該網絡人物關係錯綜複雜,後文將通過社區探測算法挖掘網絡上潛在的人物陣營。
4、人物在網絡上的重要性
本案例用節點的度來刻畫三國人物的重要性。如圖:
圖3 《三國演義》全文人物網絡度排序從度的排序可以看出,最重要的三個人物仍然是曹操、劉備和諸葛亮。
曹操結束割據局面,統一北方,打擊匈奴、烏桓、羌等少數民族對中原的入侵。「聰明透頂又愚不可及;狡猾奸詐又坦率忠誠;豁達大度又疑神疑鬼;寬宏大量又心胸狹窄。」 ——易中天評曹操
劉備慧眼識才,建立了蜀國,使漢朝劉氏香火延續四十多年。「弘毅寬厚,知人待士,蓋有高祖之風,英雄之器焉。」 ——陳壽評劉備
諸葛亮輔佐劉備建立蜀漢政權,促進巴蜀地區經濟恢復和發展,是忠臣與智者的代表人物。「鞠躬盡瘁,死而後已。」 ——諸葛亮《後出師表》
各階段人物陣營探測第一階段:黃巾起義
黃巾起義是東漢末年的農民起義,朝廷腐敗、邊疆戰事、沉重賦稅使貧苦農民揭竿而起,為東漢末年軍閥混戰揭開了序幕,更為三國分立種下遠因。黃巾起義時期主要劃分為七大陣營,分別以劉備、封諝、朱儁、蹇碩、張讓、曹節、張舉為各陣營核心。其中,規模最大的陣營是以劉備為核心的,起義後劉備討伐黃巾軍有功,混得一官半職。
圖4 黃巾起義階段人物陣營探測第二階段:董卓之亂
董卓之亂發生在東漢中平六年(189年),董卓率兵進入洛陽,廢少帝,立劉協為帝,自為相國獨攬朝政。次年,袁紹討伐董卓,董卓敗,西遷前大肆燒掠,後被殺。此為三國亂世之開端。漢淪喪於董卓,曹操、袁紹等諸侯紛爭,郭汜、何進等亂世豪傑,孫堅、劉備等英雄輩出。董卓之亂,亂,亂,亂!其中,規模最大的陣營以曹操為核心。這一時期,曹操招精兵,伐董卓,嶄露頭角,逐鹿天下。董卓之亂是曹操霸業的序幕。
圖5 董卓之亂階段人物陣營探測第三階段:官渡之戰
官渡之戰,東漢末年「三大戰役」之一,曹操與袁紹在官渡(河南中牟東北)展開戰略決戰,曹操以少勝多,擊潰袁軍主力。曹操是官渡之戰的核心。袁紹及其武將謀士在曹操陣營中相愛相殺。劉備及其下屬流竄與兩方之間,本想借臺唱戲,結果意外頻出只得匆忙跳河。此時的孫策,隔岸吃瓜觀虎鬥。此戰是曹袁兩家爭奪北方霸權的轉折點,奠定了曹操統一中國北方的基礎。
圖6 官渡之戰階段人物陣營探測第四階段:赤壁之戰
赤壁之戰是孫權、劉備聯軍於建安十三年(208年)在長江赤壁一帶大破曹軍的戰役,曹操北回,孫、劉各自奪去荊州一部分。這一時期,大概就是兩個農民劉備、孫權鬥曹操這個地主吧!此次戰役,曹操成功浪費一個賽點,失去了短時間內統一全國的可能性,孫劉雙方實力迅速壯大,三分天下雛形形成,三足鼎立已為大勢所趨。
圖7 赤壁之戰階段人物陣營探測第五階段:三足鼎立
三足鼎立是指三國時期魏、蜀、吳三分天下的局面。羅老把這一時期的筆墨都留給了以劉備和曹操為核心的蜀漢和曹魏兩大陣營。問題是,孫權為什麼會被劃分到了蜀漢陣營?這說明,三足鼎立時期的主要矛盾,產生在曹魏陣營和蜀漢陣營之間。也就是說,劉備扛起了鬥地主的大旗!經常在一起的可能是朋友也可能是敵人,如馬超被劃分到曹魏陣營。
圖8 三足鼎立階段人物陣營探測第六階段:吳蜀之爭
吳蜀之戰的夷陵之戰是三國時期蜀漢、孫吳之間爭奪荊州的重要戰役,蜀漢慘敗,永遠失去荊州。此時陣營核心多為吳蜀之英雄豪傑,如韓當、諸葛亮、關羽、關興等;曹丕羽翼已豐,成為陣營核心。這一時期,關興隨先主劉備一起伐吳,諸葛亮持反對意見,孫劉兩敗俱傷,曹丕本可趁機滅蜀卻進攻東吳,從而缺錯失了統一全國的大好機會。
圖9 吳蜀之爭階段人物陣營探測第七階段:六出祁山
六出祁山是諸葛亮恢復與吳聯盟、平定南中後,曾六次從祁山出兵攻魏。諸葛亮必然是這一時期的最關鍵人物。諸葛亮六出祁山長達七年之久,雖苦心籌謀,奈何國力不濟,師勞而功微。「孔明六出祁山前,願以只手將天補;何期歷數到此終,長星半夜落山塢!」
圖10 六出祁山階段人物陣營探測第八階段:三國歸晉
分久必合,合久必分,蜀漢滅亡,公元265年司馬炎為相國、晉王,同年十二月代魏稱帝,滅蜀漢,公元280年滅東吳,三國歸晉。三國歸晉不應該司馬懿為核心嗎?為什麼會是諸葛亮?由此看來,我們的直覺可能都錯了!諸葛臥龍英魂尚在,冥冥之中也阻礙著司馬家族統一的進程。
圖11 三國歸晉階段人物陣營探測接下來,介紹一下三大男主角的陣營變化。
曹操於董卓之亂後盡顯雄才偉略,官渡之戰以少勝多,壯大了以自己為核心的陣營,赤壁之戰戰敗,自此三足鼎立局面形成。
劉備於黃巾起義後嶄露頭角,赤壁之戰中實力迅速壯大,形成以自己為核心的一大陣營,此後三足鼎立局面形成,吳蜀之爭損失慘重,此後形成以諸葛亮為核心人物的陣營。
諸葛亮於赤壁之戰階段出山,而後在蜀漢為相,「鞠躬盡瘁,死而後已」。劉備去世後接替劉備統領蜀漢陣營,為蜀漢江山立下汗馬功勞。
研究結論總結一下,《三國演義》人物陣營的劃分主要告訴我們四個道理:
第一、亂世出英雄;
第二、沒有永遠的朋友,也沒有永遠的敵人;
第三、敵人也可以很親密;
第四、分久必合,合久必分。
相關術語/參考文獻:1、網絡上人物親密度
親密度:定義兩個不同人物之間的親密度為他們同時出場的自然段數,也稱共現數。
自信度:每個人物的自信度定義為該人物出場自然段數除以所有人物平均出場自然段數。
由親密度和自信度構造出人物之間親密度矩陣。有了親密度矩陣,就可以對三國人物進行陣營探測了。後文將針對每一階段計算親密度矩陣。
2、Affinity Propagation算法
Affinity Propagation(以下簡稱AP)是一種聚類算法,它根據樣本點之間的相似度進行聚類,不需要事先確定類數,而是根據輸入的調節參數來調整類數,同時能夠給出每一類的代表點(或中心點)。
AP算法在本案例中用於三國人物網絡的社區探測(Community Detection),發現各階段人物陣營劃分以及各陣營的核心人物。把親密度矩陣作為相似度矩陣即可。
參考文獻:Brendan J Frey & Delbert Dueck (2007). Clustering by Passing Messages Between Data Points. Science, 315(5814) ,972-976.
3、Apriori算法
參考文獻:Agrawal, R., Mannila, H., Srikant, R., Toivonen, H. and Verkamo, A. I. (1995). Fast discovery of association rules, Advances in Knowledge Discovery and Data Mining, AAAI/MIT Press, Cambridge, MA.
(本文來自澎湃新聞,更多原創資訊請下載「澎湃新聞」APP)