栗青生,吳琴霞,王 蕾
(1.安陽師范學(xué)院 計算機與信息工程學(xué)院, 河南 安陽 455002;2.武漢理工大學(xué) 信息工程學(xué)院,湖北 武漢 430070;3. 甲骨文數(shù)字化工程研究中心,河南 安陽 455002)
甲骨文字作為一種獨特的符號系統(tǒng),具有和現(xiàn)代語言系統(tǒng)的文字一樣的社會、歷史和文化的傳承功能。隨著計算機信息技術(shù)的發(fā)展,研究學(xué)者對標準甲骨文字形產(chǎn)生巨大的需求,要求計算機能像現(xiàn)代文字一樣處理甲骨文字。多年來,在甲骨文數(shù)字化過程中一直存在著甲骨文難以輸入的問題。
可以看到,在解決甲骨文的計算機輸入的過程中,許多學(xué)者參照現(xiàn)代漢字的計算機輸入方案,從形碼、音碼等多個方面研究出發(fā),提出了各種各樣的解決方案,解決了部分甲骨文字在輸入方面的困難。但到目前為止,仍然沒有一個完整的方案能夠解決全部甲骨文字的輸入問題[1-3]。
解決甲骨文的輸入和輸出問題和解決現(xiàn)代漢字的輸入和輸出問題的方法是不同的,現(xiàn)代漢字已經(jīng)有確定的內(nèi)碼,只要找出一個描述外碼和內(nèi)碼這兩個狀態(tài)空間的一致性的方法,現(xiàn)代漢字問題的編碼方案就可以解決。近年來,有學(xué)者提出用解決漢字的不規(guī)范字的方法去解決所有的古文字的輸入和輸出,例如,參考文獻[4]給出了一種筆段網(wǎng)格的形式化描述方案,但該方案僅針對了漢字的集外字的處理,而甲骨文字不僅有未識別的集外文字,還有很多和現(xiàn)代文字對應(yīng)的集內(nèi)文字,顯然,這一方案不能處理甲骨文字。也就是說,甲骨文字的輸入問題不僅要解決甲骨文的外部編碼(輸入碼)問題,更重要的是要解決好甲骨文字的內(nèi)部編碼和現(xiàn)代文字內(nèi)部編碼的對應(yīng)該關(guān)系問題??梢哉f,如果甲骨文字的內(nèi)碼問題解決了,現(xiàn)代漢字的一些成熟的解決方案(如拼音、五筆輸入方法等)完全可以用于甲骨文的輸入。
將一個給定的甲骨文字數(shù)字化為計算機能夠進行編輯和識別的甲骨文字,就是要通過合理安排Unicode空間中現(xiàn)代漢字和甲骨文字的計算關(guān)系,給甲骨文字一個確定的內(nèi)部編碼(Unicode碼)。通??蛇x兩種類型的編碼方法,一是將甲骨文視為一種特殊字體,其編碼就是現(xiàn)代漢字的對應(yīng)編碼;二是使用Unicode空間的中Private Use Area區(qū)間進行重新編碼,即現(xiàn)代漢字和它所對應(yīng)的甲骨文字采用不同的編碼方式。
第一種編碼方法的優(yōu)點是保證了每一個甲骨文字和現(xiàn)代對應(yīng)的文字編碼的統(tǒng)一性,用現(xiàn)代漢字輸入法解決甲骨文的輸入困難,不足的是這種編碼方法解決不了甲骨文中異體字的輸入問題和目前沒有識別的甲骨文的輸入問題。和現(xiàn)代漢字不同的是,甲骨文字幾乎每一個字都有異體字,而且大多數(shù)不只一個,如現(xiàn)代漢字“身”和“妹”對應(yīng)的甲骨文字其異體字就有四個[5](表1)。另外,由于目前還有近三分之二的甲骨文字沒能完全考釋,這些文字如何輸入?現(xiàn)在的漢字輸入方法回答不了這樣的問題。
表1 漢字“身”和“妹”部分甲骨文異體字
第二種編碼方法用Unicode的E000到F8FF的Private Use Area區(qū)間內(nèi)進行編碼固然可行,但同樣存在對異體字進行編碼的困難,目前,對于甲骨文中的異體字的認識還沒有一個統(tǒng)一的標準,在參考文獻[6]中,異體字被限定為有限多個,因此,整個文字的規(guī)模和數(shù)量完全可以放在Private Use Area區(qū)間,但隨著對甲骨文字研究的深入,對字形結(jié)構(gòu)的不同的認識和處理,都會導(dǎo)致文字和異體字的數(shù)量增加,例如,有學(xué)者提出,形狀和位置略有不同的甲骨文字都應(yīng)視為異體字,這樣,有限的Private Use Area區(qū)間就不能容納多達幾萬個甲骨文字了。
輸入甲骨文字的特殊性,要求在建立甲骨文字的輸入和編碼方案之前必須先建立一個合適的解空間,使得包括目前可識的(或可隸定的),不可識的,同字異形的,異字同形的等等都能在這個解空間中進行定義和計算[7],顯然,從目前標準的Unicode編碼系統(tǒng)的一字一碼的編碼特點和所能提供的有限的碼位空間來看,這個解是很難確定的。
由于在有限的編碼空間內(nèi)不能實現(xiàn)所有的甲骨文字及異體字編碼,甲骨文的編輯和處理就變得異常復(fù)雜,影響了甲骨文字的輸入和輸出。通過多年的研究和試驗,我們提出了基于甲骨文字形動態(tài)描述庫的甲骨文輸入方法,使用這一方法的前提是建立甲骨文字形動態(tài)描述庫。甲骨文字輸入和輸出過程都是針對動態(tài)描述庫來進行,具體實現(xiàn)方法和步驟如下。
步驟1 整理甲骨文字拓片,進行文字采集,按目前甲骨文的考釋結(jié)果,將甲骨文分為可識甲骨文和不可識甲骨文兩組。
步驟2 對可識甲骨文,按照和現(xiàn)代漢字的對應(yīng)文字進行編碼,內(nèi)碼和現(xiàn)代漢字相同。 對不可識甲骨文,在Unicode的E000到F8FF的Private Use Area區(qū)域按筆畫結(jié)構(gòu)(注: 即下文中的筆元)的順序進行編碼排序,創(chuàng)建字形庫。
步驟3 對創(chuàng)建的字形庫進行動態(tài)描述,得到字形描述庫。
步驟4 在字形描述庫中,對現(xiàn)有的甲骨文異體字進行動態(tài)描述,并建立字形庫和描述庫中字形對照表。
步驟5 對已經(jīng)識別的甲骨文的輸入,使用通用的輸入方法輸入現(xiàn)代漢字,利用步驟4中建立的字形對照表調(diào)用甲骨文字形描述庫進行輸出。
步驟6 對目前還沒有識別的甲骨文字有兩種輸入方法,一是使用字形描述庫中的索引號直接輸入,二是通過步驟5先輸入和已經(jīng)識別文字的相似字形,通過動態(tài)的調(diào)整形成新的需求字形,并且存儲后輸出。
在這五個步驟中,除第三步以外,其他步驟實現(xiàn)起來比較容易,而第三步涉及字到圖到字和字到圖的轉(zhuǎn)化,必須設(shè)計甲骨文字形描述規(guī)則。另一方面,描述庫中的字形并沒有完全囊括所有字形,更多的新發(fā)現(xiàn)字形、不規(guī)則字形和異體字等在使用時要對某些字形進行動態(tài)的編輯和調(diào)整,因此,稱為動態(tài)描述。
3.2.1 概念、規(guī)則和定義
與漢字不同的是甲骨文字是契刻文字,不像現(xiàn)在的漢字一樣有完整的筆畫結(jié)構(gòu),給計算機輸入和識別帶來了很大的困難。因此參照現(xiàn)代漢字的書寫方法,引入有向筆段和筆元的概念。
(1) 有向筆段的定義
有向筆段: 是有方向的線段,設(shè)(Xi,Yi)是起始點,(Xj,Yj)是結(jié)束點,則一個完整的有向筆段的描述為:
Bij={(Xi,Yi)|(Xj,Yj)}
(1)
有向筆段的起始點也叫始點(或勢點),有向筆段的結(jié)束點也叫駐點。將筆段定義為有方向性的重要意義在于方便弧線的描述和機器識別。
(2) 筆元的定義
筆元: 筆元是由一個或者多個有向筆段組成的甲骨文中一個完整的筆畫結(jié)構(gòu),設(shè)一個筆元由n個有向筆段來組成,則筆元的描述為:
SSn={BS1,BS2,BS3,……,BSn}
(2)
或者為:
SSn={(Xi1,Yil)|(Xj1,Yj1),(Xi2,Yi2)|(Xj2,Yj2),……,(Xin,Yin)|(Xjn,Yjn) }
3.2.2 甲骨文的基本筆元
筆元相當于現(xiàn)代漢字的筆畫。一個甲骨文字筆元的多少與這一文字的結(jié)構(gòu)有關(guān),由于筆元有方向性,因此同一筆元的描述方法有多種,例如,一橫“—”的描述可以以左邊做為起始點描述,也可以右邊為起點描述,一豎“|” 可以以上邊做為起始點描述,也可以下邊為起點描述,同樣,“撇”和、“捺”也同樣如此,參照現(xiàn)代漢字的書寫原則,筆元的描述按照“由左到右,由上到下,由外到內(nèi)”的順序去描述。根據(jù)對目前5 917個甲骨文的筆元進行統(tǒng)計,我們將甲骨文的筆元分成兩類基本的筆元: 一類是折線筆元(在這里將橫、豎、撇和捺線都視為特殊的折線),另一類是弧線筆元,如表2所示。
表2 甲骨文的基本筆元
3.2.3 兩種基本筆元的有向筆段
有向筆段的方向性是參照現(xiàn)代漢字的書寫順序而確定的,即按照“從左到右,從上到下,從右上到左下,從左上到右下”的書寫順序來確定筆段的方向。例如,橫線的方向性是從左到右,豎線的方向性是從上到下,撇線的方向性是從右上到左下、捺線的方向性是從左上到右下。筆段的方向性確定了筆元描述的一致性規(guī)則,便于后期對甲骨文字的編碼和識別。
折線筆元的有向筆段: 組成折線筆元的有向筆段比較簡單,通常由一到四個有向筆段組成,例如,橫線、豎線、撇線、捺線只有一個有向筆段,上折線、下折線、左折線和右折線有兩個有向筆段,三角形線有三個有向筆段,矩形線有四個有向筆段。
弧線筆元的有向筆段: 組成弧線筆元的有向筆段比較復(fù)雜,通常最少設(shè)定由五至十個有向筆段組成,考慮到不同弧線的書寫順序不同,將書寫方向不同的弧線描述為不同的弧線。例如,左側(cè)弧線“(”書寫順序包括從右上到左下,從上到下,從左上到右下等,右側(cè)弧線“)”書寫順序包括從左上到左下,從上到下,從右上到左下等,因此描述左側(cè)弧線和右側(cè)弧線的有向筆段應(yīng)該使用不同的筆元。如表3所示是各個弧線筆元的有向筆段組成圖。
現(xiàn)代漢字中有的字形使用精度更高的B樣條曲線與Bezier曲線來描述漢字中的弧線,而甲骨文為刻繪文字,使用有向筆段來描述更加接近原始字形。一個筆元中,有向筆段的數(shù)量越多,數(shù)據(jù)描述越精細,將來文字的識別越準確,但計算的復(fù)雜度會越高。
表3 甲骨文弧線筆元的有向筆段
3.2.4 筆元的起始點和終結(jié)點的界定
甲骨文字由筆元組成,每一個筆元都有起點和終點,為了不使多個筆元之間的起始點和終結(jié)點發(fā)生錯亂,必須對筆元的起始點和終結(jié)點進行界定,為此,我們使用二維特征字符進行分割界定。設(shè)(Si,Si)為筆元的起始界點,(Ei,Ei)為筆元的終結(jié)界點。這樣,每個筆元就可以描述為:
SSn={(Si,Si),BS1,BS2,BS3,……,
BSn,(Ei,Ei)}
(3)
或者為:
SSn={(Si,Si),(Xi1,Yi1)|(Xj1,Yj1),(Xi2,Yi2)|
(Xj2,Yj2),……,(Xin,Yin)|
(Xjn,Yjn),(Ei,Ei)}
筆元的起始界點也稱為始界點,筆元的終結(jié)界點也稱為終界點。
3.2.5 歸一化處理
甲骨文字形可以描述為多個筆元的組合,這個組合可以表示為排列(空間)位置上的組合或者書寫順序(時間)上的組合,由于甲骨文不象漢字那樣規(guī)范,因此,按筆元排列位置上的組合不便于操作,因而采用書寫順序上的組合,也就是按照書寫的順序?qū)⒏鱾€筆元進行排列,設(shè)一個甲骨文字有n個筆元,則這個字的描述可以表示為:
ZX={(Si1,Si1),(Xi1,Yi1)|(Xj1,Yj1),
(Xi2,Yi2)|(Xj2,Yj2),……,(Xin,Yin)|
(Xjn,Yjn),(Ei1,Ei1),(Si2,Si2),(Xi1,Yi1)|
(Xj1,Yj1),(Xi2,Yi2)|(Xj2,Yj2),……,(Xin,Yin)|(Xjn,Yjn),(Ei2,Ei2),
(Si3,Si3),(Xi1,Yi1)|(Xj1,Yj1),
(Xi2,Yi2)|(Xj2,Yj2),……,(Xin,Yin)|(Xjn,Yjn),(Ei3,Ei3),
……,
……,(Ein,Ein)
}
(4)
在組合后的筆元中,分割界定的二維特征字符只是一個分界符號,與筆元沒有直接的關(guān)系,另外,一個起點和一個終點的分界符可以合成為一個起點的分界符。因此將其作歸一化處理,這樣表達式(5)就可以表示為:
ZX={(S,S),(Xi1,Yi1)|(Xj1,Yj1),(Xi2,Yi2)|
(Xj2,Yj2),……,(Xin,Yin)|(Xjn,Yjn),
(S,S),(Xi1,Yi1)|(Xj1,Yj1),(Xi2,Yi2)|
(Xj2,Yj2),……,(Xin,Yin)|(Xjn,Yjn),
(S,S),(Xi1,Yi1)|(Xj1,Yj1),(Xi2,Yi2)|
(Xj2,Yj2),……,(Xin,Yin)|(Xjn,Yjn),(S,S),
……,
……,(E,E)}
(5)
歸一化處理之后的始界點和終界點統(tǒng)稱界點。
圖1 字形描述坐標系
(-64,0) (-5,-10)(5,-10) (-64,0)
(-9,-6)(9,-6) (-64,0) (0,-6)
(-1,-4)(-1,-2)(-1,0)(0,3)(2,6)(2,6) (-64,0) (-1,0)(-3,2)(-4,4)
(-4,7)(-3,10)(-1,14) (-64,-64)。
表4 甲骨文描述示例
根據(jù)第3節(jié)所描述的方法,我們設(shè)計了甲骨文字形描述和編輯實驗平臺,在我們已經(jīng)完成的字形庫的設(shè)計基礎(chǔ)上,利用該平臺,我們整理出了5 917個甲骨文字形的描述庫,如圖2,3所示。
圖2 甲骨文字對應(yīng)的描述字符序列
圖3 字符序列對應(yīng)的描述字形庫
表5 甲骨文“”字的描述結(jié)果
續(xù)表
對于已經(jīng)識別的甲骨文字,在輸入時可以使用目前通用的漢字輸入方法進行輸入,如圖4所示在漢字位置輸入漢字“每”一個,便可在甲骨文位置出現(xiàn)每個“每”字的三種甲骨文字形。它是由已經(jīng)建立的現(xiàn)代漢字和描述字形庫的映射關(guān)系,調(diào)用甲骨文字形描述庫進行檢索而輸出的。
圖4 可識甲骨文文字的檢索輸入
圖5 不可識甲骨文列表輸入
對沒有識別的甲骨文字,可以直接通過描述庫中提供的索引號來輸入(圖5),由于輸入和輸出操作都是針對字形描述庫來進行,任意增加一個字形或修改一個字形都不會改變該原有字形的Unicode編碼,因此,保證了同一文字的不同字形的輸入編碼的穩(wěn)定性。
本論文所提出的甲骨文字形動態(tài)描述方法,利用有向筆段和筆元對甲骨文進行動態(tài)的描述,為甲骨文中異體字和未識別的甲骨文的輸入找到了一個解決方法,解決了因內(nèi)碼空間太少而無法對更多的甲骨文字進行編碼和輸入問題。同時,由于描述字形的是文本字符并且是有次序的陣列,因此更方便了機器識別。本課題的下一個目標是建立這些有序字符序列的機器識別模型,實現(xiàn)甲骨文的手寫和掃描識別。
[1] 胡金柱,肖明.關(guān)于甲骨文象形碼輸入法的編碼原理研究[J]. 計算機科學(xué),2002,29(8):109-111.
[2] 劉永革,栗青生.可視化甲骨文輸入法的設(shè)計與實現(xiàn)[J]. 計算機工程與應(yīng)用, 2004, 40(17): 139-140.
[3] 栗青生,楊玉星.甲骨文識別的圖同構(gòu)方法[J]. 計算機工程與應(yīng)用, 2011,47(11):45-48.
[4] 林民,宋柔.一種筆段網(wǎng)格漢字字形描述方法[J]. 計算機研究與發(fā)展,2010,(2): 318-327.
[5] 劉志基. 讀《新編甲骨文字形總表》兼論甲骨文字形檢索系統(tǒng)的完善[J]. 辭書研究, 2006,(2)-013.
[6] 肖明,趙慧,等.甲骨文象形碼編碼方法研究[J]. 中文信息學(xué)報,2003,17(5):60-65.
[7] 沈建華,曹錦炎.新編甲骨文字形總表[M].香港中文大學(xué)出版社,2001.
[8] 江銘虎,鄧北星,等,甲骨文字庫與智能知識庫的建立[J]. 計算機工程與應(yīng)用,2004(4):5-47.
[9] 顧紹通.甲骨文數(shù)字化處理研究進展[J]. 廣西民族大學(xué)學(xué)報(自然科學(xué)版),2008,(2):80-82.
[10] 沈娟,馬小虎.甲骨文的曲線輪廓字形自動生成系統(tǒng)[J], 計算機應(yīng)用與軟件,2009,01-024.
[11] 顧邵通,馬小虎,楊亦鳴.基于字形拓撲結(jié)構(gòu)的甲骨文輸入編碼研究[J].中文信息學(xué)報,2008,22(4):123-128.
[12] 陳婷珠,李新城.《新編甲骨文字形總表》中的異部誤增[J].漢字文化,2010(2):65-68.
[13] 聶艷召,劉永革.甲骨文自由筆畫輸入法[J].中文信息學(xué)報,2010,24(6):103-107.