一、第一階段:產生「字面-編碼 V.S. 字元」的表格

全字庫屬性檔(倉頡、注音、拼音、筆劃…)全為純文字檔,
雖然具有 CSV 格式的特性,
(差別在於 CSV 有標題列,並以逗點分隔;
而全字庫屬性檔則是無標題列,並以 Tab 字元分隔,
各欄代表的意義另外記載在「全字庫屬性資料說明文件.txt」裡)
但是各文字檔裡沒有直接列出對應的字元(漢字、符號)!
以注音屬性檔為例,只有列出「CNS 字面、CNS 編碼、注音符號」這三欄。
這應該是因為漢字及符號容易受到字型的影響而產生顯示上的問題,
所以在各文字檔裡,以字面及編碼來代替對應的漢字及符號。

因為我們要整理出「組字字根 字元」這種格式的對照表,
(組字字根為對應鍵盤上的按鍵)
所以必須先將字面及編碼轉換成對應的字元。
轉換前有個重點要注意:
因為 CNS 編碼是由 4 個 16 進位的數值組成的,
所以每個字面最多只能容納 65,536 個字元,
但是全字庫收錄字數超過 10 萬個,
因此全字庫小組將所有字元區分成 1 至 15 個字面,
(第 10 個字面標示為 A 字面,第 11 個字面標示為 B 字面…第 15 個字面標示為 F 字面)
兩個不同的字面會有相同的編碼,所以要將「字面-編碼」複合起來才會是唯一的編碼!


具體作法是先將「全字庫主要資料表格」(CNS_main_20100413.txt)的內容全選後,
貼到 Excel(命名為:CNS_main.xlsx)的空白工作表(工作表1)裡,
這時「CNS_main.xlsx - 工作表1」會有這 6 欄:
A 欄:CNS 字碼的字面(16 進位)
B 欄:CNS 字碼的編碼(16 進位)
C 欄:該 CNS 字碼的 EUC 編碼(16 進位)
D 欄:該 CNS 字碼的 Big5 編碼(16 進位)
E 欄:該 CNS 字碼是否為 Big5E(Y 或 N)
F 欄:該 CNS 字碼的 Unicode 編碼(16進位)
其中,C、D、E 欄是用不到的,可以將它們刪除,
刪除後,「CNS_main.xlsx - 工作表1」會有這 3 欄:
A 欄:CNS 字碼的字面(16 進位)
B 欄:CNS 字碼的編碼(16 進位)
C 欄:該 CNS 字碼的 Unicode 編碼(16 進位)

將 A、B 欄剪下,貼到 EditPlus 裡,
再用正規表達式將「\t」(Tab 字元)全部取代為「-」,
最後再全選後,貼回 Excel 工作表的 B 欄,
然後在 A 欄產生數列,當作原始行號,方便將來備查。
再把 C 欄的 Unicode 16 進位碼貼到:
Unicode code converter」網頁的「Hexadecimal code points」欄裡,
轉成對應的 10 進位碼(Decimal code points)及字元(Characters)後,
貼回 Excel 工作表的 D、E 欄,
這時,「CNS_main.xlsx - 工作表1」會有這 5 欄:
A 欄:原始行號
B 欄:字面-編碼
C 欄:Unicode 編碼(16 進位)
D 欄:Unicode 編碼(10 進位)
E 欄:字元

完成這個工作表後,可以複製成另一個工作表(CNS_main.xlsx - 工作表2),
然後按照 D 欄(Unicode 10 進位碼)由小至大排序,
再依 D 欄的數值,選取 CJK、CJK Ext-A、CJK Ext-B 以外的資料列並刪除,
最後再存檔,那麼本階段的工作就算結束了!

需要注意的是:
1.最好先把 Excel 的儲存格格式設為「文字」,再貼上,後續較不會有錯誤發生。
 只是以後排序時,要把看似數字的資料當成數值來排序。
2.得到的 Decimal code points 資料可能要再用 EditPlus 稍做整理,
 意即:用正規表達式將「 10 」全部取代為「\n」(換行字元),
 才會得到一列一數值的結果。
3.比較舊的電腦一次處理好幾萬列的數值或字元可能會非常緩慢,
 需要分批進行轉換才不會當機,並且可能要多花點時間等待。
4.如果不想一直收到 IE 發出停止執行指令碼的警告,
 可以修改系統組態登錄檔成為:
 [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles]
 "MaxScriptStatements"=dword:ffffffff
以上這些注意事項同樣也適用於以後各階段的整理工作,之後就不再贅述。

二、第二階段:產生「字元 V.S. 注音」的表格

將「全字庫注音資料表格」(CNS_phonetic_20100413.txt)的內容全選後,
貼到 Excel(命名為:CNS_phonetic.xlsx)的空白工作表(工作表1)裡,
這時「CNS_phonetic.xlsx - 工作表1」會有這 3 欄:
A 欄:字面
B 欄:編碼
C 欄:注音符號

將 A、B 欄剪下,貼到 EditPlus 裡,
再用正規表達式將「\t」(Tab 字元)全部取代為「-」,
最後再全選後,貼回 Excel 工作表的 B 欄,
然後在 A 欄產生數列,當作原始行號,方便將來備查。
這時,「CNS_phonetic.xlsx - 工作表1」會有這 3 欄:
A 欄:原始行號
B 欄:字面-編碼
C 欄:注音符號
接著,即可存檔後關閉。

然後,下載我修改過的「部份符合-批次取代-Excel」檔,
(這個檔的原創作者是「彰化一整天」所做的「部份符合-批次取代-Excel」檔)
開啟後,記得點選「啟用內容」,才能啟用巨集功能。
接著,將「CNS_main.xlsx - 工作表2」的
「字面-編碼」(B 欄)貼到「part_replace.xlsm」的「原字串」欄,
「字元」(E 欄)貼到「part_replace.xlsm」的「取代成字串」欄,
再將 A2 儲存格修改為「CNS_phonetic.xlsx」,
最後按下「開始整批取代」按鈕,
等待一段時間後,當畫面提示「取代完成,請切換視窗查看結果」時,
即可將當下開啟的兩個 Excel 檔儲存,
這時「CNS_phonetic.xlsx - 工作表1」的資料會變成:
A 欄:原始行號
B 欄:字元
C 欄:注音符號

按照字元由小而大排序後,會發現前面的資料列仍是「字面-編碼 V.S. 注音符號」,
這些資料列是超出我們界定的範圍(CJK、CJK Ext-A/B 字元集)而沒有被取代掉的部份,
直接將它們刪除後,再存檔即可。

將「CNS_phonetic.xlsx - 工作表1」的 B、C 欄貼到暫時的 Excel 工作表裡,
對調兩欄的順序後,再貼到 EditPlus,
再用正規表達式將「\t」(Tab 字元)取代為「 」(空白字元),
然後把「ㄅ」取代為「1」、「ㄆ」取代為「q」…「ㄦ」取代為「-」…
存成 Unicode 或 UTF-8 編碼類型的純文字檔(命名為:CNS_phonetic_v1.txt),
就可以當作輸入法對照表了!

只是這樣的對照表不夠完美,因為它有下列缺點:
1.沒有按照常用字排序。
2.可能存在重複的「字元 V.S. 組字字根」。
3.可能沒有涵蓋所有的 CJK、CJK Ext-A、CJK Ext-B 字元。
4.可能存在不合理的注音(比如「斊 ㄓㄞㄗ」)。
為了讓它更完美,必須採取一連串的查驗及改善作業,這部分留待下幾篇再作介紹。

arrow
arrow
    全站熱搜

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