唐杰,劉銘,陳鐿文
(西北大學(xué) 科學(xué)史高等研究院,陜西西安 710127)
自20世紀(jì)80年代始建“古漢語(yǔ)語(yǔ)料庫(kù)”以來(lái),經(jīng)過(guò)30余年的積累,現(xiàn)已整理出數(shù)億字的古籍?dāng)?shù)據(jù)庫(kù)[1]?,F(xiàn)有古籍語(yǔ)料庫(kù)中含較多字符集以外的文字,即集外字。該類(lèi)文字由于無(wú)法被OCR識(shí)別或通過(guò)鍵盤(pán)直接錄入,在一定程度上影響了古籍的數(shù)字化及其轉(zhuǎn)換與檢索[2],因而成為古籍?dāng)?shù)字化的重點(diǎn)工作之一;又由于目前的集外字技術(shù)不能適用于計(jì)算機(jī)的自然語(yǔ)言信息處理技術(shù),也成為古籍?dāng)?shù)字化中漢字處理難點(diǎn)之一。出土文獻(xiàn)數(shù)據(jù)庫(kù)是關(guān)于中國(guó)出土文獻(xiàn)簡(jiǎn)、牘、帛書(shū)的封閉式數(shù)據(jù)庫(kù),如《簡(jiǎn)帛金石資料庫(kù)(全文)》《引得市數(shù)據(jù)庫(kù)》《漢代簡(jiǎn)牘數(shù)位典藏》《漢達(dá)文庫(kù)》《瀚唐典籍》等[3],其中存在大量的避諱字、異體字、俗體字、生僻字,多以集外字為主?!跺频浼凡捎锰鎿Q法將集外字認(rèn)定為集內(nèi)字,字庫(kù)所用字符集編碼為Unicode5.0字符集[4],《引得市數(shù)據(jù)庫(kù)》采用造字法建立集外字字庫(kù),字庫(kù)所用字符集編碼為Unicode字符集編碼,參考中央研究院漢字部件檢索系統(tǒng),利用部首結(jié)構(gòu)來(lái)查詢集外字[5]。香港理工大學(xué)開(kāi)發(fā)的“中文古籍網(wǎng)上出版平臺(tái)”采用描述法對(duì)集外字進(jìn)行描述,字庫(kù)所用字符集編碼為Unicode編碼[3]。目前,這些數(shù)據(jù)庫(kù)對(duì)集外字的信息處理均集中在解決集外字錄入、顯示及檢索功能,尚未關(guān)注集外字在文本信息處理中的應(yīng)用。本文基于課題組建立的《中國(guó)出土文獻(xiàn)數(shù)據(jù)庫(kù)》中的集外字字庫(kù),提出出土文獻(xiàn)集外字在文本信息處理中的程序化方法。該方法基于《漢典》網(wǎng)站及相關(guān)工具書(shū)對(duì)先秦至?xí)x期間出土文獻(xiàn)的集外字進(jìn)行整理;使用造字法將所造集外字存儲(chǔ)至Unicode編碼私用區(qū)碼位,建立集外字字庫(kù);結(jié)合四角號(hào)碼檢字方案生成輸入法碼表,借助多多輸入法生成器生成集外字輸入法。并以里耶秦簡(jiǎn)為例,探討了分詞工具對(duì)文本的處理效果。
少數(shù)民族文字、西夏文字、甲骨文字相關(guān)的數(shù)字化研究工作都是從20世紀(jì)下半葉開(kāi)始的,在這之前,我國(guó)使用的是GB2312-80字符集,少數(shù)民族文字、西夏文字、甲骨文字都屬于集外字。通過(guò)分析此類(lèi)集外字的信息處理技術(shù)并借鑒其處理方法,可對(duì)出土文獻(xiàn)的集外字處理提供幫助。
藏文由輔音字母、元音符號(hào)和標(biāo)點(diǎn)符號(hào)構(gòu)成[6],其同時(shí)包含橫向拼寫(xiě)及縱向拼寫(xiě),藏文是從20世紀(jì)90年代開(kāi)始編碼研究工作,1997年發(fā)布了《信息交換用藏文編碼字符集》,該標(biāo)準(zhǔn)包含192個(gè)編碼點(diǎn)、169個(gè)編碼字符,是按照拼音文字編碼規(guī)律對(duì)藏文進(jìn)行編碼[7]。藏文是通過(guò)使用造字法,在長(zhǎng)寬不等的點(diǎn)陣中造字,字體有點(diǎn)陣字、矢量字、曲線輪廓字,將其保存為Unicode編碼,Unicode編碼范圍為0F00~0FFF,其鍵盤(pán)輸入法有字丁、音節(jié)和詞組的形式,通過(guò)藏文輸入法實(shí)現(xiàn)藏文自動(dòng)排版,實(shí)現(xiàn)藏文的輸入輸出。目前藏文和其他少數(shù)民族文字已收錄在CJK字符集中[8],已被規(guī)范為集內(nèi)字,信息處理更加方便。
西夏文是記錄西夏黨項(xiàng)族語(yǔ)言的文字,其文字特征類(lèi)似于漢字,同為方塊字。自20世紀(jì)后半葉,西夏文數(shù)字化研究逐漸展開(kāi),寧夏大學(xué)開(kāi)發(fā)并研制出了《漢夏字處理及電子字典》,創(chuàng)立了西夏文字字符集[9]。景永時(shí)等[10]通過(guò)使西夏字與GB2312-80標(biāo)準(zhǔn)漢字共用同一編碼,制作了西夏文字庫(kù),此方法在處理西夏文與漢字同框的文本時(shí)需不斷切換字庫(kù)。馬希榮等[11]采用位面技術(shù)在GBK的用戶自定義區(qū)分配西夏字編碼,避免了與漢字或其他字符的碼位沖突問(wèn)題,但其本質(zhì)上并沒(méi)有解決西夏文字符編碼問(wèn)題,字庫(kù)不便應(yīng)用于文本信息處理。2016年6月發(fā)布的Unicode9.0版本收錄了西夏文字符,使西夏文字規(guī)范為集內(nèi)字,解決了占用漢字碼位、夏漢同屏共存等問(wèn)題,對(duì)于西夏文字庫(kù)在文本信息處理方面的應(yīng)用具有非常重要的作用[12]。著名西夏學(xué)研究專(zhuān)家李范文[13]根據(jù)西夏字結(jié)構(gòu)編排了西夏字的四角號(hào)碼,使得西夏字檢索更加方便,為西夏文字?jǐn)?shù)字信息化開(kāi)辟了捷徑。
甲骨文字形的特點(diǎn)是筆畫(huà)繁多、無(wú)法區(qū)分、構(gòu)造復(fù)雜[14]。自1990年開(kāi)始就有專(zhuān)家關(guān)注甲骨文的信息化技術(shù),徐松[15]開(kāi)發(fā)了“甲骨文象形碼編碼系統(tǒng)”,可實(shí)現(xiàn)甲骨文筆畫(huà)檢索。江銘虎等[16]同時(shí)制作兩套甲骨文字庫(kù),通過(guò)區(qū)位碼和拼音形式輸入甲骨文。顧紹通等[17]根據(jù)甲骨文字形的拓?fù)浣Y(jié)構(gòu)建立了甲骨文輸入法,實(shí)現(xiàn)甲骨文的字形和拼音輸入。劉志祥等[18]建立了字形編碼型甲骨文6位數(shù)字碼輸入法,類(lèi)似于漢字檢索的四角號(hào)碼,實(shí)現(xiàn)精確的甲骨文字的輸入輸出。劉永革等[19]通過(guò)對(duì)甲骨文的筆畫(huà)特征進(jìn)行分析,將構(gòu)成甲骨字的筆畫(huà)歸納為九種筆畫(huà),在此基礎(chǔ)上采用香港中文大學(xué)的甲骨文字庫(kù)設(shè)計(jì)了甲骨文筆畫(huà)輸入法。
字符集是遵循國(guó)家或國(guó)際標(biāo)準(zhǔn),對(duì)每一個(gè)字符進(jìn)行定義的唯一代碼[20],常見(jiàn)的漢字字符集有GB2312,BIG5,GBK,GB18030,Unicode[21],其 中Unicode編碼字符集是國(guó)際標(biāo)準(zhǔn)字符集,可實(shí)現(xiàn)跨語(yǔ)言文本信息轉(zhuǎn)換[22]。
集外字是指字符集以外的字,不采用特定的技術(shù)方法無(wú)法對(duì)集外字進(jìn)行錄入、處理及顯示[23],字符集的選擇與集外字的數(shù)量呈負(fù)相關(guān),故在建立字庫(kù)時(shí)優(yōu)先選擇收錄字符最多的Unicode字符集,其滿足共享、國(guó)際通用的條件,同時(shí)也是目前古籍?dāng)?shù)字化項(xiàng)目最常用的字符集。
在古籍?dāng)?shù)字化項(xiàng)目中常見(jiàn)的集外字的處理方法大致分為造字法、替換法、描述法[24-25]。
造字法是在字符集的自定義區(qū)為集外字定義編碼,這些編碼與集外字的字形一一對(duì)應(yīng)。優(yōu)點(diǎn)是只要有字符集自定義編碼區(qū)的支持,造字的檢索與顯示和集內(nèi)字完全相同,缺點(diǎn)是自定義編碼區(qū)只有13萬(wàn)余個(gè)碼位[26],如果不加限制地造字,碼位很快會(huì)消耗殆盡,且不同的古籍?dāng)?shù)字化項(xiàng)目對(duì)私用區(qū)碼位的使用可能完全不同,若同時(shí)使用這些古籍?dāng)?shù)字化項(xiàng)目,可能發(fā)生私用區(qū)編碼沖突。
替換法是將集外字變換為其他可以輸入的形式,如符號(hào)、圖形和集內(nèi)字。此方式的優(yōu)點(diǎn)在于錄入方便簡(jiǎn)潔,但是缺點(diǎn)也很明顯。第一,集外字統(tǒng)一替換為某個(gè)符號(hào),這些符號(hào)基本沒(méi)有檢索意義。第二,替換符號(hào)未能保留集外字的任何信息,當(dāng)字符集變更時(shí),集外字無(wú)法管理。第三,在不清楚替換規(guī)則的情況下,用戶無(wú)法理解替換的意義。
描述法是將集外字表示為一個(gè)字符串,這個(gè)字符串描述了集外字的字形。優(yōu)點(diǎn)是可使用標(biāo)準(zhǔn)化的描述符序列對(duì)漢字的構(gòu)造進(jìn)行說(shuō)明,解決了自然語(yǔ)言描述法的不規(guī)范問(wèn)題。缺點(diǎn)是很多生僻字結(jié)構(gòu)極為復(fù)雜,拆解困難,一種字存在多種描述方法,且描述后的字不是一個(gè)Unicode編碼,而是一組編碼,例如字,需要十三個(gè)編碼才可完整描述此字[23],其缺點(diǎn)有:占字節(jié)較多、不利于文本信息處理、需額外軟件支持、所造字形與原字符存在一定差距。
相對(duì)而言,造字法是建立出土文獻(xiàn)數(shù)據(jù)庫(kù)的較好選擇。第一,出土文獻(xiàn)語(yǔ)料庫(kù)是封閉式語(yǔ)料,其字?jǐn)?shù)有限且相對(duì)于傳世文獻(xiàn)與自然語(yǔ)言而言較少,據(jù)目前統(tǒng)計(jì)的已釋讀的出土文獻(xiàn)數(shù)據(jù),集外字有2萬(wàn)余個(gè)。第二,造字法可將所造集外字保存為Unicode字符集編碼,將集外字轉(zhuǎn)為集內(nèi)字,目前Unicode供用戶自定義編碼的碼位有137 468個(gè)碼位,可自由編輯137 468個(gè)集外字。第三,計(jì)算機(jī)的文本信息處理是識(shí)別文字所對(duì)應(yīng)的字符集編碼,要求集外字“一字一形一碼”。造字法滿足以上三種限制條件,故本文選擇造字法建立出土文獻(xiàn)集外字字庫(kù)。
計(jì)算機(jī)的應(yīng)用范圍越來(lái)越廣泛,對(duì)漢字進(jìn)行數(shù)字化已經(jīng)成為了中文信息處理的必要前提。出土文獻(xiàn)中包含大量的俗體字、異體字等,其中不乏集外字,給研究者合理規(guī)范使用文字帶來(lái)了諸多不便。因此,建立出土文獻(xiàn)數(shù)據(jù)庫(kù)的必要工作就是對(duì)出土文獻(xiàn)的集外字進(jìn)行整理,但古籍版本眾多,且沒(méi)有非常嚴(yán)格的統(tǒng)一標(biāo)準(zhǔn),故應(yīng)選擇專(zhuān)業(yè)的文物校釋小組和權(quán)威作者所著的釋文進(jìn)行數(shù)字化和整理工作?;凇墩f(shuō)文解字》《康熙字典》此類(lèi)工具書(shū)及《漢典》網(wǎng)站,篩選查找《清華大學(xué)藏戰(zhàn)國(guó)竹簡(jiǎn)》《望山楚簡(jiǎn)》《天水放馬灘秦簡(jiǎn)》《里耶秦簡(jiǎn)牘》(壹與貳)《張家山漢簡(jiǎn)》《懸泉漢簡(jiǎn)》等先秦至?xí)x的出土文獻(xiàn)中的集外字。
以里耶秦簡(jiǎn)集外字整理工作為例,出土文獻(xiàn)釋文書(shū)籍選擇湖南省文物考古研究所編著的《里耶秦簡(jiǎn)牘》,其釋文一般按照原文字形釋寫(xiě),不識(shí)字是按照原樣摹寫(xiě)。工具書(shū)選擇陳偉主編的《里耶秦簡(jiǎn)牘校釋》。在里耶秦簡(jiǎn)兩卷的集外字整理過(guò)程中,對(duì)例如9-475中的字“”“”,此字是按照原樣摹寫(xiě)的字,將其認(rèn)定為集外字進(jìn)行收錄;例如9-478中的字“”,此字是“ ”下側(cè)無(wú)法識(shí)別,所以對(duì)其不進(jìn)行收錄;對(duì)文本中的符號(hào)例如“”“”,不進(jìn)行收錄;例如8-181中的“”字,在漢典網(wǎng)中未收錄此字,此字也不存在于Unicode字符集中,所以將其收錄為集外字。根據(jù)整理已出版的兩卷《里耶秦簡(jiǎn)牘》中的集外字,其在全文不重復(fù)字?jǐn)?shù)的比重約為11.2%,其中集外字個(gè)數(shù)202個(gè),兩卷不重復(fù)字?jǐn)?shù)約1 800個(gè)。
根據(jù)現(xiàn)篩選查找到的出土文獻(xiàn)集外字,在現(xiàn)有的藏文字庫(kù)、西夏文字庫(kù)及甲骨文字庫(kù)建立方法的基礎(chǔ)上構(gòu)造出土文獻(xiàn)集外字字庫(kù)。該工作主要分為兩步:第一步,采用造字法描繪集外字,將集外字描繪成漢字字符形式。藏文、西夏文及甲骨文對(duì)其文字采用了“造字法”,即利用造字軟件采用描繪的形式將文字描繪在畫(huà)板上。鑒于此,本文也根據(jù)造字法利用計(jì)算機(jī)描繪出土文獻(xiàn)集外字,使得出土文獻(xiàn)集外字成為“漢字”形式。第二步,由于藏文、西夏文及甲骨文在建立字庫(kù)時(shí),是將描繪好的字符以Unicode字符集編碼的形式儲(chǔ)存至計(jì)算機(jī)中,故本文也通過(guò)參考該方法,將所描繪的集外字存儲(chǔ)至Unicode編碼私用區(qū)碼位。由此,基于以上兩項(xiàng)工作建立起出土文獻(xiàn)集外字字庫(kù)。具體的操作步驟如下。
利用High-Logic公司的FontCreator曲線輪廓造字軟件,根據(jù)二次β樣條曲線擬合算法,自動(dòng)將掃描的集外字圖形數(shù)字?jǐn)M合成盡可能接近原樣摹寫(xiě)的集外字,可通過(guò)調(diào)整文字的輪廓點(diǎn)、線、角度及位置,描繪出較為理想的集外字并保存在對(duì)應(yīng)的Unicode編碼私用區(qū)碼位。
現(xiàn)有較常用的出土文獻(xiàn)集外字字庫(kù)有“引得市古文字缺字資料庫(kù)”“古聯(lián)瀚字輸入法字庫(kù)”,但是建立出土文獻(xiàn)集外字字庫(kù)無(wú)法直接采用其結(jié)果,原因有二:其一,不能包含先秦至?xí)x期間所有出土文獻(xiàn)中的集外字。其二,無(wú)法對(duì)其字庫(kù)進(jìn)行動(dòng)態(tài)管理。本文所建立的集外字字庫(kù)優(yōu)勢(shì)在于:第一,集外字?jǐn)?shù)據(jù)更全面,可研究范圍及角度更廣,對(duì)每篇出土文獻(xiàn)中的集外字進(jìn)行整理并梳理成表。第二,對(duì)字庫(kù)實(shí)現(xiàn)動(dòng)態(tài)管理,根據(jù)出土文獻(xiàn)的更新和Unicode字符集的更新,對(duì)字庫(kù)中的字進(jìn)行增加或刪改。
在西夏文字庫(kù)的建立及夏漢通輸入法生成過(guò)程中,西夏文字存在拼音難以讀寫(xiě)且結(jié)構(gòu)復(fù)雜的特點(diǎn),由于其是仿造漢字而創(chuàng)制的,即以偏旁部首組成方塊字,因此研究者利用此特點(diǎn)建立了西夏文四角號(hào)碼檢字法,對(duì)所有文字進(jìn)行四角號(hào)碼檢字編碼,生成了西夏文輸入法碼表。現(xiàn)有的檢字方案可分音碼、形碼兩種[27],四角號(hào)碼檢字法屬于根據(jù)文字字形查找文字的形碼檢字方案,是用最多不超過(guò)5位的阿拉伯?dāng)?shù)字將所有漢字進(jìn)行歸類(lèi),此檢字方案對(duì)于無(wú)法正確讀寫(xiě)拼音及結(jié)構(gòu)部首繁瑣的文字效率極高,可在計(jì)算機(jī)中高效率錄入此類(lèi)文字。而出土文獻(xiàn)集外字也存在與西夏文字類(lèi)似的特點(diǎn),故也可采用四角號(hào)碼對(duì)其檢字。出土文獻(xiàn)集外字的檢字碼由5位阿拉伯?dāng)?shù)字組成,遵循《四角號(hào)碼新詞典》第十版的規(guī)則,對(duì)集外字進(jìn)行編碼拆分取號(hào)碼順序?yàn)樽笊辖?,右上角,左下角,右下角,附加碼為左下角上方距離最近的筆形對(duì)應(yīng)號(hào)碼,例如:
本文首先利用四角號(hào)碼檢字法對(duì)字符編碼,進(jìn)而建立出土文獻(xiàn)集外字的輸入法碼表,在輸入法碼表中需將“0123456789”用其拼音聲母首字母“oyesxwlqbj”代替[28]。其次,按步驟將整理好的輸入法碼表文件導(dǎo)入多多輸入法生成器中并設(shè)置相關(guān)參數(shù),生成“出土文獻(xiàn)集外字輸入法”。圖1為出土文獻(xiàn)集外字輸入法的構(gòu)造流程圖。
圖1 出土文獻(xiàn)集外字輸入法構(gòu)造
里耶秦簡(jiǎn)于2002年在里耶古城一號(hào)井第一次出土,計(jì)三萬(wàn)八千余枚簡(jiǎn)牘;及于2005年在護(hù)城壕第十一號(hào)坑第二次出土,計(jì)五十一枚簡(jiǎn)牘。簡(jiǎn)牘起止時(shí)間為秦始皇二十五年(前222年)至秦二世二年(前208年),內(nèi)容為秦朝洞庭郡遷陵縣遺留的公文檔案,涵蓋了當(dāng)時(shí)社會(huì)的各個(gè)層面[29]。目前已出版《里耶秦簡(jiǎn)牘》第一卷和第二卷,兩卷共包含四層,共含6 050條簡(jiǎn),總字?jǐn)?shù)約為12.25萬(wàn)字。本文在小組建立里耶秦簡(jiǎn)數(shù)據(jù)庫(kù)的基礎(chǔ)上,建立集外字字庫(kù),并應(yīng)用于里耶秦簡(jiǎn)語(yǔ)料庫(kù)的建設(shè)中。
中文分詞是文本分類(lèi)、信息檢索、文本挖掘等中文信息處理工作中的難點(diǎn)和技術(shù)關(guān)鍵點(diǎn),為驗(yàn)證所建字庫(kù)及輸入法可使集外字參與到文本信息處理過(guò)程中,本文將所造集外字錄入語(yǔ)料庫(kù),以里耶秦簡(jiǎn)兩卷文本數(shù)據(jù)庫(kù)為例,測(cè)試集外字可參與到主流分詞工具的分詞過(guò)程。
試驗(yàn)選擇目前自然語(yǔ)言分詞的主流工具jieba[30]。jieba分詞工具本身內(nèi)含詞典,該詞典的主要內(nèi)容是現(xiàn)代漢語(yǔ)及部分古代漢語(yǔ),但也可根據(jù)用戶需求選擇是否添加自定義詞典,以此保證分詞的準(zhǔn)確率。由于簡(jiǎn)牘語(yǔ)言以單字詞居多及與現(xiàn)代漢語(yǔ)實(shí)體名詞有較大區(qū)別的語(yǔ)言特殊性,故在分詞時(shí)采取兩種方案,以驗(yàn)證集外字字庫(kù)及輸入法建立的必要性。
試驗(yàn)數(shù)據(jù)選擇里耶秦簡(jiǎn)第一卷的簡(jiǎn)8-458,簡(jiǎn)文中包含集外字“”:
遷陵庫(kù)真□
鞮瞀卅九(第一欄)
冑廿□
弩二百五十一
臂九十七
弦千八百一(第二欄)
矢四萬(wàn)九百□
戟二百五十(第三欄)
試驗(yàn)分為兩個(gè)方案:方案一,基于jieba分詞工具的默認(rèn)精確切分模式下,不添加用戶自定義詞典進(jìn)行分詞。方案二,添加自定義的包含集外字的分詞詞典進(jìn)行分詞。試驗(yàn)結(jié)果如表1。
表1 集外字文本分詞試驗(yàn)
從表1可見(jiàn),第一,根據(jù)分詞結(jié)果,用jieba分詞工具對(duì)含有集外字的文本直接進(jìn)行分詞時(shí),集外字“”參與了分詞。這說(shuō)明了“甲”雖然包含集外字,但由于集外字字庫(kù)及輸入法的建立,這類(lèi)集外字可參與至計(jì)算機(jī)對(duì)語(yǔ)言的信息處理工作中,最終使得集外字可被讀取、被處理、被寫(xiě)入。
第四,方案一與方案二的分詞結(jié)果略有出入,主要問(wèn)題還是在jieba分詞工具的內(nèi)含詞典主要是現(xiàn)代漢語(yǔ),對(duì)于簡(jiǎn)牘這類(lèi)特殊語(yǔ)言,其詞庫(kù)及數(shù)據(jù)庫(kù)的建設(shè)還未完備,故分詞的準(zhǔn)確率較低。
本文根據(jù)《中國(guó)出土文獻(xiàn)數(shù)據(jù)庫(kù)》的集外字字庫(kù)提出了文本信息處理程序化方法,在實(shí)現(xiàn)集外字的數(shù)據(jù)庫(kù)中顯示和檢索功能的基礎(chǔ)上,為出土文獻(xiàn)中集外字參與文本信息處理提供了可行性方案。
本文以里耶秦簡(jiǎn)為例,采用造字法將集外字轉(zhuǎn)換為計(jì)算機(jī)可識(shí)別的編碼并參與文本信息處理,并建立了出土文獻(xiàn)集外字字庫(kù),提高了數(shù)據(jù)庫(kù)的完整性。其次,結(jié)合四角號(hào)碼,基于多多輸入法生成器生成集外字輸入法,并以自然語(yǔ)言處理技術(shù)中的基礎(chǔ)任務(wù)——分詞為例,利用已處理的文本數(shù)據(jù)進(jìn)行切分,達(dá)到了較好的處理效果。
在數(shù)字人文背景下,本文利用該方法將適用于現(xiàn)代漢語(yǔ)與傳世文獻(xiàn)文本的信息處理技術(shù)泛化至出土文獻(xiàn)文本中,不僅可直接應(yīng)用于建立出土文獻(xiàn)集外字字庫(kù)及文本數(shù)據(jù)庫(kù),且為集外字參與古籍文本的計(jì)算機(jī)處理技術(shù)提供新方法。