一、使用工具:
(一)字型:
系統字型必須支援 CJK、CJK Extension A、CJK Extension B 的字元,
在 Windows XP/Server 2003 中可安裝「新細明體更新套件」,
在 Windows Vista/Server 2008(或以後版本的 Windows)則不需安裝字型。
本文製作環境為 Windows XP 加裝「新細明體更新套件」,
再將「新細明體」、「新細明體-ExtB」置換為 Vista 的版本。
(二)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 十進位碼的工作,我是用這個網頁分批進行的。
二、原始檔案:
(一)取得包含罕見字的注音輸入法「組字字根 V.S. 詞組」對照表:
到 OpenDesktop 網站,點選左方選單的「OXIM 輸入法 1.2.2」,
再點選「ftp://ftp.opendesktop.org.tw/odp/OXIM/Source/」,
然後下載「oxim-1.2.2.tar.gz」這個檔案。
(二)解壓縮「oxim-1.2.2.tar.gz」,在「tables」資料夾中,有一個「cnsphone.cin」,
這個檔就是行政院主計處公開授權的「全字庫注音輸入法參考檔」,
(應該稱為「對照表」或「輸入法表格」比較正確,
但主計處在此 cin 內的註解使用「參考檔」這個用詞)
我就是用這個檔案來編修成「泰瑞注音輸入法對照表」!
三、製作步驟:
(一)新增一個空白的 Excel 活頁簿檔,先規劃 7 個工作表:
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 的字元是否都被收錄到「組字字根:詞組」裡。
註:以上 6 個數值為三個 Unicode Block,
首、尾字的「Decimal code points」(十進位碼)。
4.「cin」工作表:等會要用它來放置從「原始檔案」裡擷取出來的「組字字根:詞組」。
5.「Loss」工作表:等會要用它來放置短缺的「組字字根:詞組」。
6.「Sort」工作表:等會要用它來放置正式的「組字字根:詞組」,並做排序的工作。
7.「Final」工作表:等會要用它來放置最終的「組字字根:詞組」。
「cin」、「Loss」、「Sort」、「Final」的 A 欄為存放「組字字根」之用,
等會如果直接貼上的話,
純粹以數字組成的組字字根(如:「04」,即「ㄢˋ」)會被 Excel 自動修正格式,
所以需先將 A 欄的儲存格格式設為「文字」。
(二)以 EditPlus 開啟「原始檔案」的 cin 檔,
(EditPlus 詢問是否選擇其他編碼時,先選擇「是」,再選「UTF-8」)
然後將 cin 檔中「91~98015」行的內容貼到「cin」工作表中。
注意!貼上前要先將「組字字根:詞組」分隔的空白改為 Tab
(可用 EditPlus 的取代功能來做);
依上述步驟貼上後,即可獲得 A、B 兩欄資料。
將 B 欄的字元分批(每批 1 萬至 2 萬字)貼到
「Utilities: Unicode code converter」的「Characters」欄,
算出對應的「Decimal code points」後,
將分隔的「 10 」取代為分行符號,再貼到「cin」工作表的 C 欄,
然後在第一列新增標題。
再將全部資料依「Decimal code points」排序。
最後再用「進階篩選」的「不選重複的記錄」功能,
將不重複的 C 欄數值置放於 D 欄。
(此舉的目的是要去除「同一個字會有不同的組字字根」)
(三)將「cin」工作表 D 欄裡
「13312 - 19893」、「19968 - 40869」、「131072 - 173782」三段範圍的數值,
分別貼到「CJK-Ext-A」、「CJK」、「CJK-Ext-B」三個工作表的 B 欄,
此時各位應可發現 A、B 欄列數並不相符,
CJK 短缺 269 個字;CJK Ext-A 短缺 3 個字;CJK Ext-B 短缺 27 個字
(這三區合計的 299 字將在「補完計畫篇」中再做說明)
此即表示「cin」工作表的「組字字根:詞組」在去除「同一個字有不同拆法」(破音字)後,
可用上述的方式檢驗出 CJK 三區合計的 70,195 個字,在這個 cin 檔裡少了 299 個字!
(四)要知道這 299 個字是哪些字,
就得借助「彰化一整天」所提供的「比較ab資料」網頁運算工具,
它的精簡版網址是:http://f272586.googlepages.com/272586.htm
因為它是用 VB Script 寫成的程式,所以請用 IE 進行操作。
將「CJK」工作表 A、B 欄的資料,
貼到網頁中的「來源」區域,然後按下「比較ab資料」鈕,
靜候一陣子(約 10-40 分鐘;
如果 IE 不斷詢問您是否要中止 Script,請一律按「否」;
如果要避免 IE 不斷詢問您是否要中止 Script,可在開啟 IE 前先修改系統登錄值為:
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles]
"MaxScriptStatements"=dword:ffffffff),
就會在「目的」區域得到結果,把它全選(Ctrl + A)後,複製(Ctrl + C)起來,
將「CJK」工作表的資料全清空,再於 A1 儲存格貼上(Ctrl + V),
可得下列結果:
前兩欄為原始的 A、B 欄資料,
第三欄應是空白的(代表 B 欄有,A 欄沒有),
而第四欄的資料(代表 A 欄有,B 欄沒有),即是我們想知道的「缺字」,
第五欄的資料代表 A、B 欄都有的資料,所得結果和 B 欄是一樣的,可以將它刪除。
採取以上相同的作法,
即可為「CJK-Ext-A」、「CJK-Ext-B」兩個工作表找出我們想知道的「缺字」。
(五)把「CJK-Ext-A」、「CJK」、「CJK-Ext-B」三個工作表 D 欄(缺字)的資料,
一一貼到「Loss」工作表的 C 欄,
然後將 C 欄的 299 筆資料複製起來,貼到空白的 EditPlus 檔案裡,
用取代功能將分行符號「\n」取代為「 10 」,
再將結果貼到「Utilities: Unicode code converter」
的「Decimal code points」欄,按下「Convert」後,
再將「Characters」的字元貼回「Loss」工作表的 B 欄。
然後在「Loss」工作表的 A 欄為 B 欄的字元一一補上組字字根(即注音符號)。
(六)將「cin」和「Loss」工作表 A、B、C 欄的資料貼到「Sort」工作表的 A、B、C 欄,
然後在第一列取標題後,
先依「Decimal code points」(C 欄)排列,
接著在 D2 儲存格輸入「=CODE(B2)」,然後用「向下填滿」的功能,
產生各字元的 Big5 碼(十進位)數值。
(七)「Sort」工作表至此已有「組字字根」、「字元」、
「Unicode Decimal code points」和「Big5 Decimal code points」四欄,
並且是依「Unicode Decimal code points」排序,
可再增加「權數」欄(E 欄),
以「Unicode Decimal code points」的範圍為判斷準則,輸入 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)C 欄數值介於「63751~64013」(CJK 相容字元)之間者,E 欄輸入「29」,
(3)C 欄數值為「64062」
或介於「194560~195101」、「1029723~1048575」之間者,
E 欄輸入「99」(這段範圍的字元不能正常顯示,等會不列入輸入法對照表裡)。
然後依 E、D、C、A 欄的階層順序,由小到大、由 A 到 Z 排序!
(八)「Sort」工作表至此已依接近我們想要的排列順序,
再把 D 欄數值介於「42048~50814」之間者(Big5 常用字)
對應的 E 欄從「19」改為「11」;
再把 D 欄數值介於「51520~63964」之間者(Big5 次常用字)
對應的 E 欄從「19」改為「12」,
然後依 E、D、C、A 欄的階層順序,由小到大、由 A 到 Z 排序!
(九)將 E 欄數值介於 11~40 之間對應的 A、B 欄,複製後貼到「Final」工作表中,
再加入從「亂倉打鳥」輸入法對照表整理出來的「組字字根:符號」條目,
我採取和「泰瑞倉頡輸入法對照表」共用符號條目的方式,
先將「泰瑞倉頡輸入法對照表」的符號條目複製到空白的 EditPlus 中,
將分隔字元由空白改為 Tab,
然後貼到「Final」工作表的末尾。
(十)注音輸入法的組字字根為 1~4 碼(拆字時不超過 4 碼),
為了修改從「泰瑞倉頡輸入法對照表」擷取而來的符號所對應的組字字根的長度,
以及找出其他超過 4 碼的組字字根,並將其修正為 4 碼,
可在「Final」工作表第一列取標題後,接著在 C2 欄輸入「=LEN(A2)」,
然後用「向下填滿」的功能填滿至最後一列,
最後使用「自動篩選」功能,即可找出超過 4 碼的組字字根,
(組字字根需介於 1 ~4 之間,若為其他數值時,應加以修正),
修正完成後,將全部內容(不含第一列的標題)複製後,
貼到 EditPlus 的空白文件中,
接著將「組字字根:詞組」的分隔改為空白,
再於前面幾列加入「可用按鍵宣告」,
再儲存為 *.txt 檔(編碼格式需為「Unicode」),
就完成了「泰瑞注音輸入法對照表」!
「泰瑞注音輸入法對照表」的候選字排列順序與 Windows 內建的傳統注音類似,
但對照表是可以修改的,
產生輸入法軟體後,儲存在 C:\Windows\System32 的檔案可以刪除,
再用「通用輸入法編輯工具」產生新的,
即會套用修改後的對照表裡的設定。
其他輸入法對照表的製作方式與
「泰瑞注音輸入法對照表」、「泰瑞倉頡輸入法對照表」的製作方式雷同,
有關輸入法對照表製作過程的文章,我就寫到這篇為止,
後續如果有發表「泰瑞嘸蝦米」、「泰瑞行列」、「泰瑞大易」輸入法對照表時,
就不再發表製作過程。