再就前篇6 個 Excel 檔】的使用,
舉「倉頡.xlsx」為例,說明它們與前篇各個目標的關聯性。

第一個目標(無漏字):
先將「倉頡.xlsx」的工作表依「十進位碼」(Unicode 十進位碼)由小到大排序,
然後參考【Big5、Unicode 中文字集總整理】該篇文章內,
所載各字元集的「十進位碼」範圍,一次驗證一個字元集。
假設先驗證「CJK Ext-A」字元集,
就將排序後的 D 欄(十進位碼),由「13312」至「19893」的儲存格,複製起來,
再貼到「驗證.xlsx」的「唯一化」這個工作表的 A 欄(須先在 A1 取個標題),
再用「資料」群組按鈕裡的「進階」(篩選)功能,把 A 欄不重複的內容複製到 B 欄,
最後將 B 欄的數值貼到「Ext-A」工作表的 B 欄,
在 C2 欄輸入「=A2/C2」的公式,填滿至最後一列(有資料的),
最後再篩選 C 欄,如果只有「1」可以選,代表完全無漏字。
如果有漏字,而且漏字很多的話(比較 A、B 欄有資料的列數即可得知漏字數目),
可以參考【全字庫屬性資料表格整理方法(四)─檢查錯誤篇】的作法,
找出缺漏字元的 Unicode 十進位碼,
再把這些十進位碼貼到【Unicode code converter】網頁的「Decimal」欄(最右下),
再按「Convert」按鈕,即可在「Characters」欄(最左上)得出對應的字元。

第二個目標(編碼不重複):
其實在整理碼表之前,應該先處理這個問題,
而不是等到 Excel 製作好後,再來處理這個問題。
像是「瑲珩」的大易碼表就有 498 組重複,
因為「小小輸入法」平台對於重複的「組字字根 字元」對照組合,
在進行組字時會有自動過濾(自動忽略重複)的功能,因此可以不處理重複的問題,
但是一個好的碼表,應該解決這一方面的問題。
具體作法是把「組字字根 字元」(只用半型空白分隔)全部貼到空白的 Excel 的 A 欄,
記得先在 A1(儲存格)輸入任意標題,然後在 B1 也輸入任意標題,
並在 B2 輸入以下公式(假設 A 欄最後一列是 A5000):
=IF((COUNTIF($A$2:$A$5000,A2)>1)*(COUNTIF($A$2:A2,A2)=1),"重複","唯一")
然後用「向下填滿」的功能,套用 B2 的計算公式至 B 欄其他列。
最後再用篩選的方式,篩選出 B 欄內容顯示為「重複」二字的資料列,
並用「刪除列」的功能將它們直接刪除,
關閉篩選後,所得到的 A 欄內容,就不存在重複的「組字字根 字元」。
不過,這一招對於某些符號而言並不管用,
舉個例子來說,碼表內有下列 3 列:
;;a ⒜
;;a ⓐ
;;a Ⓐ
篩選不重複的資料後,第 2 組會被 Excel 認為與第 3 組重複,而被上述的計算公式標示為「重複」,
但是兩者的碼位並不相同,
「ⓐ」的 Unicode 十進位碼為「9424」,
「Ⓐ」的 Unicode 十進位碼為「9398」,
因此必須改用「組字字根 十進位碼」這樣的組合,
才能真正檢查出是否有重複編碼的問題。

第三個目標(依常用頻率排序):
先將「倉頡.xlsx」的工作表依「大五碼」由小到大排序,
「大五碼」顯示「63」對應的字元,代表該字元並未收錄至 Big5 碼,
如果用 ANSI(系統內碼,在繁體中文 Windows 中為 Big5 碼)編碼格式儲存的話,
它們會全部儲存成「?」,而「?」的 Big5 十進位碼即為「63」。
依「大五碼」由小到大排序,目的是要賦予「分區」這一欄對應的數值,
在還沒分區之前,此欄對應的內容為空白。
依「大五碼」排序後,筆者在對應的「分區」這一欄輸入數值的準則如下:
(1)大五碼為 63 時,對應的「分區」先保留為空白。
(2)大五碼為 42048 至 50814 時,對應的「分區」設為「1」(Big5 常用漢字)。
(3)大五碼為 51520 至 63964 時,對應的「分區」設為「2」(Big5 次常用漢字)。
(3)大五碼非為以上三者時,對應的「分區」設為「3」(Big5 其他漢字或符號)。
然後將「倉頡.xlsx」的工作表依「十進位碼」由小到大排序,
依「十進位碼」排序後,筆者在對應的「分區」這一欄輸入數值的準則如下:
(1)十進位碼為 13312 至 19893 時,對應的「分區」設為「A」(CJK Ext-A)。
(2)十進位碼為 131072 至 173782 時,對應的「分區」設為「B」(CJK Ext-B)。
(3)十進位碼為 173824 至 177972 時,對應的「分區」設為「C」(CJK Ext-C)。
(4)十進位碼為 177984 至 178205 時,對應的「分區」設為「D」(CJK Ext-D)。
然後篩選「分區」這一欄,將空白的儲存格設為「5」,
其所代表的意義是:CJK 扣除 Big5 之外的漢字,也就是早期俗稱的「外字」。
以上設定分區時,可使用 Excel 的「向下填滿」功能,快速設定完成。
最後關閉篩選,按「分區」由小到大排序,這樣至少就能得到一個依常用字來排序的碼表。

第四個目標(編碼務求正確):
即使仿效「瑲珩」採用讓程式依字形及拆碼原則得出機器拆碼,
也不能保證每個字的拆碼是百分之百正確無誤的。
未來筆者可能會規劃成立 Facebook 的專頁,讓使用者回饋編碼錯誤的情形。
單就個人能力而言,最簡單的檢查方向就是「組字字根的鍵數」,也就是所謂的「碼長」,
比如倉頡最多取 5 碼,因此筆者在這 6 個 Excel 檔裡就提供「碼長」這一欄,
用篩選的方式就能快速得知碼長是否有 1 至 5 以外的情形。

第五個目標(允許容錯碼):
這個目標牽涉的層面有點複雜,
像是倉頡有三代與五代之分,不過影響的字元數量有限,
反而是受「國字標準字體」影響的字元卻為數不少,
像是「今」的寫法依「國字標準字體」應寫為「𠆢一フ」,
「國字標準字體」未公布前,大多數印刷字型會顯示成「𠆢、フ」,
依照前者的寫法拆為「人戈弓」時不會有重碼的問題,
依照後者的寫法拆為「人一弓」時就會有重碼的問題(與「仃」、「气」重碼),
有重碼情形的話,就會有重碼字排序的問題。
使用 Excel 整理時,雖然可以把不同來源的碼表貼到同一個 Excel 檔裡彙編,
但是處理重碼字問題時,免不了還是要以人工進行判斷、決策及調整。
使用「小小輸入法」平台的話,通常設定為:
組字時,按下空白鍵後,一律將第 1 個候選字「上屏」。
使用者打字習慣之後,自然就會去記憶哪些重碼字不在第 1 個候選字,
並且在組字時不能按下空白鍵,必須要按下對應候選字的數字鍵。
就算對於支援的字元集變成海量時,也不用擔心重碼率提高的問題,
因為使用者在打某一個特殊的「罕見字」時,
打完組字字根後,自然會停下來看看,該罕見字有沒有出現在候選字窗格裡。
所以,筆者認為行列官版碼表在 CJK Ext-B/C/D 編碼的末尾加上「i」就顯得有點多餘了!
因為,使用者有時並不會知道他打的字是不是「罕用字」,
就算知道,也很難猜測這個「罕見字」屬於 CJK、CJK Ext-A,或是屬於 CJK Ext-B/C/D。
但是,對於沒有「小小輸入法」平台這種設計的輸入法軟體而言,
重碼字過多時就是一種負擔,更不用提增加容錯碼這件事了!
所以輸入法軟體(平台)的設計也是相當重要的一環,
此時碼表檔就變成只是配角罷了!

創作者介紹

泰瑞的世界

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