陳笑蓉,楊撼岳,鄭高山,黃 千
(貴州大學(xué) 計(jì)算機(jī)科學(xué)與信息學(xué)院,貴州 貴陽 550025)
水族是中華民族大家庭中的一員,其90%以上的人口聚居在貴州省,少量散居于廣西壯族自治區(qū)、云南省等地[1]。水族有著自己的語言和文字,水族文字被稱為水書。目前研究發(fā)現(xiàn)并能識(shí)讀的有500多個(gè)單字(不含異體字,包括異體字有2 000多個(gè)字),其形狀類似于甲骨文和金文,主要用來記載水族的天文、地理、宗教、民俗、倫理、哲學(xué)等文化信息。
為搶救保護(hù)珍貴的水書文化遺產(chǎn),2006年,國(guó)務(wù)院正式批準(zhǔn)“水書習(xí)俗”為國(guó)家級(jí)首批非物質(zhì)文化遺產(chǎn)名錄。2002年,經(jīng)“中國(guó)文獻(xiàn)遺產(chǎn)工程國(guó)家咨詢委員會(huì)”評(píng)定,水書入選《中國(guó)檔案文獻(xiàn)遺產(chǎn)名錄》,成為國(guó)家檔案館重點(diǎn)收藏的民族古籍。水書作為珍貴的民族文化遺產(chǎn)受到中央政府和有關(guān)單位的高度關(guān)注。
為了更有效地?fù)尵缺Wo(hù)與利用水書,水族文字的信息化處理成為當(dāng)前亟待解決的問題。
水字所負(fù)載的特征信息可分為三類: 字形類特征信息;字音類特征信息;字義類特征信息[2]。本文僅討論水書字形類特征信息。此外,還有字熵等作為宏觀統(tǒng)計(jì)特征。
由于水族文字沒有形成統(tǒng)一、標(biāo)準(zhǔn)、規(guī)范的字體,本文以《水書常用字典》收錄的水字為藍(lán)本,對(duì)水書字形進(jìn)行分析和討論。
2.1.1 水書筆畫特征信息
下筆后按一定方向連續(xù)畫成的每一筆,就叫作“筆畫”[3]。本文分析了《水書常用字典》收錄的水字,去粗取精,得到水字7種基本筆畫(表1): 橫;豎;撇;捺;點(diǎn)(實(shí)心圓點(diǎn));折(兩筆相接成角);曲(一筆連續(xù)寫成的、復(fù)雜的曲線)。按其方向區(qū)分,橫、豎、撇、捺、點(diǎn)為單向筆畫,折、曲為復(fù)向筆畫。
表1 水字的7種基本筆畫
水字筆畫之間的組合關(guān)系大致可分離散、連接、交叉、包圍結(jié)構(gòu)(表2)。
表2 水字筆畫間的組合關(guān)系
2.1.2 水書字根特征信息
字根(部件)是組配水字的構(gòu)字單元,通過筆畫相互間 “單、散、連、交”式的關(guān)系組成。它可分為兩類: 成字字根和非成字字根。例如,“”;“”為成字字根;排除成字字根外, 7種基本筆畫及它們之間的組合關(guān)系都可為非成字字根。
字根可以根據(jù)設(shè)計(jì)需要,按照一定標(biāo)準(zhǔn),決定選擇個(gè)數(shù)。水字字根集確定后,在其中挑選有限個(gè)字根,可以拼成某一個(gè)水字(圖1)。
圖1 字根拼字的過程
2.2.1 定義
1) 水字集S:S={si|i=1,2,…,n}。式中si為水字,n是該集中水字的總數(shù)。
2) 編碼特征信息元集(碼元集)T:T={ti|i=1,2,…,m}。式中ti為特征信息元(碼元),m是特征信息元的總數(shù)。T集的構(gòu)造應(yīng)易于使用者從字形、字音中提取限定的持征信息,且其編碼序列能覆蓋水字集S。
3) 特征信息元編碼集V:V={vi|i=1,2,…,p},vi=ta1ta2…tal,taj∈T(j=1,2,…,l)。l為組成編碼的碼元個(gè)數(shù),vi為水字的特征信息編碼。
4) 鍵元集K(用作輸入的鍵盤上鍵元的集合):K={ki|i=1,2,…,q}。q用作輸入特征信息元的鍵元的總數(shù)。
5) 鍵元編碼集E(與特征信息元編碼對(duì)應(yīng)的鍵元編碼的集合):E={ei|i=1,2,…,w},ei=ka1ka2…kal,kaj∈K(j=1,2,…,l)。w為該集的大小,l為組成編碼的鍵元個(gè)數(shù),ei為水字輸入的鍵元編碼。
6) 重碼集R:R={ei|i=1,2,…,w1},R?E。w1為重碼的總數(shù)。
7) 水字內(nèi)部碼集M:M={mi|i=1,2,…,n}。M集與S集元素為一一對(duì)應(yīng)關(guān)系,因此集的大小均為n。
8) 映射(函數(shù))
設(shè)X和Y是任意兩個(gè)集合,而f是X到Y(jié)的一個(gè)關(guān)系,如果對(duì)于每一個(gè)x∈X,有唯一的y∈Y,使得〈x,y〉∈f,稱關(guān)系f為X到Y(jié)的映射或函數(shù)。記作f: X→Y。
9) 復(fù)合映射
映射f:X→Y,g:Y→Z。
若g°f={〈x,z〉|x∈X∧z∈Z∧(?y)(y∈Y∧y=f(x)∧z=g(y))},則稱g°f為復(fù)合函數(shù)。
2.2.2 重碼
重碼是兩個(gè)或兩個(gè)以上表意字符相同的輸入編碼,存在兩種類型的重碼[2]。
1) 編碼規(guī)則重碼
編碼規(guī)則是水字集S到特征信息元編碼集V的一個(gè)映射,記為f:S→V。為了易學(xué)和減輕編碼過程中的腦力負(fù)擔(dān),編碼碼長(zhǎng)被限長(zhǎng),從而產(chǎn)生規(guī)則性重碼,即存在若干關(guān)系〈va,si〉,i=1,2,…,l(水字不同而鍵元編碼相同)。
例: 以筆形特征信息的輸入方法
f() =,,;f() =,,
2) 歸并重碼
由于將若干個(gè)特征信息元?dú)w并到一個(gè)鍵元輸入所引起的重碼稱為歸并重碼。
例: 以筆形特征信息的輸入方法
f1() =,,f2(,) = AA,即f2°f1() = AA。
2.2.3 輸入法數(shù)學(xué)模型
由于鍵盤的鍵位數(shù)量有限,又因編碼規(guī)則的簡(jiǎn)明,重碼是不可避免的。最簡(jiǎn)單的處理重碼的方法是通過屏幕提示人工選擇重碼字,因此水字鍵盤輸入方法的數(shù)學(xué)模型可為式(1)所示:
(1)
式中S為水字集,V為特征信息元編碼集,E為鍵元編碼集,R為重碼集,M為水字內(nèi)部碼集。f1:S→V,f2:V→E,f3:E→R,f4:R→M,f5:E→M。
2.2.4 一一映射編碼輸入法(Unicode輸入法)
Unicode輸入法是微軟公司提供的一款沒有重碼的輸入法,即一一映射輸入法。它將每個(gè)字符的十進(jìn)制內(nèi)碼值映射到十六進(jìn)制數(shù)值。在Unicode輸入法狀態(tài)下,鍵入十六進(jìn)制數(shù)值,相對(duì)應(yīng)的字符被錄入計(jì)算機(jī)。其編碼特征信息元集T和鍵元集K為T= {0,1,2,3,4,5,6,7,8,9};K= {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}。
圖2 Unicode輸入法在Word 2003中輸入水字
3.1.1 水字字符集編碼設(shè)計(jì)
水族文字信息化的一個(gè)重要意義在于能讓不同環(huán)境下的操作系統(tǒng)識(shí)別。而水字字符目前在Unicode中還沒有被分配的碼位。本文的編碼方案必須采用Unicode方案,才能保證水字與其他語種文字的混排,保證在不同的操作系統(tǒng)中正常顯示,不出現(xiàn)亂碼。只有這樣做出來的課題,才能得到全世界水書研究者和愛好者的認(rèn)可。
鑒于申請(qǐng)Unicode編碼的長(zhǎng)期性和復(fù)雜性,本文將467個(gè)水字字符臨時(shí)放入U(xiǎn)nicode的Private user(私用碼位區(qū))當(dāng)中的E000-E1D3碼位。
3.1.2 水字字庫制作
本文所用字稿為《水書常用字典》,它錄選常用字468個(gè)。本文剔除1個(gè)重復(fù)字,得到不重復(fù)字467個(gè)[3]。
字庫建立流程: 1. 利用掃描儀掃描字稿;2. 利用圖像處理軟件制作字模;3. 在字庫制作軟件中導(dǎo)入水字模圖象;4. 在字庫制作軟件中,按照實(shí)際需求進(jìn)行修字。制作完成的水字TrueType字庫截圖,如圖3所示。
圖3 水字TrueType字庫的部分水字
3.2.1 特征信息元集(碼元集)的構(gòu)造
本輸入法的設(shè)計(jì)目標(biāo)是向會(huì)寫不會(huì)讀的用戶,提供一個(gè)易學(xué)、易用的水字輸入系統(tǒng)。因此水字的特征信息元在字形中挖掘,采用拼形方法。
構(gòu)成字形的最小結(jié)構(gòu)單元是筆畫,筆畫不僅簡(jiǎn)單而且在理解上相對(duì)容易形成共識(shí)。水字筆形的種類(包括基本筆畫及其組合關(guān)系)遠(yuǎn)比水字字根的數(shù)量少,故相對(duì)字根而言,記憶量小。此外,水字字集中含有20%左右的圖畫文字,如果采用傳統(tǒng)的字根特征信息編碼方法,對(duì)復(fù)雜的圖畫文字編碼是相當(dāng)困難的。故本方案采用筆形特征信息為每個(gè)水字編碼。
大量實(shí)驗(yàn)和統(tǒng)計(jì)的基礎(chǔ)上,將7種基本筆畫按幾何圖形特征,細(xì)分或重組成21種筆畫(表3)?!扒P”被細(xì)分為圓形、上下凸形、左右凸形、波形等;“折”筆被細(xì)分為上下角、左和右角。在筆畫歸類時(shí),傾斜的凸形容易引起歧義,于是規(guī)定傾角小于45度歸于“上下凸”,大于45度歸于“左右凸”。通過實(shí)驗(yàn)發(fā)現(xiàn),如果把“左角”和“右角”歸為一類,重碼字?jǐn)?shù)提高了19%,故將它們細(xì)分為兩類筆形;而“上下凸”、“左右凸”和“上下角”按上下、左右方向細(xì)分后,重碼字?jǐn)?shù)減少了2%~4%,對(duì)重碼的影響不大,因此不再對(duì)它們按方向細(xì)分。
構(gòu)成輸入編碼的筆畫序列方式主要有兩種,筆順方式和取角方式[2]。本編碼方案采用取角方式,取一個(gè)水字3個(gè)角的筆形,組成一個(gè)有序序列表示該水字。水字“取角”最主要的優(yōu)點(diǎn)是可以避開圖畫文字中間復(fù)雜的圖形;不利是重碼略微增加。
3.2.2 鍵盤上特征信息元的分布
特征信息元分布于鍵位的方式主要有三種,音托法、形托法和筆畫結(jié)構(gòu)分區(qū)法[2]。例如,在漢字字根輸入中將漢字字根的聲母發(fā)音依托于鍵元的字母讀音,此法是音托法;以字根的形狀為依托對(duì)應(yīng)于形似的字母鍵位上,是形托法;五筆、鄭碼輸入法采用以筆畫結(jié)構(gòu)的組合方式按鍵盤的位置分區(qū),即筆畫結(jié)構(gòu)分區(qū)法。
本輸入法采用“形托”為主“音托”為輔的方式,將13類筆形分布在其形似的字母鍵位,5類筆形對(duì)應(yīng)于其發(fā)音相似的字母鍵位,3類筆形安排在鍵盤中排易于敲擊的鍵位(表3)。
表3 鍵位分布表
3.2.3 碼長(zhǎng)設(shè)計(jì)
方塊字的特征信息元所依托鍵位的集合是編碼鍵元集,輸入一個(gè)方塊字所需的擊鍵次數(shù)稱之為碼長(zhǎng)。以鍵元數(shù)(a)為底,取碼長(zhǎng)(l)的乘方(al)稱之為編碼空間,它的值代表了在限定的鍵元集和碼長(zhǎng)下,可容納輸入編碼的數(shù)量[2]。
如何設(shè)計(jì)碼長(zhǎng)呢?限定鍵元數(shù)為21,字符集的數(shù)量是467時(shí),我們令碼長(zhǎng)為2、3和4,則它們的編碼空間分別是441(212)、9 261(213)和194 481(214)。碼長(zhǎng)為2時(shí)的編碼空間(441)小于字符集的數(shù)量(467),意味該空間不能容納整個(gè)水字字符集。碼長(zhǎng)為3、4的編碼空間均大于467,因此理論上最大碼長(zhǎng)取3或4都是可行的。
我們假設(shè)編碼是隨機(jī)的(沒有編碼規(guī)則)。在總數(shù)為n的編碼空間中,為m個(gè)水字編碼(m 對(duì)于非隨機(jī)性有確定編碼規(guī)則的輸入系統(tǒng),則字符集重碼概率如式(3): 式中R由編碼規(guī)則決定,稱為人工干預(yù)因子[2]。 當(dāng)碼長(zhǎng)等于3或4時(shí),它們的字符集重碼概率分別是 從“低重碼”的角度來考慮,碼長(zhǎng)取4最理想。但是重碼只是輸入編碼方案設(shè)計(jì)的一個(gè)側(cè)面,輸入效率也是要考慮的重要因素。碼長(zhǎng)取3時(shí),字符集重碼概率為0.02R,其重碼的量級(jí)也是相當(dāng)?shù)偷?,故本方案設(shè)計(jì)最大編碼碼長(zhǎng)為3。 3.3.1 鍵元集和碼長(zhǎng) 本輸入法共用了21個(gè)字母鍵,采用不等長(zhǎng)碼,最長(zhǎng)編碼為3碼。 3.3.2 筆形和鍵元的對(duì)應(yīng)關(guān)系 表4是筆形和鍵元的對(duì)應(yīng)關(guān)系。 表4 輸入法鍵位分布表 續(xù)表 3.3.3 編碼輸入方法 對(duì)水字進(jìn)行編碼時(shí),根據(jù)表中的筆形,按照左上角、右上角、左下角、右下角的取角順序取三碼。 1) 若四個(gè)角均有筆形,則取前三個(gè)角的筆形。 2) 若四個(gè)角中有一個(gè)筆形占兩個(gè)角,則這兩個(gè)角的筆形只取其一。 5) 按實(shí)有筆形取碼,最少一碼,最多三碼。 3.3.4 取碼注意點(diǎn) 1) 含插、叉筆形的字,如該字不足三碼,用插入的一筆筆形和和被插入的筆形補(bǔ)充(叉形中,自上而下的單向筆畫是插入的一筆),不得超過最大碼長(zhǎng)三碼。 2) 含“小離聚"或“大聚集”筆形的字,如該字不足三碼,按取角順序取構(gòu)成離聚的筆畫補(bǔ)充,不得超過最大碼長(zhǎng)三碼。若構(gòu)成離聚的筆畫全部相同,則只須補(bǔ)其中一筆。 6) 有兩復(fù)筆形可取時(shí),上角較高筆形優(yōu)先取,下角較低筆形優(yōu)先取。例如,“”右上角應(yīng)取復(fù)筆“叉”(X),而不取“右角”(Z)。 在遠(yuǎn)東Windows系統(tǒng)下,輸入法的開發(fā)主要是根據(jù)Microsoft提供的IMM-IME結(jié)構(gòu),在它的框架內(nèi)為系統(tǒng)各個(gè)部分編寫代碼,實(shí)現(xiàn)相應(yīng)的功能。 為了方便技術(shù)人員開發(fā)Windows的驅(qū)動(dòng)程序,微軟公司為開發(fā)人員提供了一套用于開發(fā)Windows驅(qū)動(dòng)程序的工具包DDK,利用它就可以開發(fā)輸入法。此外,工具包DDK還提供了相關(guān)文檔以及一個(gè)區(qū)位輸入法的實(shí)例代碼。DDK中的區(qū)位輸入法的代碼,為設(shè)計(jì)其他的輸入法提供了基礎(chǔ),因此設(shè)計(jì)新的輸入法主要就是在這個(gè)區(qū)位輸入法的代碼基礎(chǔ)上進(jìn)行修改,這樣可以大大節(jié)省開發(fā)時(shí)間。 本文在Windows XP操作系統(tǒng)下,Microsoft Visual C++ 6.0中,使用Unicode字符編碼標(biāo)準(zhǔn)作為輸入法內(nèi)部的編碼標(biāo)準(zhǔn),利用區(qū)位輸入法源代碼成功地開發(fā)出了水書筆形輸入法軟件。通過該輸入系統(tǒng)可以把《水書常用字典》收錄的467個(gè)水字中任一字輸入計(jì)算機(jī)中。圖4是水書筆形輸入法在Word 2003中輸入水字的示例。 圖4 水書筆形輸入法在Word 2003中輸入水字 水書筆形輸入法軟件主要由IME轉(zhuǎn)換接口和IME用戶接口兩個(gè)部分組成。IME轉(zhuǎn)換接口是由用戶實(shí)現(xiàn)的一組接口函數(shù),這些函數(shù)將由輸入法管理器在適當(dāng)?shù)臅r(shí)機(jī)調(diào)用,實(shí)現(xiàn)從用戶的輸入編碼到水書字符的轉(zhuǎn)換等功能。IME用戶接口主要的作用是接收各種消息以及通過各種窗口的顯示,讓用戶隨時(shí)了解輸入法的當(dāng)前狀態(tài),為IME提供用戶接口界面。其組成部分包括缺省的IME窗口、用戶界面窗口、用戶界面組件窗口,編碼窗口、狀態(tài)窗口、候選窗口等。輸入法的整體架構(gòu)如圖5所示。 圖5 水書筆形輸入法的組成 1) 缺省的IME窗口[4] 當(dāng)一個(gè)應(yīng)用程序線程初始化時(shí),Windows會(huì)基于IME窗口類為其創(chuàng)建一個(gè)缺省的IME窗口。它管理輸入法編輯器的用戶界面,處理從IME、IMM和應(yīng)用程序之間傳遞的所有消息。應(yīng)用程序的所有輸入法將共享這個(gè)缺省的IME窗口。 2) 用戶界面窗口[4] UI窗口是IME窗口的一個(gè)子窗口,是水書筆形輸入法的總控窗口。當(dāng)IME窗口被創(chuàng)建的同時(shí),IME自身的UI窗口也被創(chuàng)建,并被IME窗口所控制。用戶界面窗口對(duì)用戶也是不可見的,它負(fù)責(zé)接收由IMM和應(yīng)用程序傳來的消息,并根據(jù)消息的內(nèi)容做出響應(yīng)。 3) 用戶界面窗口組件包括狀態(tài)窗口、編碼輸入窗口和字符選擇窗口等[4],它們對(duì)用戶是可見的。所有的組件窗口由用戶界面窗口創(chuàng)建并擁有。 (1) 水書筆形輸入法的狀態(tài)窗口。該窗口的出現(xiàn)意味該輸入法系統(tǒng)已經(jīng)啟動(dòng),可以使用此輸入方法輸入水書字符。通過狀態(tài)窗口,可以調(diào)整輸入的狀態(tài),例如,水書、英文狀態(tài)、半角或全角、中文或英文標(biāo)點(diǎn)符號(hào)等,如圖6所示。 圖6 水書筆形輸入法的狀態(tài)窗口 (2) 水書筆形輸入法的輸入窗口。用于顯示輸入英文字符串,如圖7所示。 圖7 水書筆形輸入法的輸入窗口 (3) 水書筆形輸入法的候選窗口。用于顯示輸入編碼英文字符串映射的水字的候選列表,用戶可以按相應(yīng)的數(shù)字鍵來選擇需要的水字。所有重碼不可能一次全部顯示,部分需要翻頁才能夠顯示,可以按“-”“,”鍵或“=”“.”鍵實(shí)現(xiàn)向前、向后翻頁。如圖8所示。 圖8 水書筆形輸入法的候選窗口 從輸入法菜單中選擇水書筆形輸入法后(圖9),輸入系統(tǒng)從碼表文件中讀入編碼和其對(duì)應(yīng)的水字。并分別用一個(gè)表結(jié)構(gòu)來保存編碼和水字。當(dāng)從鍵盤輸入英文字符串時(shí),輸入法程序可以根據(jù)該表結(jié)構(gòu)迅速地進(jìn)行查找和處理,實(shí)現(xiàn)水字的輸入。系統(tǒng)工作流程圖如圖10所示。 圖9 從輸入法菜單中選擇水書筆形輸入法 圖10 水字筆形輸入系統(tǒng)流程圖 本文制作的TrueType水字輪廓字體美觀、可任意縮放、與設(shè)備無關(guān)。字庫編碼采用Unicode方案,從而保證水字與其他語種文字的混排和在不同的操作系統(tǒng)中正常顯示。水字筆形輸入法的筆畫的種類遠(yuǎn)比水字字根的數(shù)量少,故記憶量小,而且避開了如何去定義“字根”的困難,因此該輸入法易學(xué)、易用。本文的研究為推廣和普及規(guī)范水族文字奠定了技術(shù)基礎(chǔ),對(duì)推動(dòng)水族文字信息化的發(fā)展起到了積極的作用。 致謝: 作者衷心感謝貴州省三都水族自治縣水族文化研究所的潘興文、潘政波和韋世方提供了水字字形資料。 [1] 潘朝霖,韋宗林.中國(guó)水族文化研究[M].貴陽:貴州人民出版社.2004. [2] 陳一凡,胡宣華.漢字鍵盤輸入技術(shù)與理論基礎(chǔ)[M].北京:清華大學(xué)出版社,南寧: 廣西科學(xué)技術(shù)出版社.1994. [3] 韋世方.水書常用字典[M].貴陽:貴州民族出版社.2007. [4] 胡宇曉.基于IMM-IME輸入法接口的實(shí)現(xiàn)方法[J].計(jì)算機(jī)工程與應(yīng)用,2002.38(1): 117-124. [5] 郭平欣,張淞芝.漢字信息處理技術(shù) [M].北京:國(guó)防工業(yè)出版社.1985. [6] Yang Hanyue, Chen Xiaorong. Shui Nationality Characters Stroke Shape Input Method[C]//Proceedings of the 6th IEEE International Conference on Natural Language Processing and Knowledge Engineering. 2009: 127-132. [7] Hai Guo. NaXi Pictographs Input Method and WEFT[J].Journal of Computers,2010,5(1):117-124. [8] 顧紹通,馬小虎,楊亦鳴.基于字形拓?fù)浣Y(jié)構(gòu)的甲骨文輸入編碼研究[J].中文信息學(xué)報(bào).2008, 22(4):123-128.3.3 水書筆形輸入法編碼規(guī)則
4 水書筆形輸入法軟件的實(shí)現(xiàn)
4.1 筆形輸入法軟件的開發(fā)
4.2 筆形輸入法軟件的組成
4.3 系統(tǒng)工作流程圖
5 結(jié)論