有了「初次試作篇」的製作經驗後,
我對輸入法對照表的蒐集、整理,也有了更深刻的領悟,
因此,我想整理出一系列像樣一點的「中文輸入法對照表」,
並希望能對各位有所幫助!

本文將介紹我製作「泰瑞倉頡輸入法對照表」的過程,
使用大易、行列輸入法的網友們,
如果有興趣的話,可以參考我的方法試做看看,
只要用 Google 搜尋「大易 cin」、「行列 cin」的關鍵字,
就能找到一些可以使用的對照表檔案,
希望您也能做出一個可以滿足外字需求或達到理想目標的對照表。

一、使用工具:
(一)字型:
   系統字型必須支援 CJK、CJK Extension A、CJK Extension B 的字元,
   在 Windows XP/Server 2003 中可安裝「新細明體更新套件」,
   在 Windows Vista/Server 2008(或以後版本的 Windows)則不需安裝字型。
   本文製作環境為 Windows XP 加裝「新細明體更新套件」,
   再將「新細明體」、「新細明體-ExtB」置換為 Vista 的版本,
   有關新細明體的版本差異,請見《Big5、Unicode 中文字集總整理》一文。
(二)Excel 2007(或更新版本的 Excel):
   Excel 2003 和舊版的 Excel 中每個工作表最多只能有 65,536 列。
   Excel 2007 中每個工作表最多可以有 1,048,576 列。
   因為我要處理的「組字字根:詞組」數量會超過 CJK 三區合計的 70,195 個字,
   所以必須使用 Excel 2007,才不會有列數上的限制。
(三)EditPlus 3:
   字型設為「新細明體」,檔案編碼設為「Unicode」。
(四)W3C 的 Richard Ishida 提供的「Utilities: Unicode code converter」:
   因為我對 Excel 的函數並不熟悉,也不會撰寫巨集程式,
   所以將字元轉為 Unicode 十進位碼的工作,我是用這個網頁分批進行的。

二、原始檔案:
(一)取得包含罕見字的倉頡輸入法「組字字根:詞組」對照表
   到 gcin 網站下載以下兩個檔案:
   1.第五代倉頡輸入法(2008年最新版)
    檔案說明:「倉頡之友 。馬來西亞」製作,不含詞庫, 2008-04-09 更新,支援 64544 字
    (註:不管用➊以「imegen.exe」這支程式逆轉「倉頡之友 。馬來西亞」輸入法軟體的 mb 檔,
    或➋gcin 網站上這個檔案,正確計算其「組字字根:單一漢字」可得 67,988 條,
    用 Excel 對這 67,988 條裡的漢字進行「唯一化」的進階篩選,可得 63,972 字,
    所以實際上這個「倉頡之友 。馬來西亞」輸入法軟體只支援 63,972 個漢字。)
   2.第五代倉頡輸入法補完
    檔案說明:cnscj.cin 裡定義的 17654 罕用字,配合「倉頡之友 。馬來西亞」可支援 82198 字
    (註:cnscj.cin 指的應該是「中標倉頡」)
(二)取得第三代倉頡輸入法的「組字字根:詞組」對照表
   一樣到 gcin 網站下載這個檔案:「微軟倉頡三代」
(三)取得亂倉打鳥輸入法的對照表:
   一樣到 gcin 網站下載這個檔案:NewCJ3Win.zip
(四)前三個檔案解壓縮後,可以得到「cj5.cin」、「cj5-oxim-additional-1.1.6.cin」、「NewCJ3Win.txt」,
   第三代倉頡輸入法的「組字字根:詞組」對照表則是「mscj3.cin」(不需解壓縮)。

三、製作步驟:
(一)新增一個空白的 Excel 活頁簿檔,先規劃 5 個工作表:
   1.「CJK」工作表:A 欄填入「19968」到「40869」的數值,
    等會要用它們來驗證 CJK 的字元是否都被收錄到「組字字根:詞組」裡。
   2.「CJK-Ext-A」工作表:A 欄填入「13312」到「19893」的數值,
    等會要用它們來驗證 CJK Ext-A 的字元是否都被收錄到「組字字根:詞組」裡。
   3.「CJK-Ext-B」工作表:A 欄填入「131072」到「173782」的數值,
    等會要用它們來驗證 CJK Ext-B 的字元是否都被收錄到「組字字根:詞組」裡。
   4.「gcin」工作表:等會要用它來放置從三個「原始檔案」裡擷取出來的「組字字根:詞組」。
   5.「Sort」工作表:等會要用它來放置正式的「組字字根:詞組」,並做排序的工作。
   註:以上 6 個數值為三個 Unicode Block 首、尾字的「Decimal code points」(十進位碼)。
(二)以 EditPlus 開啟「原始檔案」的三個 *.cin 檔,
   (如果 EditPlus 有詢問是否選擇其他編碼,則先選擇「是」,再選「UTF-8」)
   然後將 *.cin 檔內容貼到 Excel 的工作表中:
   「cj5.cin」:取第 42 行至第 68029 行。
   「cj5-oxim-additional-1.1.6.cin」:取第 1 行至第 17654 行。
   「mscj3.cin」:取第 34 行至第 22215 行。
   將上述三段內容直接貼到「gcin」工作表的 A 欄。
   因為三代和五代很多字的取碼方式是一樣的,
   因此要過濾掉重複的部份,將來拆字時才不會在候選字窗格看到兩個一模一樣的字。
   作法是:在 A1 儲存格新增標題,
   再用「進階篩選」的「不選重複的記錄」功能,
   將不重複的 A 欄資料置放於 B 欄。
(三)將「gcin」工作表 B 欄得到的不重複資料,貼到「Sort」工作表,
   不過貼上之前,應先將「組字字根:詞組」分隔的空白改為 Tab
   (可用 EditPlus 的「取代」功能來做),
   這樣貼到「Sort」工作表時,即可獲得 A、B 兩欄資料。
(四)將「Sort」工作表 B 欄資料分批(每批 1 萬至 2 萬字)貼到
   「Utilities: Unicode code converter」的「Characters」欄,
   算出對應的「Decimal code points」後,
   將分隔的「 10 」取代為分行符號(可用 EditPlus 的「取代」功能來做),
   然後貼到「Sort」工作表的 C 欄,並在第一列新增標題。
   再將全部資料依「Decimal code points」排序。
   最後再用「進階篩選」的「不選重複的記錄」功能,
   將不重複的 C 欄數值置放於 D 欄。
(五)將「Sort」工作表 D 欄裡
   「13312 - 19893」、「19968 - 40869」、「131072 - 173782」三段範圍的數值,
   分別貼到「CJK-Ext-A」、「CJK」、「CJK-Ext-B」三個工作表的 B 欄,
   此時各位應可發現 A、B 欄列數正好相符,
   將 A 欄各數值除以 B 欄對應的數值後(可使用「向下填滿」功能來做),
   所得結果都是「1」,沒有別的數值!(可使用「自動篩選」功能來查看)
   此即表示「Sort」工作表的「組字字根:詞組」在去除「同一個字有不同拆法」後,
   可用上述的方式檢驗出 CJK 三區合計的 70,195 字都被收錄了!
   (如果 B 欄跳號太嚴重的話,這就不是個好的驗證方式,
   那時便需借助「彰化一整天」所提供的「比較ab資料」)
(六)刪除「Sort」工作表 D 欄的資料,因為它只是驗證是否跳號的暫時資料,
   沒必要保留;如果保留了,反而會讓後續的排序產生問題。
(七)「Sort」工作表目前是依「Decimal code points」排列,
   這會使得做出來的輸入法,如果出現候選字時,CJK Ext-A 的字元會排得比較前面;
   但即使我們依 CJK、CJK Ext-A、CJK Ext-B 的順序來放置「組字字根:詞組」的話,
   仍會有很多筆劃較少的「次常用字」比「常用字」排得較前面,
   比如「冇」和「有」同樣都是 CJK 的字元,倉頡碼同樣都是拆「大月」。
   為了解決這個問題,就必須引進 Big5 碼的分區管理,
   Big5 碼的「A440~C67E」為常用字區,「C940~F9D5」為次常用字區,
   要算出「Sort」工作表 B 欄各字元的 Big5 碼數值,
   可使用「=CODE(Text)」函數,
   做法是在 D2 儲存格輸入「=CODE(B2)」,然後再用「向下填滿」的功能,
   產生各字元的 Big5 碼數值,不過這個數值是十進位的數值,不方便比較。
   但我們可以將「A440~C67E」和「C940~F9D5」轉換為十進位制,
   不會換算的人可以運用上述的「Utilities: Unicode code converter」,
   把這四個十六進位值貼到網頁中的「Hexadecimal code points」,
   按下「Convert」後,即可得到「Decimal code points」。
   也就是「42048~50814」為常用字區,「51520~63957」為次常用字區。
   (實際上,次常用字區應為「51520~63964」,
   63958~63964 的 7 個碼位原本被 Big5 碼定義為造字區的一小段,
   每個人可以隨意將造好的字元儲存在這一小段的碼位裡,
   也就是說:
   甲電腦的「63958 碼位對應的字元」可以不同於乙電腦的「63958 碼位對應的字元」,
   但倚天中文系統有另外定義 7 個字元對應到這 7 個碼位,
   Windows 延續倚天中文的作法,
   所以每台電腦在 Windows 環境下都能共同顯示這 7 個字元,
   因此它們也常被視為 Big5 碼的字元)
   此欄函數計算結果為「63」者,
   代表那個字不是「ANSI」(正體中文 Windows 為 Big5 碼)的字元!
(八)「Sort」工作表至此已有「組字字根」、「字元」、
   「Unicode Decimal code points」和「Big5 Decimal code points」四欄,
   並且是依「Unicode Decimal code points」排序,
   可再增加「權數」欄(E 欄),
   先以「Unicode Decimal code points」(C 欄)的範圍為判斷準則,
   輸入 E 欄數值如下:
   1.C 欄數值介於「19968~40869」(CJK)之間者,E 欄輸入「19」,
   2.C 欄數值介於「13312~19893」(CJK Ext-A)之間者,E 欄輸入「30」,
   3.C 欄數值介於「131072~173782」(CJK Ext-B)之間者,E 欄輸入「40」,
   4.不屬於此三區者,則輸入 E 欄數值如下:
    (1)B 欄顯示成漢字者,E 欄輸入「20」,
    (2)B 欄顯示成符號者,E 欄輸入「50」,
    (3)C 欄數值為「64062」或介於
     「59413~59492」、「194560~195101」、「1029723~1048575」
     之間者,E 欄輸入「60」
     (這段範圍的字元不能正常顯示,等會不列入輸入法對照表裡)。
   然後依 E、D、C、A 欄的階層順序,由小到大、由 A 到 Z 排序!
(九)「Sort」工作表至此已依接近我們想要的排列順序,
   再把 D 欄數值介於「42048~50814」之間者的 E 欄從「19」改為「11」;
   介於「51520~63964」之間者的 E 欄從「19」改為「12」,
   然後依 E、D、C、A 欄的階層順序,由小到大、由 A 到 Z 排序!
   至此,Big5 的常用字已排在最前面了!
(十)將 E 欄數值介於 11~40 之間對應的 A、B 欄,複製後貼到 EditPlus 的空白文件中,
   然後將「組字字根:詞組」的分隔改為空白,
   再加入「可用按鍵宣告」及從「亂倉打鳥」輸入法整理出來的「組字字根:符號」,
   再儲存為編碼格式為「Unicode」的 *.txt 檔,
   就完成了正式版的「泰瑞倉頡輸入法對照表」。

「泰瑞倉頡輸入法對照表」的候選字排列順序與 Windows 的傳統倉頡類似,
但我的對照表檔案是可以修改的,
產生輸入法後儲存在 C:\Windows\System32 的檔案可以刪除後,
再用「通用輸入法編輯工具」產生新的,
即會套用修改後的對照表裡的設定。

後記:
因為微軟的第三代倉頡輸入法對照表裡只有 CJK 字元,
沒有 CJK Ext-A 和 CJK Ext-B 的字元,
所以我後來又重新整理了一遍:
先將 gcin 網站上的「馬來西亞。倉頡之友」的第五代倉頡輸入法對照表及補完檔做成一個對照表,
再與「中標倉頡」(CNS 全字庫的第三代倉頡組字字根)對照表(有補了 253 個缺字)混合,
做成另一個對照表,
製作過程如本文和《支援 CJK Ext-B 字元的「泰瑞注音輸入法對照表」(製作過程篇)》的說明,
在此就不再多做介紹了!
對「泰瑞倉頡輸入法對照表」有興趣的人請到
「泰瑞系列中文輸入法對照表」使用說明》一文內查看並下載回去使用吧!

arrow
arrow
    全站熱搜

    terryhung 發表在 痞客邦 留言(0) 人氣()