一、使用工具:
(一)字型:
   系統字型必須支援 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 的檔案可以刪除,
再用「通用輸入法編輯工具」產生新的,
即會套用修改後的對照表裡的設定。

其他輸入法對照表的製作方式與
「泰瑞注音輸入法對照表」、「泰瑞倉頡輸入法對照表」的製作方式雷同,
有關輸入法對照表製作過程的文章,我就寫到這篇為止,
後續如果有發表「泰瑞嘸蝦米」、「泰瑞行列」、「泰瑞大易」輸入法對照表時,
就不再發表製作過程。

創作者介紹

泰瑞的世界

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