嚴(yán)祥偉 雒偉群
(西藏民族大學(xué)信息工程學(xué)院,陜西 咸陽(yáng) 712082)
隨著經(jīng)濟(jì)的發(fā)展,網(wǎng)絡(luò)文字成為當(dāng)前傳遞信息最常用的載體,尤其是文本信息。在當(dāng)前計(jì)算機(jī)應(yīng)用技術(shù)進(jìn)一步成熟的趨勢(shì)下,計(jì)算機(jī)已經(jīng)可以處理身邊的許多事情。其中之一便是對(duì)中文文本的分析和處理。本文將《三國(guó)演義》的人物視作圖的節(jié)點(diǎn),對(duì)人物之間的關(guān)系抽象成圖的邊,建立了人物關(guān)系網(wǎng)絡(luò)圖,之后對(duì)網(wǎng)絡(luò)圖進(jìn)行了社群結(jié)構(gòu)劃分,將其大致劃分出了魏蜀吳三方勢(shì)力。
社群結(jié)構(gòu)由Newman[1]提出,即在一個(gè)社交網(wǎng)絡(luò)圖中,存在子圖內(nèi)個(gè)體關(guān)系緊密、子圖間個(gè)體關(guān)系稀疏?,F(xiàn)階段復(fù)雜網(wǎng)絡(luò)社群結(jié)構(gòu)劃分方法,主要分為兩種,一種是邊的分離,一種是節(jié)點(diǎn)的聚合。對(duì)于n個(gè)節(jié)點(diǎn),最多可有條邊,故在大型復(fù)雜網(wǎng)絡(luò)中,邊分離算法由于其較高的時(shí)間復(fù)雜度,明顯不如節(jié)點(diǎn)聚合算法。鑒于此,節(jié)點(diǎn)聚合類算法接連取得進(jìn)展,從Newman等[2]最初提出了一個(gè)模塊度概念。隨后,基于模塊度的社群劃分算法研究逐漸趨于成熟,F(xiàn)N(fast Newman)算法[3]和louvain算法[4]便是基于模塊度的經(jīng)典算法。louvain算法在效率和維度上,是目前公認(rèn)非重疊社區(qū)方法中最好的[5],被廣泛應(yīng)用于網(wǎng)絡(luò)的社群劃分。
自louvain算法誕生以來(lái),與此相關(guān)的應(yīng)用如雨后春筍般涌出,林定等[6]在提出一種圖的三維樹(shù)形可視化方法時(shí),利用了louvain算法對(duì)其中復(fù)雜的網(wǎng)絡(luò)關(guān)系進(jìn)行了層次聚類。徐進(jìn)等[7]利用louvain 算法對(duì)鐵路旅客社會(huì)網(wǎng)絡(luò)進(jìn)行社群劃分,提取出聯(lián)系緊密的的旅客出行團(tuán)體。黃志宏等[8]為了在網(wǎng)絡(luò)威脅入侵日志中準(zhǔn)確發(fā)現(xiàn)攻擊者,使用louvain算法對(duì)攻擊事件特征圖進(jìn)行聚類,以構(gòu)建網(wǎng)絡(luò)攻擊者畫像。生物學(xué)上,馮一城等[9]利用louvain 算法來(lái)分析社團(tuán)演化和木聚糖酶耐熱性的關(guān)系。輿情分析上,韓珂珂等[10]在新冠肺炎期間,對(duì)新浪微博上的33 萬(wàn)條數(shù)據(jù)利用louvain 算法,分析出不同區(qū)域的輿情特點(diǎn)與關(guān)注主題差異。醫(yī)學(xué)上,嚴(yán)明等[11]基于louvain 聚類方法,挖掘連花清瘟膠囊治療上呼吸道感染聯(lián)合用藥方案的規(guī)律。
以上已經(jīng)取得的相關(guān)研究成果,給我們生活帶來(lái)了極大改變,但就目前而言,在文學(xué)上,利用louvain算法對(duì)文中人物的社群劃分卻鮮有研究。尤其是人物關(guān)系錯(cuò)綜復(fù)雜的文學(xué)小說(shuō)。本文對(duì)《三國(guó)演義》人物關(guān)系網(wǎng)絡(luò)進(jìn)行了louvain 算法社群劃分。深度挖掘了文中人物關(guān)系,引導(dǎo)我們從不同角度進(jìn)行思考,旨在幫助讀者深入理解小說(shuō)。
louvain 算法由BLONDEL V D、GUILLAUME JL、LAMBIOTTE R、LEFEBVREE 四人提出,也稱BGLL 算法。它是一種基于模塊度(Modularity)Q 的社群劃分算法。模塊度Q 是經(jīng)過(guò)某種特定劃分結(jié)果的聚合性與隨機(jī)劃分結(jié)果聚合性之間的差值[12],常用來(lái)評(píng)價(jià)社群劃分結(jié)果的質(zhì)量。模塊度Q 越大,表明社群劃分結(jié)果越好。
在一個(gè)有權(quán)的網(wǎng)絡(luò)中,模塊度的定義如公式1:
對(duì)(1)化簡(jiǎn)得公式2:
Σin表示社群C 中所有邊的權(quán)值和,Σtot表示連接到社群C 的所有邊的權(quán)值和。(2)式可以看出社群C 的模塊度為其下各個(gè)社群模塊度之和??煞謩e進(jìn)行計(jì)算。
Louvain 算法基于模塊度,可對(duì)社群進(jìn)行高效劃分,主要分為兩個(gè)階段。
在第一階段初始時(shí),我們將每一個(gè)節(jié)點(diǎn)視作一個(gè)獨(dú)立社群。
①按照一定次序遍歷整個(gè)網(wǎng)絡(luò),對(duì)于每個(gè)節(jié)點(diǎn),將其嘗試分配到任意鄰居節(jié)點(diǎn)所在的社群,計(jì)算其加入前后,目標(biāo)社群模塊性增量?Q,如果?Q>0,則將節(jié)點(diǎn)添加進(jìn)使?Q最大的那個(gè)社群。
模塊性增量?Q如公式3:
公式(3)為節(jié)點(diǎn)a 移動(dòng)到社群C,其模塊性增量?!苅n與∑tot含義見(jiàn)公式(2)說(shuō)明。Ka,in表示節(jié)點(diǎn)a到社群C所有邊的權(quán)值和。
②對(duì)所有節(jié)點(diǎn),迭代執(zhí)行上述步驟,直到?jīng)]有節(jié)點(diǎn)可移動(dòng)。
例如:對(duì)于圖1 左邊所示網(wǎng)絡(luò)圖結(jié)構(gòu),圖1 右邊為第一階段結(jié)束狀態(tài)。
第二階段時(shí),我們將前述所得的劃分結(jié)果,重新視為一個(gè)網(wǎng)絡(luò)圖,網(wǎng)絡(luò)圖的節(jié)點(diǎn)為第一階段劃分出的社群,將其視為超節(jié)點(diǎn)。超節(jié)點(diǎn)的權(quán)值為社群內(nèi)部邊的權(quán)值和,超節(jié)點(diǎn)之間邊的權(quán)值為社群外部邊的權(quán)值和。
對(duì)超節(jié)點(diǎn)構(gòu)成的新圖,迭代執(zhí)行①②步驟,直到?jīng)]有超節(jié)點(diǎn)可移動(dòng)。如圖2所示為第二階段結(jié)束狀態(tài)。
以四大名著之一《三國(guó)演義》為例,將其作為實(shí)驗(yàn)對(duì)象,對(duì)其中人物建立網(wǎng)絡(luò)圖,使用三種不同方式可視化,并用louvain算法進(jìn)行社群劃分。
實(shí)驗(yàn)概要設(shè)計(jì):
(1)實(shí)驗(yàn)前期準(zhǔn)備,列出了實(shí)驗(yàn)環(huán)境及設(shè)備。
(2)數(shù)據(jù)及預(yù)處理,一是說(shuō)明了研究所用文本數(shù)據(jù)及其來(lái)源;二是考慮到中文不存在天然的詞語(yǔ)劃分標(biāo)志,對(duì)《三國(guó)演義》文本進(jìn)行了分詞,并對(duì)其中需要分析的人物建立了實(shí)體,為后續(xù)數(shù)據(jù)分析做準(zhǔn)備。
(3)關(guān)系網(wǎng)絡(luò)圖生成,依照鄰近共現(xiàn)規(guī)則建立人物關(guān)系網(wǎng)絡(luò)圖。
(4)人物關(guān)系網(wǎng)絡(luò)圖可視化,使用三種不同方式對(duì)建立的人物關(guān)系網(wǎng)絡(luò)圖進(jìn)行了可視化。
(5)人物關(guān)系網(wǎng)絡(luò)圖社群劃分,對(duì)人物網(wǎng)絡(luò)圖節(jié)點(diǎn)進(jìn)行了基于louvain 算法社群劃分,劃分出人物社群。
實(shí)驗(yàn)環(huán)境及設(shè)備如表1:
表1 實(shí)驗(yàn)環(huán)境及設(shè)備
2.2.1 獲取文本數(shù)據(jù)。本文所用數(shù)據(jù)為《三國(guó)演義》全文文本,來(lái)源于“古詩(shī)文網(wǎng)”(https://so.gushiwen.cn/guwen/ book_46653FD803893E4F7F702BCF1F7CCE17.aspx)。它的獲取得益于python爬蟲(chóng)技術(shù),對(duì)其進(jìn)行逐章爬取。
網(wǎng)絡(luò)爬蟲(chóng)通俗來(lái)講是一段在網(wǎng)絡(luò)上自動(dòng)抓取信息的程序,在法律允許的范圍內(nèi),可以方便快捷的實(shí)現(xiàn)數(shù)據(jù)的搜索和下載。它可以為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成[13]。傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)從一個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,首先需要獲得初始網(wǎng)頁(yè)上的URL,并響應(yīng)其中內(nèi)容,從當(dāng)前頁(yè)面不斷抽取所需要的信息,或者新的URL 繼續(xù)迭代,直到爬取完所需信息。在python 中有許多可以用于數(shù)據(jù)爬取的第三方庫(kù),方便快捷易于編寫。
本文使用了python 中兩個(gè)功能強(qiáng)大的爬蟲(chóng)相關(guān)庫(kù),requests 和lxml。requests 庫(kù)作為一種HTTP 庫(kù),在urllib 基礎(chǔ)上進(jìn)一步封裝,用來(lái)進(jìn)行網(wǎng)頁(yè)下載,獲取響應(yīng)內(nèi)容。在爬蟲(chóng)中,發(fā)揮主要作用的是lxml網(wǎng)頁(yè)解析庫(kù),采用了該庫(kù)支持的XPath 解析方式對(duì)網(wǎng)頁(yè)的各個(gè)標(biāo)簽進(jìn)行解析,找到所需文本數(shù)據(jù)后,爬取到txt 文檔即可。將爬取下來(lái)的文本數(shù)據(jù)經(jīng)過(guò)簡(jiǎn)單預(yù)處理后,以json格式存儲(chǔ)。
2.2.2 中文分詞。中文分詞是指將中文文本基于某種需求劃分為“詞”的過(guò)程[14]。目前常用的分詞方法為基于統(tǒng)計(jì)的分詞方法。即是根據(jù)字和詞的統(tǒng)計(jì)信息,把相鄰字間的信息、詞頻及相應(yīng)的共現(xiàn)信息等應(yīng)用于分詞。
Jieba分詞是Python環(huán)境中常用的分詞工具,它屬于基于統(tǒng)計(jì)詞典的分詞方法。有三個(gè)主要特點(diǎn),一是支持3 種分詞模式,分別是精確模式、全模式、搜索引擎模式;二是支持繁體分詞;三是支持自定義詞典[15]。
于本文來(lái)說(shuō),由于Jieba 分詞支持自定義詞典,帶給本文了極大便捷。除了自定義詞典,它本身就具有一個(gè)名為dict.txt 的詞典,擁有2000 多個(gè)中文字詞,由人民日?qǐng)?bào)等語(yǔ)料數(shù)據(jù)訓(xùn)練。其大致工作流程為先將載入的dict 詞典生成Trie 樹(shù),再利用dict 詞典對(duì)輸入句子進(jìn)行切分,生成分詞的有向無(wú)環(huán)圖(DAG)。從DAG圖中可以得出該句子的多種分詞路徑,找出其最短路徑。對(duì)于未登陸詞典的詞,采用隱馬爾可夫模型(Hidden Markov Model)來(lái)預(yù)測(cè)分詞,實(shí)現(xiàn)新詞發(fā)現(xiàn)。使用維特比(Viterbi)算法動(dòng)態(tài)規(guī)劃來(lái)得到分詞和標(biāo)注。最后基于TF-IDF 和textrank 模型來(lái)提取關(guān)鍵詞。隨著大規(guī)模語(yǔ)料庫(kù)建立,jieba 分詞的實(shí)用性較好,能夠?qū)ξ谋具M(jìn)行高效處理。它與python 中相關(guān)工具庫(kù)的結(jié)合,在文本分析、識(shí)別上具有廣闊的應(yīng)用前景。
本文使用內(nèi)置了jieba 的harvesttext 庫(kù),對(duì)全文文本進(jìn)行切分,實(shí)際操作中分為以下兩個(gè)步驟:
(1)登錄新詞
文本切分時(shí),如果直接使用常規(guī)分詞,可能將文中的不可分割的名詞分開(kāi),故應(yīng)先指定出專有名詞,將其作為新詞登錄到詞典中。以下展示了是否登陸新詞的不同分詞結(jié)果:
常規(guī)分詞:武鄉(xiāng)侯/七擒/南蠻/王
登陸“南蠻王”后:武鄉(xiāng)侯/七擒/南蠻王
(2)實(shí)體鏈接
《三國(guó)演義》中許多人物有不同的別稱,如南蠻王即是孟獲的別稱,武鄉(xiāng)侯指的是諸葛亮。此外諸葛亮還有臥龍、孔明等別稱,此時(shí)需要將別稱統(tǒng)一處理,即文中所有地方出現(xiàn)的“臥龍”“孔明”“武鄉(xiāng)侯”,都將其視作“諸葛亮”。為達(dá)到這一目的,我們將專有名詞諸葛亮建成一個(gè)實(shí)體,并指定人名類型,對(duì)實(shí)體的抽取調(diào)用了harvesttext庫(kù)。在本實(shí)驗(yàn)中建立了1064個(gè)人物實(shí)體。
建成實(shí)體,指定類型格式如下:
對(duì)于建成的實(shí)體在分詞時(shí)優(yōu)先切分出來(lái),而后內(nèi)置的jieba庫(kù)再對(duì)句子進(jìn)行常規(guī)切分,選擇將別稱替換為對(duì)應(yīng)實(shí)體名,如下:
“武鄉(xiāng)侯/七擒/南蠻王”
“諸葛亮/七擒/孟獲”
網(wǎng)絡(luò)的構(gòu)建分為節(jié)點(diǎn)和邊的構(gòu)建。提取文中實(shí)體,將其作為網(wǎng)絡(luò)節(jié)點(diǎn)。網(wǎng)絡(luò)邊則定義為實(shí)體之間的聯(lián)系。采用鄰近共現(xiàn)關(guān)系,即兩個(gè)實(shí)體在相鄰兩句話內(nèi)同時(shí)出現(xiàn),則視之存在聯(lián)系,其間繪制這條邊,由此得到共現(xiàn)網(wǎng)絡(luò)。實(shí)體間聯(lián)系的次數(shù)則以邊的權(quán)重表示,這種共現(xiàn)關(guān)系每出現(xiàn)一次,則邊的權(quán)重加1。
本文的具體操作先將文本切分為單句,形成單句列表[1,2,3,...],進(jìn)而構(gòu)造成二連句列表,形如[12,23,34,...],逐個(gè)提取二連句使用harvesttext 庫(kù)處理,該庫(kù)利用鄰近共現(xiàn)規(guī)則,將二連句中實(shí)體和實(shí)體之間的關(guān)系識(shí)別出來(lái),識(shí)別實(shí)體的過(guò)程稱作命名實(shí)體識(shí)別。最后使用其內(nèi)置的networkx 庫(kù)繪制節(jié)點(diǎn)和邊,形成人物關(guān)系網(wǎng)絡(luò)圖。
如以下二連句示例,及其對(duì)應(yīng)的網(wǎng)絡(luò)如圖3:
①程遠(yuǎn)志大怒,遣副將鄧茂出戰(zhàn)。
②張飛挺丈八蛇矛直出,手起處,刺中鄧茂心窩,翻身落馬。
以上二連句中出現(xiàn)了三個(gè)人物:程遠(yuǎn)志、鄧茂、張飛,則繪制出三個(gè)節(jié)點(diǎn)。由于張飛、程遠(yuǎn)志在相鄰兩句話中只出現(xiàn)了一次,則他們之間加一條邊。由于鄧茂在相鄰兩句話中出現(xiàn)了兩次,則在鄧茂-張飛、鄧茂-程遠(yuǎn)志之間加兩條邊。
在后續(xù)處理其他二連句時(shí),繼續(xù)向其中加入節(jié)點(diǎn)和邊,逐漸形成全文人物關(guān)系網(wǎng)絡(luò)圖。
對(duì)于數(shù)據(jù)的可視化,有多種選擇,最常用的是基于標(biāo)簽云、基于樹(shù)圖以及基于關(guān)聯(lián)的文本可視化。由于本文是人物之間的共現(xiàn)關(guān)系建立的人物關(guān)系網(wǎng)絡(luò)圖,在可視化時(shí),應(yīng)充分凸顯人物實(shí)體之間的聯(lián)系。為了達(dá)到這一要求,采用基于實(shí)體關(guān)聯(lián)的文本可視化,這種可視化更好的給讀者反映了實(shí)體之間的多層面信息,也更便于社群的劃分及展示。以下使用不同的方式對(duì)建立的網(wǎng)絡(luò)圖進(jìn)行可視化:
2.4.1 matplotlib 庫(kù)可視化網(wǎng)絡(luò)圖。對(duì)于networkx 構(gòu)建的網(wǎng)絡(luò)圖,可直接使用matplotlib庫(kù)進(jìn)行可視化。只需將節(jié)點(diǎn)的度對(duì)應(yīng)為節(jié)點(diǎn)的大小,邊的權(quán)重對(duì)應(yīng)為邊的寬度,調(diào)用pyplot.show()即可顯示之。這里使用FR(Fruchterman-Reingold)布局算法布局網(wǎng)絡(luò)圖,F(xiàn)R算法基于粒子物理理論,將節(jié)點(diǎn)模擬成原子,模擬原子間的力場(chǎng)來(lái)計(jì)算節(jié)點(diǎn)間的位置關(guān)系,反映了網(wǎng)絡(luò)圖人物之間的“遠(yuǎn)近”。通過(guò)考慮原子間引力和斥力的互相作用,計(jì)算得到節(jié)點(diǎn)的速度和加速度,最終進(jìn)入一種動(dòng)態(tài)平衡狀態(tài)。
以每個(gè)章節(jié)作為建圖最小單位,即可研究任意章節(jié)范圍的人物關(guān)系。對(duì)第49 章(赤壁之戰(zhàn))建立的人物關(guān)系網(wǎng)絡(luò)圖有40 個(gè)節(jié)點(diǎn),篩選出節(jié)點(diǎn)度大于等于5的人物節(jié)點(diǎn)如圖4。圖中有23 個(gè)主要人物,其中黃蓋、周瑜、諸葛亮、曹操節(jié)點(diǎn)較大,連線較寬,視為赤壁之戰(zhàn)的主角,符合史實(shí)。
分別建立120 個(gè)章節(jié)的人物網(wǎng)絡(luò)圖,然后將其合并成一個(gè)總的網(wǎng)絡(luò)圖,總圖表現(xiàn)了三國(guó)演義中1064個(gè)人物實(shí)體的關(guān)系。取總圖最大連通分量,并篩選出度大于等于50 的人物節(jié)點(diǎn)。得到全文的85 個(gè)主要人物網(wǎng)絡(luò)如圖5所示,處于全圖中心位置,節(jié)點(diǎn)大的視為全文的核心人物。
2.4.2 pyecharts 庫(kù)可視化網(wǎng)絡(luò)圖。對(duì)于已經(jīng)構(gòu)建好的networkx 型Graph 圖,還可以進(jìn)一步重構(gòu)節(jié)點(diǎn)和邊的數(shù)據(jù),將其改造成pyecharts 庫(kù)可識(shí)別的結(jié)構(gòu),并調(diào)用pyecharts庫(kù)進(jìn)行可視化,生成一個(gè)Echarts圖表。
Echarts 是一個(gè)使用JavaScrit 實(shí)現(xiàn)的開(kāi)源可視化庫(kù),在python 環(huán)境下需通過(guò)PyEcharts 庫(kù)對(duì)接口進(jìn)行調(diào)用,生成的Echarts 圖表,可流暢地運(yùn)行在PC 和移動(dòng)設(shè)備上,兼容當(dāng)前絕大部分瀏覽器[16],圖表作為一個(gè)獨(dú)立網(wǎng)頁(yè)存在。使用Pyecharts 生成的網(wǎng)絡(luò)圖如圖6,相比matplotlib 生成的人物網(wǎng)絡(luò),具有的一定的可交互性。
2.4.3 Gephi 軟件可視化網(wǎng)絡(luò)圖。生成網(wǎng)絡(luò)圖時(shí),不僅可以在python 環(huán)境下調(diào)用第三方庫(kù),還可以借助分析網(wǎng)絡(luò)圖更專業(yè)的Gephi軟件。Gephi基于JVM開(kāi)發(fā),可用于多種網(wǎng)絡(luò)和復(fù)雜系統(tǒng)的可視化,它在應(yīng)對(duì)復(fù)雜網(wǎng)絡(luò)系統(tǒng)上,能進(jìn)行更強(qiáng)大的人機(jī)交互性分析[17]。在構(gòu)建pyecharts 型人物網(wǎng)絡(luò)圖時(shí),可將節(jié)點(diǎn)和邊的信息連帶輸出,生成一個(gè)csv 文件,使用Gephi 軟件打開(kāi)該csv 文件,即可得到人物網(wǎng)絡(luò)如圖7 所示,在Gephi 軟件中可以對(duì)圖進(jìn)行更多的交互性操作。
對(duì)于建立的人物關(guān)系網(wǎng)絡(luò)圖,我們采用louvain算法對(duì)其進(jìn)行社群劃分。
由于《三國(guó)演義》全文時(shí)間跨度較長(zhǎng),到第98 回,孫權(quán)最后一個(gè)稱帝時(shí),三國(guó)鼎立完全建立。我們?nèi)∏?8個(gè)章節(jié),建立全網(wǎng)絡(luò)圖。同樣篩選出節(jié)點(diǎn)度大于等于50的人物,計(jì)72個(gè)主要人物,進(jìn)行基于louvain算法的社群劃分。使用louvain 算法將前98 個(gè)章節(jié)人物關(guān)系圖劃分結(jié)果如圖8~10。
在圖中大致劃分出了魏蜀吳三方勢(shì)力:
魏勢(shì)力中人物多而雜,不僅有曹魏將領(lǐng),也有曹操早期敵對(duì)人物,這是由于曹操發(fā)跡于北方,從起兵征伐董卓開(kāi)始,歷經(jīng)數(shù)十年征戰(zhàn),消滅呂布、袁術(shù)、袁紹等,驅(qū)逐馬超、馬岱,一統(tǒng)北方。使曹魏政權(quán)有了在北方大片地區(qū)建立的基礎(chǔ)。故這些早期敵對(duì)人物也都出現(xiàn)在了曹魏北方集團(tuán)里。
蜀勢(shì)力中,人物節(jié)點(diǎn)較多較大,主要因?yàn)樽髡吡_貫中,較為傾向蜀漢正統(tǒng)。從《三國(guó)演義》開(kāi)篇從桃園三結(jié)義講起,以劉關(guān)張、諸葛亮等作為主線,詳細(xì)敘述了他們的經(jīng)歷。故蜀漢集團(tuán)人物出場(chǎng)次數(shù)較多。值得注意的是,司馬懿也赫然在列,這是由于司馬懿本身出場(chǎng)比較晚,加上曹操在世時(shí),未重用司馬懿,導(dǎo)致他出場(chǎng)率不是很高。直到諸葛亮北伐時(shí),曹睿才被迫啟用司馬懿,他的大多數(shù)出場(chǎng)都與諸葛亮鄰近共現(xiàn)。在建立網(wǎng)絡(luò)圖時(shí),系統(tǒng)并不知道司馬懿和諸葛亮作為對(duì)手而存在,只是按照鄰近共現(xiàn)的規(guī)則將他們一同提取出來(lái),所以二者的聯(lián)系相對(duì)緊密,甚至超過(guò)了在各自集團(tuán)中與其他人的聯(lián)系程度。所以司馬懿被系統(tǒng)錯(cuò)誤的劃進(jìn)了蜀集團(tuán)。
吳勢(shì)力中,出現(xiàn)人物較少,這是由于在《三國(guó)演義》中,許多篇幅描寫的都是蜀漢正統(tǒng)和曹魏篡漢政權(quán)的爭(zhēng)斗,東吳集團(tuán)從孫堅(jiān)父子三人開(kāi)始,便處于割據(jù)勢(shì)力,很少主動(dòng)參與中原爭(zhēng)斗,在三足鼎立中作為平衡的杠桿,相比其他兩方,人物出場(chǎng)次數(shù)較少。
本文結(jié)合python 數(shù)據(jù)處理技術(shù)對(duì)《三國(guó)演義》文本人物進(jìn)行了社群劃分。在爬取全文文本數(shù)據(jù)后,使用中文分詞技術(shù)對(duì)其進(jìn)行處理,并將《三國(guó)演義》的人物依據(jù)鄰近共現(xiàn)關(guān)系建立人物關(guān)系網(wǎng)絡(luò)圖。對(duì)網(wǎng)絡(luò)圖分別使用matplotlib 庫(kù)、pyecharts 庫(kù)、gephi 軟件進(jìn)行可視化。實(shí)驗(yàn)結(jié)果對(duì)人物進(jìn)行了基于louvain 算法的社群劃分,劃分結(jié)果有一定的趣味性,在激發(fā)讀者興趣、提供專業(yè)讀者以不同角度的思考方面,有一定的應(yīng)用價(jià)值。
但本文的不足之處也顯而易見(jiàn):一是使用鄰近共現(xiàn)規(guī)則建圖,只能識(shí)別人物在文中物理位置的“鄰近”,無(wú)法識(shí)別文章作者真正想表達(dá)的“親疏”關(guān)系;二是在社群劃分時(shí),只是單純使用louvain 算法進(jìn)行劃分。并未對(duì)算法加以改進(jìn)或融合適宜文本人物關(guān)系劃分的某種方法,以致劃分結(jié)果并不十分精確。
后續(xù)研究可圍繞這兩個(gè)問(wèn)題,以期將文本人物的親疏遠(yuǎn)近精確的劃分出來(lái),從《三國(guó)演義》文本推而廣之到其他文本。