朱玉強(qiáng),范翠麗,何 珂
工具書(shū)是指根據(jù)一定查閱需要,系統(tǒng)匯集相關(guān)知識(shí),按易于檢索的方法編排的信息密集型圖書(shū)。為便于用戶使用,工具書(shū)以款目索引為主的辭條目錄必不可少??钅恳话阌蓸?biāo)目項(xiàng)和指引(地址)項(xiàng)組成[1]。辭條少則幾百,多則上萬(wàn)、幾十萬(wàn)甚至更多,如2009年出版的32卷《中國(guó)大百科全書(shū)》辭條有6萬(wàn)條[2],2014年出版的《不列顛百科全書(shū)》(DVD版)辭條有6,672萬(wàn)之多[3]。辭條越多,則為之組織并排序款目索引、編制目錄工作量越大。本文以人名為標(biāo)目的款目索引自動(dòng)排序?yàn)槔幹瞥绦颍纱蟠鬁p輕工具書(shū)編撰人員、出版社編輯人員的工作負(fù)荷。
《GB18030-2005信息技術(shù) 中文編碼字符集》是GB/T 2311體系編碼字符標(biāo)準(zhǔn),2006年5月1日起實(shí)施,規(guī)定了信息技術(shù)用中文圖形字符及其二進(jìn)制編碼的十六進(jìn)制表示,用于圖形字符信息處理、交換、存儲(chǔ)、顯現(xiàn)等,共收入漢字70,244個(gè)。該標(biāo)準(zhǔn)向下與《GB2312-1980信息交換用漢字編碼字符集 基本集》所對(duì)應(yīng)內(nèi)碼兼容,在字匯上支持《GB18030-2000 信息技術(shù) 信息交換用漢字編碼字符集基本集的擴(kuò)充》的全部中、日、韓(CJK)統(tǒng)一漢字(包括CJK統(tǒng)一漢字?jǐn)U充A、CJK統(tǒng)一漢字?jǐn)U充B)字符和我國(guó)部分少數(shù)民族文字的字符,是我國(guó)制訂的以漢字為主的超大型中文編碼字符集強(qiáng)制性標(biāo)準(zhǔn)[4]。工具書(shū)中人物傳記資料、地方志等不乏繁體字或異體字,2006年5月后出版的此類工具書(shū)基本遵循此標(biāo)準(zhǔn)。印刷型工具書(shū)常用排檢方法如表1所示。
表1 印刷型工具書(shū)常用排檢方法[5]
1960年代后,法國(guó)、英國(guó)、德國(guó)等開(kāi)展詞典編纂自動(dòng)化研究[6]。1980年代后,漢字存儲(chǔ)、輸入技術(shù)取得重大突破,漢語(yǔ)詞典編纂工作局部引入計(jì)算機(jī)技術(shù),1990年代開(kāi)始普遍應(yīng)用,重點(diǎn)研究語(yǔ)料庫(kù)資源技術(shù)與利用。北京大學(xué)計(jì)算語(yǔ)言學(xué)研究所開(kāi)發(fā)“計(jì)算機(jī)輔助詞典開(kāi)發(fā)和管理系統(tǒng)”,用于詞典檢索、編輯,可以多種方式對(duì)詞典進(jìn)行排序[7]。中國(guó)社會(huì)科學(xué)院語(yǔ)言研究所詞典室開(kāi)發(fā)“漢語(yǔ)詞典編輯系統(tǒng)”,包括編輯、排序、檢索等模塊[8]。北京語(yǔ)言大學(xué)語(yǔ)言信息處理研究所開(kāi)發(fā)了“漢語(yǔ)語(yǔ)料檢索軟件”,具有自動(dòng)分詞、自動(dòng)建立索引等特點(diǎn)[9]。在南京理工大學(xué)辭書(shū)數(shù)據(jù)庫(kù)排版系統(tǒng)可以對(duì)漢字詞組按不同原則實(shí)現(xiàn)不同排序[10],但未能查到細(xì)節(jié)。中國(guó)農(nóng)業(yè)科學(xué)院科技文獻(xiàn)信息中心《中國(guó)農(nóng)林文獻(xiàn)數(shù)據(jù)庫(kù)》課題組研制一款SKD數(shù)控主題索引款目軟件,可自動(dòng)生成主題索引款目、隨機(jī)附加非機(jī)檢用款目說(shuō)明語(yǔ)[11]。王懷惠基于Micro CDS/ISIS 軟件和“科印”排版軟件開(kāi)發(fā)程序自動(dòng)形成主題索引款目,實(shí)現(xiàn)刊物索引編輯出版計(jì)算機(jī)化[12]。黃維佳等概括了醫(yī)藥類工具書(shū)索引現(xiàn)狀及產(chǎn)生原因,對(duì)此類工具書(shū)按用途不同設(shè)想了不同索引路徑[13]。劉翔以筆畫(huà)、拼音兩種索引方式探討了工具書(shū)單字索引表自動(dòng)生成方法[14],未涉及更復(fù)雜的詞組排序。黃水清使用C語(yǔ)言編制程序,對(duì)雙行格式的漢字索引款目按拼音自動(dòng)排序,適用于圖書(shū)情報(bào)部門主題款目自動(dòng)排序[15]。黃麗霞等探討了使用Word編制工具書(shū)索引方法,提到Word在音序索引方面表現(xiàn)出色,但按筆畫(huà)索引多處需要手工干預(yù),效果不甚理想[16]。工具書(shū)排檢方法多樣性導(dǎo)致對(duì)款目索引排序中不論手工排序還是計(jì)算機(jī)自動(dòng)排序都存在不同程度困難,杜翔選取了同按音序編排的《新華字典》和《現(xiàn)代漢語(yǔ)詞典》進(jìn)行考察論述了辭條索引排序難點(diǎn)[17]。筆者調(diào)研了包括國(guó)家圖書(shū)館出版社、山東科學(xué)技術(shù)出版社等在內(nèi)的13位現(xiàn)從事工具書(shū)或電子音像出版具體實(shí)務(wù)的編輯,結(jié)果表明國(guó)內(nèi)采用方正飛騰、InDesign、CorelDRAW、Publisher、FrameMaker等大型商業(yè)軟件排版居多,但這些軟件在辭條款目索引排序方面仍不能很好地滿足不同出版需求,特別是對(duì)繁體或異體中文字支持不夠友好,排序時(shí)往往借助Word、Excel現(xiàn)有功能,通過(guò)分步轉(zhuǎn)換或編制宏代碼實(shí)現(xiàn),過(guò)程復(fù)雜,出錯(cuò)率高,亂碼時(shí)有發(fā)生。本文以人名索引自動(dòng)排序?yàn)槔?,探討具有共性的字?kù)創(chuàng)建、組合參數(shù)進(jìn)行款目索引排序的方法,功能確切,擴(kuò)展性較好,期望得以拋磚引玉。
為便于表述,將文中使用的術(shù)語(yǔ)定義制作成表2。系統(tǒng)總體目標(biāo)為,將介于十萬(wàn)至百萬(wàn)數(shù)量級(jí)人名索引類辭書(shū)款目按人名碼、路徑排序,自動(dòng)生成印刷版所需的統(tǒng)一質(zhì)量的目錄。對(duì)于不同編撰人員產(chǎn)生的相同款目,合并去重;對(duì)同一人名不同路徑合并且以路徑升序排序。
表2 本文術(shù)語(yǔ)定義
系統(tǒng)由建庫(kù)機(jī)器人、字庫(kù)、排序機(jī)器人3層結(jié)構(gòu)組成,如圖1所示。建庫(kù)機(jī)器人負(fù)責(zé)字庫(kù)創(chuàng)建、新增、查詢及修改、刪除等。字庫(kù)每條記錄存儲(chǔ)人名單字元數(shù)據(jù),如“張”字記錄有“筆畫(huà)碼”“筆順碼”“特征碼”“拼音”“聲調(diào)”等字段,分別對(duì)應(yīng)“11”“51512111534”“001”“zhang”“1”等數(shù)據(jù)。排序機(jī)器人負(fù)責(zé)由作業(yè)抽取款目,分解其中漢字(人名)與非漢字部分(路徑),檢索字庫(kù),將漢字映射為人名碼并分組、排序。
圖1 系統(tǒng)模塊
主要流程如圖2所示。采用“按需建庫(kù)”原則,建庫(kù)機(jī)器人從作業(yè)抽提人名單字,先檢索本地字庫(kù)是否有此記錄,如沒(méi)有則提交給字典類網(wǎng)站檢索該字,使用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)收割筆畫(huà)碼、筆順碼等元數(shù)據(jù),追加至字庫(kù)。為保證排序工作連貫性,便利作業(yè),待建庫(kù)完成再移交任務(wù)給排序機(jī)器人。排序機(jī)器人格式化作業(yè),抽提并數(shù)碼化人名漢字執(zhí)行排序,同時(shí)關(guān)聯(lián)路徑并升序排列。
圖2 技術(shù)方案
建立數(shù)據(jù)表各字段后,可按《GB18030-2005信息技術(shù) 中文編碼字符集》和《現(xiàn)代漢語(yǔ)通用字筆順規(guī)范》[18]手工輸入漢字及其元數(shù)據(jù),但其工程量較大,質(zhì)量亦無(wú)法統(tǒng)一。有第三方接口開(kāi)放API可獲取指定漢字Json格式元數(shù)據(jù)[19],但此類接口一般不免費(fèi)提供,且數(shù)據(jù)質(zhì)量參差不齊。為節(jié)約成本,統(tǒng)一數(shù)據(jù)標(biāo)準(zhǔn),在作業(yè)漢字人名量不大前提下,本文采用“按需建庫(kù)”原則,取作業(yè)人名部分,各單字分別送至http://tool.httpcn.com執(zhí)行檢索,使用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)收割結(jié)果中筆畫(huà)碼、筆順碼等數(shù)據(jù),寫(xiě)入數(shù)據(jù)庫(kù)。
從數(shù)字、符號(hào)和漢字混排的文本中抽提漢字時(shí),以判斷是否GBK漢字為例,算法描述如下:
分類筆畫(huà)組和起筆組時(shí),取人名首字,由排序機(jī)器人從字庫(kù)中取對(duì)應(yīng)筆畫(huà)碼及首筆數(shù)碼,歸類即可。組內(nèi)排序時(shí),常規(guī)思路先做出兩段人名排序算法,進(jìn)而擴(kuò)展至全體。以排序“張五豐06·25;13·154”和“張九03·45”為例,暫去路徑,從字庫(kù)分別取“張五豐”“張九”筆畫(huà)碼、筆順碼,變?yōu)榕判颉?151512111534041251041112”和“11515121115340235”。很明顯前者大于后者,“張九”排在“張五豐”后。
此算法擴(kuò)展至全體作業(yè)時(shí)落入“冒泡法排序”窠臼,時(shí)間復(fù)雜度為O(n2),效率低,且人名碼長(zhǎng)度不同易導(dǎo)致錯(cuò)誤產(chǎn)生。實(shí)踐中采用“補(bǔ)碼”法,修正每個(gè)人名碼長(zhǎng)度相等。按作業(yè)實(shí)際需求,每個(gè)漢字,將筆畫(huà)碼、筆順碼和特征碼(參見(jiàn)3.3)加和,尾部補(bǔ)“0”,統(tǒng)一為相同長(zhǎng)度(見(jiàn)表3),排序時(shí)既可對(duì)齊漢字位,又兼顧特征碼不與漢字混排??墒褂盟俣雀臁r(shí)間復(fù)雜度為O(log2n)的“二分排序法”或時(shí)間復(fù)雜度為O(nlog2n)的“快速排序法”排序??焖倥判蛩惴枋鋈缦拢?/p>
“士土工”“八入人”“兀尢”“込令”等,字形相似或相差甚遠(yuǎn),但筆順碼完全相同。如排序“張土込”“張士令”“張土入”“張士?!?,因前2字筆畫(huà)碼、筆順碼完全相同,再按第3字排序。按上述排序原則,“張土入”“張士兀”分別排在第1、2位,“張土込”“張士令”排在第3、4位但無(wú)法確定前后順序。不論3、4 位怎樣排,“土士”都發(fā)生了混排,達(dá)不到目的。
要解決此問(wèn)題,首先考慮附加單字拼音以區(qū)分不同字,實(shí)踐中發(fā)現(xiàn)有些需要保留不同版本的異體字筆畫(huà)碼、筆順碼、拼音仍完全相同無(wú)法區(qū)分,最終采用附加碼方法解決此問(wèn)題。建庫(kù)時(shí)每當(dāng)取回單字筆順碼,首先檢索字庫(kù)中是否已有相同筆順碼但漢字卻不同的情況,如有,則在具有相同筆順碼漢字的筆順碼尾部追加特征碼,如可參考《通用規(guī)范漢字表》[20]順序分別標(biāo)記“士土工”的筆順碼為“121001”“121002”“121003”。“橫豎撇點(diǎn)折”分別對(duì)應(yīng)數(shù)字“12345”,故特征碼中“0”不會(huì)被程序誤讀為筆畫(huà)。相同筆順產(chǎn)生于折筆時(shí),按《GB13000.1字符集漢字折筆規(guī)范》[21]順序給定特征碼序號(hào),如“乚”先于“ㄋ”。對(duì)同筆順?lè)斌w或異體字加特征碼時(shí),可隨機(jī)分配唯一確定特征碼,或由工作組集體表決定序,詳見(jiàn)表3。
表3 使用特征碼修正人名碼后排序示例
程序主體使用易語(yǔ)言編寫(xiě),過(guò)程調(diào)用了Python、AutoHotKey腳本,可穩(wěn)定運(yùn)行于32位和64位Windows7和Windows10操作系統(tǒng),連續(xù)處理20萬(wàn)行款目,工作狀態(tài)正常。程序運(yùn)行于64位Windows7操作系統(tǒng)界面如圖3所示。
以含127,935條人名索引的某地方志款目索引為作業(yè),獨(dú)立重復(fù)操作3次。在Intel Pentium CPU 2.90GHz、RAM 4.00GB 電腦環(huán)境和字庫(kù)按需建設(shè)完畢前提下,預(yù)格式化文本平均耗時(shí)15分32秒,標(biāo)準(zhǔn)差48秒;正式排序平均耗時(shí)42分17秒,標(biāo)準(zhǔn)差75秒。程序可將無(wú)法排序的款目自動(dòng)剪切為日志文件,供后續(xù)再使用程序處理或人工處理,挑出率100%。預(yù)處理文本時(shí),對(duì)形式上基本滿足程序入口要求但細(xì)節(jié)尚需調(diào)整的款目(如統(tǒng)一人名與路徑間空格數(shù)、半角字符化、固定路徑間隔字串等),處理失敗時(shí)寫(xiě)出錯(cuò)誤日志,挑出率100%。預(yù)留“參數(shù)及優(yōu)先級(jí)”接口可使用筆畫(huà)碼、筆順碼、拼音等參數(shù)中的1個(gè)或多個(gè)自由組配排序規(guī)則,導(dǎo)出不同排序樣式、不同編碼(如GB2312、UTF-8、Big5等)的以排序后的款目索引為主要內(nèi)容的目錄項(xiàng)。對(duì)單次排序結(jié)果,采用不放回簡(jiǎn)單隨機(jī)抽樣方法每次取200條、連取5次人工復(fù)核,3次獨(dú)立重復(fù)實(shí)驗(yàn)共抽樣3,000條,正確率100%。
圖3 程序主界面
工具書(shū)款目索引排序工作,因工作量巨大,手工操作不便,又因排檢方式多樣,自動(dòng)化處理
時(shí)需兼顧多種邏輯算法。本文基于《GB18030-2005信息技術(shù) 中文編碼字符集》語(yǔ)境和規(guī)范編制程序,近乎全自動(dòng)對(duì)已確定款目索引進(jìn)行排序,大大減輕工具書(shū)編撰人員、出版社編輯人員工作負(fù)荷。實(shí)踐表明,程序所建字庫(kù)具通用性,可用以開(kāi)發(fā)其他基于GB18030-2005的應(yīng)用軟件;程序預(yù)留接口可滿足不同排序規(guī)則和目錄導(dǎo)出格式需求,具推廣性。但是,因程序只在小范圍內(nèi)測(cè)試使用,界面較簡(jiǎn)陋,部分功能尚未窗口化;使用爬蟲(chóng)建設(shè)字庫(kù)時(shí)未采用多線程工作導(dǎo)致速度很慢;排序采用更穩(wěn)定的多進(jìn)程工作替代容易阻塞的多線程工作時(shí)作業(yè)分配不盡合理,這些都尚待完善。