桑麗麗 朱晗



摘要:文章研究如何使用Neo4J圖數(shù)據(jù)庫(kù)技術(shù)對(duì)人物事件關(guān)系進(jìn)行有效數(shù)字化存儲(chǔ)和查詢。首先,通過(guò)與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)對(duì)比,分析了Neo4J數(shù)據(jù)庫(kù)在復(fù)雜關(guān)系存儲(chǔ)和查詢方面的優(yōu)勢(shì),然后以“常州三杰”為例,分析了人物事件關(guān)系知識(shí)圖譜中的五大實(shí)體類型及其相互關(guān)系類型。在此基礎(chǔ)上分析了如何借助Py2neo和Pandas庫(kù)對(duì)“常州三杰”知識(shí)圖譜進(jìn)行自動(dòng)化的構(gòu)建并存儲(chǔ)到Neo4J數(shù)據(jù)庫(kù)中,最后分析了如何對(duì)存儲(chǔ)在Neo4J的知識(shí)圖譜進(jìn)行有效的數(shù)據(jù)查詢。
關(guān)鍵詞:知識(shí)圖譜;人物事件關(guān)系;Neo4J
中圖分類號(hào):TP311.52? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)22-0018-03
1 引言
瞿秋白、張?zhí)住链⑹浅錾?9世紀(jì)末的三位杰出革命青年,也是中國(guó)共產(chǎn)黨早期的主要領(lǐng)導(dǎo)人,他們均是江蘇常州籍貫,故稱為“常州三杰”[1]。“常州三杰”犧牲時(shí)非常年輕,他們短暫一生中所體現(xiàn)的滿腔愛(ài)國(guó)精神、革命奮斗精神和堅(jiān)定不移的共產(chǎn)主義信念是當(dāng)代青年的學(xué)習(xí)榜樣[2]。
目前,有關(guān)“常州三杰”的革命事跡大多以圖文和影視資料的形式展示,側(cè)重于以主人翁為中心、以時(shí)間順序?yàn)橹骶€進(jìn)行闡述。然而,“常州三杰”出生成長(zhǎng)于相同的時(shí)代背景,彼此之間在時(shí)間和空間上存在一定程度的關(guān)聯(lián)性,研究他們之間的人物事件關(guān)系可以更深入立體地感受常州三杰的革命事跡。
人物事件關(guān)系是具體人物圍繞具體事件而產(chǎn)生的相互關(guān)系,這種人物和事物之間的相互關(guān)系可以通過(guò)知識(shí)圖譜進(jìn)行描述、存儲(chǔ)并查詢展示。Neo4J是當(dāng)前流行的圖數(shù)據(jù)庫(kù)軟件,它不僅僅能夠支持圖型數(shù)據(jù)的存儲(chǔ)和查詢,也支持使用Python等高級(jí)程序語(yǔ)言調(diào)用應(yīng)用程序接口管理和查詢圖型數(shù)據(jù),從而能夠發(fā)現(xiàn)數(shù)據(jù)之間復(fù)雜和潛在的關(guān)系[3]。
2 基于Neo4J的圖數(shù)據(jù)庫(kù)簡(jiǎn)介
Neo4J圖型數(shù)據(jù)庫(kù)不同于傳統(tǒng)的數(shù)據(jù)庫(kù),它沒(méi)有表和字段的概念,取而代之的是實(shí)體、關(guān)系和屬性。它使用明確的關(guān)系(Relationship) 來(lái)代替?zhèn)鹘y(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中表與表之間隱藏的關(guān)系,從而更容易表述現(xiàn)實(shí)世界中事物之間的關(guān)系[4]。在Neo4J中實(shí)體與實(shí)體之間通過(guò)明確的關(guān)系產(chǎn)生鏈接,而關(guān)系的屬性和名稱可以由設(shè)計(jì)者根據(jù)實(shí)際情況自由定義,沒(méi)有傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的范式要求,因此,Neo4J數(shù)據(jù)庫(kù)的模型設(shè)計(jì)也更加自由。盡管如此,在構(gòu)建基于Neo4J的知識(shí)圖譜之前依然有必要對(duì)圖型數(shù)據(jù)庫(kù)的模型進(jìn)行分析,從而確保后期數(shù)據(jù)管理的規(guī)范性和一致性。
3 知識(shí)圖譜中人物事件的關(guān)系分析
在領(lǐng)域知識(shí)獲取方面,首先通過(guò)百度百科了解有關(guān)瞿秋白、張?zhí)住链h的人物履歷和大事年表,然后再參考中信出版社出版的《瞿秋白年譜詳編》、上海辭書(shū)出版社的《張?zhí)啄曜V新編》以及華中師范大學(xué)出版社的《惲代英年譜》,對(duì)常州三杰的革命成長(zhǎng)歷程深入對(duì)比分析。
通過(guò)對(duì)文獻(xiàn)資料的梳理可以發(fā)現(xiàn):有關(guān)歷史人物事件的描述過(guò)程中主要存在五個(gè)實(shí)體,即:歷史人物、歷史事件、組織機(jī)構(gòu)、歷史文物、角色職位。其中,組織機(jī)構(gòu)實(shí)體又可以細(xì)分為:學(xué)校、黨派、組織、出版社等具體的形態(tài),歷史事件可以具體細(xì)分運(yùn)動(dòng)、事件與會(huì)議等形態(tài)。每種實(shí)體都具有不同的屬性,比如歷史人物具有姓名、出生日期、籍貫、人物詳情等屬性,而歷史事件具有發(fā)生時(shí)間和發(fā)生地點(diǎn)等屬性,組織機(jī)構(gòu)也具有名稱、成立時(shí)間、成立地點(diǎn)等屬性。具體見(jiàn)表1。這些實(shí)體之間也存在著不同的關(guān)聯(lián)關(guān)系,需要在知識(shí)圖譜中描述并展示。
在“常州三杰”知識(shí)圖譜的研究中,歷史人物實(shí)體是指在歷史事件、組織機(jī)構(gòu)中與“常州三杰”關(guān)聯(lián)的主要?dú)v史人物的集合。通過(guò)對(duì)文獻(xiàn)資料的梳理,可以發(fā)現(xiàn)歷史人物之間存在各種關(guān)聯(lián)關(guān)系,這些關(guān)聯(lián)關(guān)系具體可以劃分為:支持、批評(píng)、反對(duì)、敵對(duì)、朋友、戰(zhàn)友、校友、翻譯、夫妻、父子、父女、母子、母女等關(guān)系。其中,有些歷史人物的關(guān)系是長(zhǎng)期固定不變的,比如:瞿秋白與張?zhí)字g的校友關(guān)系和朋友關(guān)系是不變化的,另外一些歷史人物的關(guān)系是僅出現(xiàn)于某個(gè)歷史時(shí)刻的[5]。因此,上述歷史人物關(guān)系都需要設(shè)置關(guān)系產(chǎn)生的時(shí)間屬性。
歷史人物與歷史事件之間的關(guān)系也需要在知識(shí)圖譜模型中體現(xiàn)。這種關(guān)系是根據(jù)歷史人物在歷史事件中扮演的角色進(jìn)行劃分的。在上述實(shí)體分析中歷史事件具有運(yùn)動(dòng)、事件、起義和會(huì)議等多種具體形態(tài)。1) 歷史人物與歷史運(yùn)動(dòng)、起義事件的關(guān)系可以劃分為參加和領(lǐng)導(dǎo)兩類關(guān)系。比如:與“常州三杰”相關(guān)的主要?dú)v史運(yùn)動(dòng)包括:五四運(yùn)動(dòng)、五卅運(yùn)動(dòng)和廣州起義等,張?zhí)住Ⅵ那锇着c五四運(yùn)動(dòng)的關(guān)系是參加,張?zhí)着c廣州起義的關(guān)系是領(lǐng)導(dǎo),瞿秋白與五卅運(yùn)動(dòng)之間關(guān)系也是領(lǐng)導(dǎo)。2) 歷史人物與會(huì)議之間關(guān)系可以劃分為參加與主持兩類關(guān)系。比如瞿秋白主持了中國(guó)共產(chǎn)黨第六次全國(guó)代表大會(huì)。
歷史人物與組織機(jī)構(gòu)之間的關(guān)聯(lián)關(guān)系較為復(fù)雜。“常州三杰”在革命成長(zhǎng)的過(guò)程中不斷追求真理、尋求進(jìn)步,積極投身到各種進(jìn)步學(xué)術(shù)團(tuán)體和研究會(huì),組建了各種民主革命運(yùn)動(dòng),他們?cè)诓煌M織結(jié)構(gòu)中擔(dān)任的職務(wù)角色也會(huì)不斷發(fā)生變化。因此,本文首先將涉及的學(xué)校、學(xué)會(huì)、出版機(jī)構(gòu)和進(jìn)步團(tuán)體等在圖數(shù)據(jù)模型中抽象表示為組織機(jī)構(gòu)實(shí)體;對(duì)組織結(jié)構(gòu)實(shí)體設(shè)置名稱屬性進(jìn)行具體區(qū)分,還設(shè)置了成立時(shí)間、成立地點(diǎn)和機(jī)構(gòu)介紹等屬性,使得每個(gè)組織結(jié)構(gòu)的實(shí)例具體明確,便于區(qū)分。另外,在歷史人物和組織機(jī)構(gòu)之間增加中間實(shí)體角色職位,因?yàn)闅v史人物主要是通過(guò)角色職位來(lái)與組織機(jī)構(gòu)發(fā)生聯(lián)系的。從而使歷史人物與組織機(jī)構(gòu)之間的復(fù)雜關(guān)系轉(zhuǎn)變?yōu)闅v史人物與職位及組織機(jī)構(gòu)與職位的兩層關(guān)系。歷史人物與職位之間的關(guān)系主要是任職和離職關(guān)系,而職位與組織機(jī)構(gòu)之間主要是設(shè)立和撤銷關(guān)系。
如果歷史人物與組織機(jī)構(gòu)之間是簡(jiǎn)單地創(chuàng)建或加入關(guān)系,那么只需要直接將兩個(gè)實(shí)體進(jìn)行關(guān)聯(lián),關(guān)系的名稱就設(shè)置為創(chuàng)建或加入。比如:李大釗創(chuàng)建了北京大學(xué)馬克思學(xué)說(shuō)研究會(huì);張?zhí)准尤肓吮本┐髮W(xué)馬克思學(xué)說(shuō)研究會(huì)。
如果歷史人物與組織機(jī)構(gòu)之間存在擔(dān)任職位的關(guān)系,那么需要額外地加入職位實(shí)體。比如:有關(guān)瞿秋白在上海大學(xué)的擔(dān)任過(guò)教務(wù)長(zhǎng)的描述,在圖數(shù)據(jù)模型中可以設(shè)置歷史人物實(shí)體與職位實(shí)體之間是任職關(guān)系,而組織機(jī)構(gòu)實(shí)體與職位實(shí)體之間就是設(shè)立關(guān)系。另一方面,歷史人物在組織機(jī)構(gòu)的任職是動(dòng)態(tài)變化的。因此,有必要在歷史人物與職位的任職、離職關(guān)系中以及組織機(jī)構(gòu)與職位的設(shè)立、撤銷關(guān)系中均增加時(shí)間屬性,以便于描述在不同歷史時(shí)期下,歷史人物與組織機(jī)構(gòu)的關(guān)聯(lián)關(guān)系以及歷史人物職位上的變化。
歷史人物與歷史文物之間的關(guān)系需要根據(jù)歷史文物的具體形態(tài)進(jìn)行劃分,如果歷史文物是具有內(nèi)容或觀點(diǎn)的文章或書(shū)籍,那么歷史人物與此類文物之間的關(guān)系包括:創(chuàng)作、發(fā)表、支持、反對(duì)等。如果歷史文物是一件物品,那么歷史人物與此類文物之間的關(guān)系包括:創(chuàng)造、擁有和失去的關(guān)系,其他類型的文物與歷史人物之間的關(guān)系可以簡(jiǎn)單概括為相關(guān)關(guān)系。歷史人物與文物之間的關(guān)系也會(huì)因時(shí)間的推移發(fā)生改變,因此需要為歷史人物與文物之間的具體關(guān)系,增加發(fā)生時(shí)間、發(fā)生地點(diǎn)等屬性。
組織機(jī)構(gòu)與歷史事件之間的關(guān)系需要根據(jù)歷史事件類型進(jìn)行劃分:如果歷史事件是會(huì)議,那么組織機(jī)構(gòu)與會(huì)議之間既可以是以組織機(jī)構(gòu)為主導(dǎo)的召開(kāi)關(guān)系,如中國(guó)社會(huì)主義青年團(tuán)召開(kāi)了共青團(tuán)第三次全國(guó)代表大會(huì);也可以是會(huì)議成立了某個(gè)組織機(jī)構(gòu)。
歷史事件與職位也會(huì)產(chǎn)生關(guān)聯(lián),而職位進(jìn)一步通過(guò)與歷史人物的任職關(guān)系以及職務(wù)與組織機(jī)構(gòu)的設(shè)立和撤銷關(guān)系,比如中共五屆一中全會(huì)上選舉了瞿秋白為中央政治局委員,那么這里歷史事件形態(tài)是會(huì)議,它與職位之間是設(shè)置關(guān)系,歷史人物與職位之間是任職關(guān)系,而組織機(jī)構(gòu)與職位之間是設(shè)置關(guān)系。這樣的歷史事件將所有的實(shí)體關(guān)聯(lián)到一起形成了關(guān)系網(wǎng)絡(luò)圖結(jié)構(gòu)。
綜合以上分析可以得到五大實(shí)體之間的主要關(guān)系如表2所示。可見(jiàn),歷史人物、歷史事件、組織機(jī)構(gòu)及歷史文物之間是具有復(fù)雜關(guān)系的網(wǎng)絡(luò)模型,使用傳統(tǒng)二維表的關(guān)系型數(shù)據(jù)模型難以描述和維護(hù),而使用基于Neo4J的圖數(shù)據(jù)模型能夠更直觀地描述和維護(hù)。
4 基于Neo4J的“常州三杰”知識(shí)圖譜構(gòu)建
使用Neo4J創(chuàng)建的知識(shí)圖譜由節(jié)點(diǎn)和節(jié)點(diǎn)之間關(guān)系構(gòu)成。每個(gè)節(jié)點(diǎn)都具有標(biāo)簽(Label) 和屬性(Properties) [4]。通過(guò)上述數(shù)據(jù)模型的分析,在Neo4J數(shù)據(jù)庫(kù)中添加五種類型的節(jié)點(diǎn):歷史人物、歷史事件、組織機(jī)構(gòu)、歷史文物和職位。節(jié)點(diǎn)的Label值分別是Person、Event、Agency、Things和Role,并按照表1中的實(shí)體屬性設(shè)置每個(gè)節(jié)點(diǎn)的屬性。
Neo4J支持使用自帶的Cypher查詢命令語(yǔ)言手工添加節(jié)點(diǎn),但是由于常州三杰文獻(xiàn)資料中涉及的人物較多,完全手工添加數(shù)據(jù)不僅效率低,而且容易出錯(cuò)。本文借助Python程序設(shè)計(jì)的Pandas庫(kù)和Py2neo庫(kù)來(lái)實(shí)現(xiàn)對(duì)知識(shí)圖譜中節(jié)點(diǎn)數(shù)據(jù)的自動(dòng)化創(chuàng)建。
Pandas庫(kù)是開(kāi)源的結(jié)構(gòu)化數(shù)據(jù)分析工具,它可以讀取諸如Excel、txt、csv等多種格式的數(shù)據(jù)源,并具高性能的數(shù)據(jù)運(yùn)算功能[5]。利用Pandas庫(kù)的read_excel方法,傳入文件名就可以很方便地讀取Excel表中的數(shù)據(jù),進(jìn)入進(jìn)行數(shù)據(jù)清洗和分析。
Py2neo庫(kù)是Python程序訪問(wèn)Neo4J數(shù)據(jù)庫(kù)的開(kāi)源工具包,Python程序可以利用Py2neo連接到Neo4J數(shù)據(jù)庫(kù)中并使用其提供的Graph對(duì)象來(lái)創(chuàng)建節(jié)點(diǎn)和關(guān)系。在Py2neo中使用Node對(duì)象構(gòu)建節(jié)點(diǎn),使用Relationship構(gòu)建關(guān)系,使用Create方法或Merge方法來(lái)創(chuàng)建節(jié)點(diǎn)和關(guān)系。在Py2neo庫(kù)中也可以使用run方法直接運(yùn)行Cypher查詢命令來(lái)返回查詢結(jié)果,借助圖數(shù)據(jù)庫(kù)的索引功能,還可以提升數(shù)據(jù)的查詢效率。
因此,可以借助Pandas和Py2neo庫(kù)將知識(shí)圖譜的創(chuàng)建程序化。先將文獻(xiàn)中涉及的具體實(shí)體分類保存在Excel表格中,然后基于Python程序語(yǔ)言的Pandas庫(kù)將Excel表格中的數(shù)據(jù)導(dǎo)入到DataFrame數(shù)據(jù)結(jié)構(gòu)中,DataFrame數(shù)據(jù)結(jié)構(gòu)是由行和列組成的二維表。再通過(guò)Py2neo庫(kù)的Node對(duì)象構(gòu)建節(jié)點(diǎn)。程序通過(guò)循環(huán)遍歷DataFrame數(shù)據(jù)結(jié)構(gòu)中的每一行數(shù)據(jù),并將遍歷到的數(shù)據(jù)填充到Node對(duì)象,最后通過(guò)Py2neo庫(kù)的Graph對(duì)象連接到Neo4J,最后使用Create方法將Node節(jié)點(diǎn)添加到數(shù)據(jù)庫(kù)中。
有關(guān)歷史人物關(guān)系的創(chuàng)建:先對(duì)照將文獻(xiàn)資料將主要的人物關(guān)系保存到Excel表格中, 然后通過(guò)Pandas庫(kù)將Excel數(shù)據(jù)表讀入到DataFrame結(jié)構(gòu)中,通過(guò)Py2neo庫(kù)的Relationship對(duì)象構(gòu)建節(jié)點(diǎn)之間的關(guān)系。在構(gòu)建節(jié)點(diǎn)關(guān)系之前需要先驗(yàn)證相關(guān)節(jié)點(diǎn)是否存在于數(shù)據(jù)庫(kù)中,可以使用NodeMatcher對(duì)象的Match方法判斷DataFrame中的起始和結(jié)束節(jié)點(diǎn)是否存在,只有當(dāng)關(guān)系的起始和結(jié)束節(jié)點(diǎn)都已經(jīng)存在的條件下才可以創(chuàng)建關(guān)系。節(jié)點(diǎn)間關(guān)系的創(chuàng)建使用Graph對(duì)象的merge方法。
上述有關(guān)歷史人物節(jié)點(diǎn)之間的關(guān)系創(chuàng)建程序流程如圖1所示。創(chuàng)建后的歷史人物關(guān)系知識(shí)圖譜展示效果如圖2所示。其他節(jié)點(diǎn),如:歷史事件、組織機(jī)構(gòu)、歷史文物及職位在知識(shí)圖譜中的創(chuàng)建及節(jié)點(diǎn)之間關(guān)系的構(gòu)建,在實(shí)現(xiàn)算法上與歷史人物及其關(guān)系的構(gòu)建相似,都采用Pandas庫(kù)從Excel表格中批量讀取,然后使用Py2neo庫(kù)批量添加到圖數(shù)據(jù)庫(kù)中構(gòu)成知識(shí)圖譜關(guān)系網(wǎng)絡(luò)。
5 基于Neo4J的“常州三杰”知識(shí)圖譜的查詢
Neo4J不僅支持對(duì)知識(shí)圖譜數(shù)據(jù)的構(gòu)建,還能夠?qū)χR(shí)圖譜中的數(shù)據(jù)節(jié)點(diǎn)和節(jié)點(diǎn)之間的關(guān)系進(jìn)行高效率查詢。不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)低效率的表連接查詢,在Neo4J內(nèi)部使用Cypher命令既可以查詢節(jié)點(diǎn)之間的直接關(guān)系,也可以查詢節(jié)點(diǎn)之間的間接關(guān)系。并且可以設(shè)置查詢關(guān)系的方向[4]。這種關(guān)系的查詢可以跨越多個(gè)節(jié)點(diǎn),從而能夠有效發(fā)現(xiàn)節(jié)點(diǎn)之間的潛在關(guān)系。
通過(guò)命令:match (p1:person)-[r1:'創(chuàng)建']->(a1:agency)<-[r2: '加入']-(p2:person) return p1,p2,a1 可以查找到歷史人物p2加入由歷史人物p1創(chuàng)建的組織機(jī)構(gòu)a1中的關(guān)聯(lián)關(guān)系,從而發(fā)現(xiàn)歷史人物p1與p2之間的潛在關(guān)系。在“常州三杰”知識(shí)圖譜中,上述命令就可以查詢到瞿秋白曾經(jīng)加入鄧中夏和于佑任等人創(chuàng)建的上海大學(xué),以及瞿秋白和鄧中夏都加入由李大釗創(chuàng)建的北京大學(xué)馬克思主義學(xué)說(shuō)研究會(huì)。
借助Py2neo庫(kù)可以將基于Cypher命令的手工查詢步驟程序化,從而使前端用戶發(fā)送查詢需求后,經(jīng)過(guò)Python語(yǔ)言的分析和處理,返回查詢結(jié)果的效果。Py2neo庫(kù)中提供了兩種查詢方案:
第一種方案是使用matching包中的NodeMatcher類和RelationshipMatcher類,前者用于節(jié)點(diǎn)查詢后者用于關(guān)系查詢,這兩個(gè)類都是用match方法來(lái)查找符合調(diào)節(jié)的節(jié)點(diǎn)或關(guān)系。
第二方案是直接使用Graph類的run方法,該方法接收Cypher查詢命令,將查詢命令傳遞給Neo4J數(shù)據(jù)庫(kù),并將查詢結(jié)果進(jìn)行封裝后返回給程序。Python程序得通過(guò)data()方法將查詢結(jié)果轉(zhuǎn)換為元素為字典類型的列表,也可以通過(guò)to_data_frame()將查詢結(jié)果轉(zhuǎn)為Pandas庫(kù)的DataFrame結(jié)構(gòu)進(jìn)行數(shù)據(jù)處理。例如程序:graph.run("match(a:person{name:'張?zhí)?})-[r]->(b:person) return a,r,b").data() 返回的結(jié)果是與張?zhí)紫嚓P(guān)的人物及其關(guān)系的列表集合。
6 結(jié)束語(yǔ)
綜上所述,歷史人物事件的相互關(guān)系錯(cuò)綜復(fù)雜,使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)無(wú)法完整描述,也無(wú)法實(shí)現(xiàn)對(duì)數(shù)據(jù)的有效管理和查詢。Neo4J圖型數(shù)據(jù)庫(kù)非常適合此類復(fù)雜關(guān)系的存儲(chǔ)和查詢。并且借助Python程序設(shè)計(jì)語(yǔ)言的Py2neo庫(kù)以及Pandas庫(kù)可以實(shí)現(xiàn)存儲(chǔ)和查詢的程序自動(dòng)化。在對(duì)歷史人物事件的領(lǐng)域建模過(guò)程中,本文主要依據(jù)常州三杰的有關(guān)文獻(xiàn),為知識(shí)圖譜設(shè)置了五個(gè)實(shí)體:歷史人物、歷史事件、組織機(jī)構(gòu)、歷史文物和職位,并分析了五個(gè)實(shí)體之間的相互關(guān)系,為圖數(shù)據(jù)模型中節(jié)點(diǎn)的類型及關(guān)系的類型奠定了基礎(chǔ),保證了節(jié)點(diǎn)和關(guān)系數(shù)據(jù)類型的一致性。
參考文獻(xiàn):
[1] 沈建鋼.“常州三杰”精神研究[J].常州工學(xué)院學(xué)報(bào)(社科版),2011,29(3):1-6.
[2] 曹祖平.弘揚(yáng)“常州三杰”精神的歷史使命和意義[J].企業(yè)導(dǎo)報(bào),2011(16):244-245.
[3] 張幟.Neo4j權(quán)威指南[M].北京:清華大學(xué)出版社,2017.
[4] 陳韶健.Neo4j全棧開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2017.
[5] 丁洪麗.基于Neo4j圖數(shù)據(jù)庫(kù)的人員關(guān)系挖掘[J].電訊技術(shù),2020,60(7):771-777.
【通聯(lián)編輯:謝媛媛】