Current revision |
Your text |
Line 23: |
Line 23: |
| ====四、字根(字元)及其他==== | | ====四、字根(字元)及其他==== |
| 字根的概念也不知最初是由誰提出的。揚棄了保守漢字的偏見來說話罷:字不是從字根上長出來的,字根的細胞也絕無可能克隆出鮮活的字來。朱邦復、王永民先生的用意當然是好的,可歎步塵者師心自用往往叛離了先驅者的苦心。一句話:輸入法從來也永遠不可能成為漢字的皈依。其實,倉頡、五筆與四角號碼、中國字庋擷一樣,都是漢字的檢索法,以抽象的抽象而無法再現漢字。 | | 字根的概念也不知最初是由誰提出的。揚棄了保守漢字的偏見來說話罷:字不是從字根上長出來的,字根的細胞也絕無可能克隆出鮮活的字來。朱邦復、王永民先生的用意當然是好的,可歎步塵者師心自用往往叛離了先驅者的苦心。一句話:輸入法從來也永遠不可能成為漢字的皈依。其實,倉頡、五筆與四角號碼、中國字庋擷一樣,都是漢字的檢索法,以抽象的抽象而無法再現漢字。 |
- | ===IDS===
| |
- | SGD的框架是以IDS爲基礎的。IDS的全稱是 ideographic description sequence,與之易混淆的還有一種 IDC——ideographic description characters,前者由GBK提出,後者由臺灣的中文處理實驗室(CDP)提出。IDC中的 C-characters意爲operators即操作符、運算符、連接符,IDS中的S-sequence指序列、算式、表達式。IDS所提出的表達式規範,使得每一條IDS都是如前文所講的,函數關係中有唯確定值的函數自變量,所對應的應變量也就是唯一確定的漢字。IDC與之相比,不具備唯一確定性,這是弱點之一。此外,按SGD的思想,亦認為IDS的表達式更簡單明晰也因而更準確可靠。
| |
- |
| |
- | 那麼,又來故弄玄虛了,得罪!其實說白了很簡單,舉例如下:
| |
- |
| |
- | 比如「神通廣大」四字,直觀地看,神通廣三個字都不像大字那樣單純,好比,我們說「神」字是「左邊一箇示字旁,右邊一個申字」,像這樣的字,在中國大陸的語文教學中一般就稱作「合體字」,而形如「大」字之「不可分」者,對應的,就叫獨體字。那麼「神、通、廣」用IDS來解析就寫作:神—⿰礻申,通—⿺辶甬,廣—⿸广黃。
| |
- | 你說甚麼?看不清!Zoom! IN! 再IN! 你還在用IE呀,眞拏你沒辦法。 ◫礻申,◳辶甬,◲广黃——這樣看清了吧!如果用IDC寫呢,就是:[礻+申]、[辶@甬]、[广@黃]。
| |
- | ——這是IDC嗎,騙誰呢!不錯,這是zgheng君作《廣韻》字表時所用的構字符的變體,我如果用IDC寫,你老許是看不到的,因為IDC竝未被 UNICODE採納。不過道理是一樣的。IDC的每一次組合都是中間一箇連接符,兩邊一對括號。假如沒有括號,比方把通字再細分一下:辶@マ/用(“/” 表上下結構。),人或許還能猜出熟識的字來,電腦可不會打燈謎。
| |
- |
| |
- | 簡潔倒算是次要的了,最關鍵是明晰。IDS是由連接符決定部件個數,不僅省掉了括號而且層次也因而清晰。
| |
- | 如,符號◫在表左右結構的同時亦決定了參與構造的部件是兩箇,那麼部字就寫成◫咅阝,若再細分就寫成◫⊟立口阝,也就是在IDS中包含了其他的IDS(序列),每條獨立的IDS是一個字,每條嵌入的IDS是一箇部件。「◫⊟立口阝」隱含地表示了「◫[⊟立口]阝」。這種解析方式其優勢在於它將每箇漢字都歸納成了樹形結構(tree)。而樹是一種非常典型的數據結構(data type),用各種programming language處理起來都很方便。換言之,IDS使漢字的結構分析滿足了可編程條件。
| |
- |
| |
- | ◫⊟立口阝=
| |
- | 部_____立
| |
- | | |_口
| |
- | |___阝
| |
- |
| |
- | 長於思考的讀者讀到這裏大概就要發難了,因文中已出現了一些自相矛盾的地方——至少表面上看起來。
| |
- |
| |
- | ◫⊟立口阝=◫咅阝=部,兩種IDS的寫法,究竟哪一箇纔是正確的表述?立字是不是還可以再分,那口、阝呢?咅字《說文》不是作「从丶从否」嘛,你強分成立口又是何道理?
| |
- |
| |
- | 對第一個疑問,我的回答是:都正確。但是,對數據庫而言,對計算機數據處理來講,模棱兩可絕對是大忌,況且也不經濟。SGD的解決辦法是這樣的,數據庫原則上只收錄最簡的IDS構字式,假如用戶選用了如同「◫⊟立口阝」那樣相對複雜的表述形式(立、口畢竟比咅通俗得多),我們自有辦法讓它先轉化成最簡形式(具體如之何,暫且不表),然後再進行後續的處理。
| |
- |
| |
- | 對第二箇疑問,我回答:立字還繼續可分成亠䒑或一上部與一,而口、阝則不可分。這不僅是一個Good question,而且是要命的question——原則問題。重申一下。SGD對漢字字形的分析堅持客觀原則與相對原則。
| |
- |
| |
- | SGD的核心是一個由IDS構字式到被還原漢字之間的函數,形如:y=f(x)
| |
- |
| |
- | y是被還原漢字,x是IDS構字式。x的定義域是SGD數據庫所收錄的全部IDS構字式(目前有四萬余條最簡構字式),y的值域就是這些構字所對應漢字的字集。
| |
- |
| |
- | 注意,IDS不能解析所有的已知的和潛在的漢字。x的定義域旣不是無限的,也不是線性的(離散,漢字當然是離散分佈的),這就是SGD對相對原則的具體應用。x定義域以外的字,也就是用IDS無法描述的字,主要是獨體字、特殊合體字和錯雜合體字,具體定義見下文。我說過,SGD還是一個雞子模樣的東東,有些問題尚未得到圓滿解決。我發表此文的一個主要目的就是向諸君求計。
| |
- |
| |
- | 對第三箇疑問,我回答:SGD的原則是就字論字,眞書作何字,SGD就解何字。㕻(⊟丶否)和咅(⊟立口)在眞書中雖然有正奇的關係但絕不是一箇字, IDS的不同就是明證。對SGD對漢字的解析不限於unicode 3.1中的CJK字集,SGD與異體字的問題見下文,㕻咅是否同字的辯證請參閱The Unicode Standard 4.0 Chapter 11中對unification的解釋。
| |
- | ===SGD 中的構字式===
| |
- | ====部件樹與獨立漢字====
| |
- |
| |
- | 【1】獨立的漢字也是構字式。沒錯,我們有必要把獨立的漢字也看成是構字式。比如漢字「天」、「地」、「玄」、「黃」,就是四箇構字式。我將獨立漢字的構字式稱作獨立型-singleton。之所以要引入這個概念,就是因為:1,幾乎*所有更複雜的構字式都可以被分析成singletons。2,構字式可以包含子構字式,依前文所述,每條子構字式描述一箇部件,整條構字式描述一箇字。比如,前例的「部」字,可解析爲「◫咅阝」,又可進一步解析作「◫⊟立口阝」,咅本身是一個獨立的字,它在構字式的功能與⊟立口相當,在字與構字式之間竝不存在一道不可逾越的鴻溝,而與此同時,「部」字又可以充當其他字的構成部件,如:「廍」=「◲广部」,所以,在字和部件之間也沒有甚麼明晰的疆界。SGD 將所有的漢字都看成是潛在的構字部件,同時,每一條構字式(包括子構字式。相信各位讀者已然意識到了,這箇「子」字是無關緊要的)都對應一箇潛在的構字部件。所以說,獨立漢字也是構字式,這是對IDS的一條必要補充。
| |
- |
| |
- | 有女同車 22:57, 19 April 2007 (EDT)
| |
- | *有一些例外,詳下文。
| |
- | 有女同車 22:57, 19 April 2007 (EDT)
| |
- |
| |
- | 【2】與singleton對應,樹形的類IDS的構字式就稱作複合型- composition.例略。
| |
- |
| |
- | ====對composition 的分析====
| |
- | 【1】僅由一箇連接符和相應箇數的singletons組成的compostion構字式,我們稱其爲簡單的複合-simple compound。
| |
- | 【2】包含兩箇以上連接符的composition構字式,稱作複雜的複合-complex compound。
| |
- |
| |
- | 應用於前例:
| |
- | ◫咅阝-simple
| |
- | ◫⊟立口阝-complex
| |
- |
| |
- | 如前所述,SGD盡可能地只收錄最簡的構字式。這箇最簡主要就是指simple compound,如果對給定漢字暫時無法進行ids解析,如「一」字、「阝」字,我們就將其作為singleton來處理,這是最簡的另外一個含義。
| |
- |
| |
- | SGD的第一箇目標就是實現從所有合法構字式到所對應漢字的還原。像「◫⊟立口阝」這樣的complex複合構字式當然是合法的格式,實現從complex到漢字的還原,所採取的手段就是complex2simple的轉換嘗試。
| |
- |
| |
- | 比如漢字「謳」,所對simple compound構字式爲「◫言區」。如果用戶提交的ids爲「◫言⍃匚⊟口◫口口」(「言」加上「匚」和三個「口」(品字)的複雜描述),那麼SGD先將這個複雜的複合型構字式轉換成簡單的複合型構字式「◫言區」,然後再從數據表中查出「◫言區」所對應的漢字「謳」。
| |
- |
| |
- | 但是,並非所有可拆解的漢字都能用simple compound ids來表述。比如「侯」=「◫亻⊟ュ矢」、「冠」=「⊟冖◳元寸」,⊟ュ矢和◳元寸都沒有對應的漢字(侯是矦的隸變異體),但這兩條構字式的確又是最簡的複合型,it's not simple but the simplest,「嘗試」二字就是針對這種情況的,這是「最簡」的含義之三。SGD會將「⊟冖◳⊟一兀寸」先轉換成「⊟冖◳元寸」,然後還原成「冠」字。
| |
- |
| |
- | All simple compostions are simplest,反之則不然。
| |
- |
| |
- | ====對singleton的補充====
| |
- | IDS的全部材料都取自現有字集,確切說就是unicode cjk unified及ext a/b。現有字集中的可拆解字符(直觀上)並不能全部以現有字集中的字符來描述,比如郎的左部、即的左部、经的右部等,unicode現有字集中並沒有這些字或部件。另有一些字從造字機理上看包含某獨立漢字的省形,如「傷」字依《說文》從「𥏻」省,「度」從「庶」省,而「𥏻」省、「庶」省都不成字。此外,還有一些部件,雖然從造字機理上講不通,但在眞書中確有類推應用,如「秦、泰、春、舂」的上部,「表、毒、青、責」的上部等。前文反復強調,SGD以客觀原則而就字論字。所以有必要補充一些客觀存在的部件以滿足ids解析的需要。SGD是反對主觀臆斷的字根的,它以如下兩種方式來描述這些補充部件。
| |
- |
| |
- | 【1】V-singleton.SGD引入了變體的概念,V是variant的縮寫。此類部件主要是指那些原本獨立的漢字在充當構字部件時的特殊寫法。如前文所舉「郎」字,其左部就是「良」字在左右結構的合體字中充當居左部件時的變體。類似的如「騰、謄」的左上部是「𣎌」字的變體,「卷」字的上部是「𢍏」字的變體。又如「经」右部是「巠」的字簡化變體,「陥」右部是「臽」字的日文漢字變體。理論上一箇字符可以有多種變體,但目前SGD只引入了一種單一的標識方式,即在正體字符前加標識符V,如以V良標示郎左,以V臾表示「䛕」右。所有的變體部件都是 singleton,功能上與獨立漢字的singleton相當。
| |
- |
| |
- | 【2】X-singleton.此類部件是用於描述那些省字和無理部件的。如度字從庶省,從又,庶省的X-singleton 表述爲「◲庶X」;又如,島字從鳥省從山,鳥省的X-singleton 表述爲「◱鳥X」。X-singleton也是一種變體,標識某些獨立漢字去掉特定部位部件後的形態。它的表述形式有一定的描述性,看上去像是一種逆成的 IDS——好比「◲庶X」等价於:假定庶=◲YX,求Y——但它不是IDS,只是一種標識,在IDS表達式中它的功能與獨立漢字的singleton相當。
| |
- |
| |
- | 既然上述兩種特殊的部件表述方式都被看做singleton,那麼對simple compound的定義可以擴展爲:只包含一個連接符和相應個數singlegons/X-singletons/V-singletons的 composition構字式。如「◲◲庶X又」(度)、「H纟V巠」(经)也都是simple的。
| |
- |
| |
- | ====SGD中的IDS連接符====
| |
- | 在SGD中,IDS表達式中的連接符號以「神似」的大寫羅馬字母代替,這是因為;一方面,在utf-8格式中羅馬字母只占一箇字節,比較經濟;另一方面, postgres對ids operators和上文所用的一些幾何符號的處理有一些bug;再者就是,羅馬字母也能給用戶帶來方便,畢竟現在通行的IME和鍵盤佈局中還很少有支持這些字符的錄入的。
| |
- | SGD所用連接符和標識符全表如下:
| |
- | {|class="prettytable"
| |
- | |⿱
| |
- | |⊟
| |
- | |Z
| |
- | |2
| |
- | |上下
| |
- | |-
| |
- | |⿰
| |
- | |◫
| |
- | |H
| |
- | |2
| |
- | |左右
| |
- | |-⿲
| |
- | |⫴
| |
- | |W
| |
- | |3
| |
- | |左中右
| |
- | |-
| |
- | |⿳
| |
- | |⌸
| |
- | |E
| |
- | |3
| |
- | |上中下
| |
- | |-
| |
- | |⿴
| |
- | |⧈
| |
- | |O
| |
- | |2
| |
- | |包圍
| |
- | |-
| |
- | |⿷
| |
- | |⍃
| |
- | |C
| |
- | |2
| |
- | |左包圍
| |
- | |-
| |
- | |⿶
| |
- | |⍌
| |
- | |U
| |
- | |2
| |
- | |下包圍
| |
- | |-
| |
- | |⿵
| |
- | |⍓
| |
- | |N
| |
- | |2
| |
- | |上包圍
| |
- | |-
| |
- | |⿸
| |
- | |◲
| |
- | |P
| |
- | |2
| |
- | |左上包圍
| |
- | |-
| |
- | |⿺
| |
- | |◳
| |
- | |L
| |
- | |2
| |
- | |左下包圍
| |
- | |-
| |
- | |⿹
| |
- | |◱
| |
- | |Q
| |
- | |2
| |
- | |右上包圍
| |
- | |-
| |
- | |┛
| |
- | |◰
| |
- | |J
| |
- | |2
| |
- | |右下包圍
| |
- | |-
| |
- | |〾
| |
- | |≆
| |
- | |V
| |
- | |1
| |
- | |V變體
| |
- | |-
| |
- | |〿
| |
- | |☒
| |
- | |X
| |
- | |0
| |
- | |X變體占位符
| |
- | |-
| |
- | ⿻
| |
- | |⧉
| |
- | |D
| |
- | |2
| |
- | |重疊
| |
- | |}
| |
- | ===SGD 的 backend(後端)===
| |
- | 我已整理了49303箇CJK字符的最簡構字式,包含CJK unified 字集的絕大多數字符和ext a/b的部分字符。其中未拆解的singletons 782個,simple compound 47478 個。
| |
- |
| |
- | SGD現以postgresQL關係型數據庫管理系統(rdbms)爲載體,選擇postgres的原因是出於下述這些方面的考慮:
| |
- |
| |
- | 1)postgres是自由、開源軟件。SGD也是自由開源軟件。暫擬以GPL發佈。
| |
- | 2)postgres是跨平臺的功能完備的而且號稱是最高級的 free rdbms系統,有廣大的用戶羣和豐富的技術資源。
| |
- | 3)postgres對SQL國際標準有相當容程度的兼容,作為國際標準的追隨者,我很自然地要選擇更規範的postgres而不是mySQL。
| |
- | 4)postgres支持procedure language(PL,過程語言)的後端編程,PL/pgsql是sql語言的擴展,後端編程可以提高數據庫的操作效率,而且sql也是我比較熟悉的語言,選擇它可以縮短我的學習曲線。
| |
- | 5)postgres 對unicode plane2部分的字符支持良好。這可能是最重要的一個原因。比如,在postgres中用length函數獲取字符串長度,length ('Q𢦏木')(栽的ids)的結果是3而不是其他的甚麼莫名其妙的數值。
| |
- |
| |
- | postgreSQL 下載地址:
| |
- | http://www.postgresql.org/download/
| |
- | postgreSQL的安裝配置不在本文的討論範圍之内,這裏簡單說幾句,詳細指導請參考官方網站的相關信息。
| |
- |
| |
- | postgreSQL在M$ windows xp下的安裝很簡單,幾乎可以單擊完成。應注意的是,自動安裝的可執行文檔要求安裝目錄必須在NTFS格式的硬盤分區中。當然,如果是手工安裝也可以安裝到其他格式的分區中,只是我沒試過。安裝包中附帶圖形界面的客戶端管理程序pgAdmin III,數據庫的維護,SQL語言查詢,PL函數的編寫調試都可以在此界面下實現。
| |
- |
| |
- | 這裏是實驗階段的SGD數據庫備份文件的壓縮檔,你可以將它恢復到你的數據庫中,擺弄擺弄,看看好不好用。
| |
- | ===SGD已實現的和部分實現的功能===
| |
- |
| |
- | ====將IDS表達式解析成部件樹====
| |
- | 函數名:ids_tree(ids_exp,pos)
| |
- | 參數1_ids_exp:IDS 表達式或singleton
| |
- | 參數2_pos:(子)IDS表達式在部件樹上所對應節點的ID,遞歸調用時會用到此參數,初始值應設爲 null 或 ''。
| |
- | 返回值:無。該函數將IDS表達式的樹形分析結果及中間值保存在table ids_components_buffer中。每一次調用都會更新此table。
| |
- |
| |
- | 實例:
| |
- | select ids_tree('H言C匸Z口H口口'null);
| |
- | select * from idsa_components_buffer order by position;
| |
- | 更新後的 idsa_components_buffer 如圖:
| |
- |
| |
- | position爲節點的ID;operator爲連接符,singleton的連接符就是singleton本身;type是節點的類型;length是該節點所包含的子節點數;start和end是節點在ids字符串中的起止位置。
| |
- |
| |
- | ====由IDS表達式還原CJK字符====
| |
- | 函數名:ids2cjk(ids_exp)
| |
- | 參數_ids_exp:IDS表達式或singleton
| |
- | 返回值:所對應的CJK字符
| |
- |
| |
- | 實例:
| |
- | select ids2cjk('H言C匸Z口H口口');
| |
- | 返回「謳」
| |
- | [[Category:項目]]
| |
- | [[Category:中文信息處理]]
| |