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