廣告贊助

第一階段:檢查是否有設定範圍內的漏字

我們設定的字元集範圍是 CJK、CJK Ext-A、CJK Ext-B 合計的 70,195 個字,
那麼最終版的對照表裡應該要能找出這 70,195 個不同的字,
否則就是有漏字的問題。
對於形碼(比如:倉頡)輸入法而言,漏字問題較好解決,
因為只要知道字元的形狀,就能推斷出它的組字字根為何。
對於注音輸入法而言,漏字問題有點麻煩,
因為用全字庫網站、康熙字典、漢典…來查找,
可能都找不到這些漏字的注音,
最後只能用「有邊讀邊,沒邊讀中間」的原則來勉強為漏字補上組字字根。

經由前一篇文章的解說,我們得到「CNS_phonetic.xlsx - 工作表1」,
它的表格是這樣的:
A 欄:原始行號
B 欄:字元
C 欄:注音符號
D 欄:曝光名次
E 欄:Unicode 10 進位碼
F 欄:Unicode 字元集種類
它是依照注音符號、曝光名次、字元集種類、10 進位碼的階層順序,
由小而大排列。

我們先準備一個 Excel 檔(命名為:Lose.xlsx),並設定好 4 個工作表:
1.「CJK」工作表:A 欄填入「19968」到「40869」的數值;
2.「CJK-Ext-A」工作表:A 欄填入「13312」到「19893」的數值;
3.「CJK-Ext-B」工作表:A 欄填入「131072」到「173782」的數值。
4.「Temp」工作表:A1 輸入「十進位碼」。
然後將它存檔。

複製「CNS_phonetic.xlsx - 工作表1」E 欄全部的資料,
到「Lose.xlsx - Temp」的 A2 儲存格貼上,
然後以 A1 儲存格為標題列,由小而大排序;
再用「進階篩選」的「不選重複的記錄」功能,
將篩選後的 A 欄數值置放於 B 欄。

接著,
找出 B 欄為「13312~19893」的資料列,複製後,貼到 CJK-Ext-A 工作表的 B 欄;
找出 B 欄為「19968~40869」的資料列,複製後,貼到 CJK 工作表的 B 欄;
找出 B 欄為「131072~173782」的資料列,複製後,貼到 CJK-Ext-B 工作表的 B 欄。

然後,借助「彰化一整天」所提供的「比較ab資料」網頁運算工具,
(網址是:http://272586.blogspot.com/2007/04/blog-post_28.html
用它來找出「Lose.xlsx」前 3 個工作表的 A、B 欄差異。
因為它是用 VB Script 寫成的程式,所以請用 IE 進行操作。
將「CJK」工作表 A、B 欄的資料,
貼到網頁中的「來源」區域,然後按下「比較ab資料」鈕,
靜候一陣子,就會在「目的」區域得到結果,
把它全選後,複製起來,
將「CJK」工作表的資料全清空,再於 A1 儲存格貼上,
就能得到下列結果:
前兩欄為原始的 A、B 欄資料,
第三欄應是空白的(代表 B 欄有,A 欄沒有),
而第四欄的資料(代表 A 欄有,B 欄沒有),即是我們想知道的「缺字碼位」,
第五欄的資料代表 A、B 欄都有的資料,所得結果和 B 欄是一樣的,可以將它刪除。
採取以上相同的作法,
即可為「CJK-Ext-A」、「CJK-Ext-B」兩個工作表找出我們想知道的「缺字碼位」。

再運用「Unicode code converter」網頁將「缺字碼位」轉為「缺字字元」後,
在「CNS_phonetic.xlsx - 工作表1」裡添加這些缺字的資料,
唯獨要注意的是:
A 欄(原始行號):一律填「-」;
D 欄(曝光名次):一律填「-」;
然後本階段的工作就算完成了!

第二階段:檢查錯誤

錯誤分為三種:

第一種錯誤是注音符號的長度超過 4 碼;
假設注音符號放在 C 欄,由第 2 列開始,可在 G2 儲存格設定公式「=LEN(C2)」。
記得 G 欄的儲存格格式必須先設為「通用」,公式才會有作用。
然後用向下填滿的方式,填滿 G 欄,
最後用排序或自動篩選方式,即可找出注音符號長度超過 4 碼的資料。

第二種錯誤是注音符號夾帶全型或半型空白;
可以用「尋找」的方式過濾出來。

第三種錯誤是注音符號不合邏輯(無法唸出或具有多個音節)。
這種錯誤較難尋找出來!
所以以下介紹一種一次解決這三種錯誤的方式。

首先,將「CNS_phonetic.xlsx - 工作表1」的 C 欄(注音符號)
複製到 EditPlus,
取代「˙」、「ˊ」、「ˇ」、「ˋ」成為「」(NULL),
也就是消除聲調的意思。
(註:其實這樣做有點不嚴謹,細節請參考下面的回應)
然後再全選後複製到一個新開的 Excel 工作表的 A 欄中,
再用「進階篩選」的「不選重複的記錄」功能,
將篩選後的 A 欄數值置放於 B 欄,
然後刪除 A 欄並儲存為 Temp.xlsx。

其次,將「全字庫拼音資料表格」(CNS_pinyin_20100413.txt)的內容全選後,
複製到一個新開的 Excel 工作表的 A 欄中,
刪除 C、D、E 欄,然後在 B 欄為「ㄅㄧㄤ」的漢語拼音補上「biang」。
再下載我修改過的「完全符合-批次取代-Excel」檔,
開啟後,記得點選「啟用內容」,才能啟用巨集功能。
接著,將剛才新開的 Excel 工作表的
A 欄貼到「full_replace.xlsm」的「原字串」欄,
B 欄貼到「full_replace.xlsm」的「取代成字串」欄,
再將 A2 儲存格修改為剛才進階篩選後的「Temp.xlsx」,
最後按下「開始整批取代」按鈕,
等待一段時間後,當畫面提示「取代完成,請切換視窗查看結果」時,
即可將當下開啟的兩個 Excel 檔儲存,
這時「Temp.xlsx - 工作表1」的資料會變成:
A 欄:取代後的漢語拼音,外加未被取代的注音符號。
利用排序的方式,
即可將漢語拼音排在前段;未被取代的注音符號排在後段。
未被取代的注音符號即是代表錯誤的注音符號,
我們可以以未被取代的注音符號為尋找條件,
在「CNS_phonetic.xlsx - 工作表1」裡找出相對應的資料,
然後手動修正這些錯誤
(如果該字在其他資料列裡已有注音,則不妨將該列直接刪除),
最後依照注音符號、曝光名次、字元集種類、10 進位碼的階層順序,
由小而大排列,那麼檢查錯誤的工作就算完成了!

第三階段:檢查重複

重複的情況是「CNS_phonetic.xlsx - 工作表1」裡可能存在:
兩列或兩列以上的資料都有「ㄏㄨㄥˊ V.S. 紅」,
如果轉成對照表後,輸入「ㄏㄨㄥˊ」時,
候選字就會出現兩個或兩個以上的「紅」,
這種錯誤必須加以修正。

首先,將「CNS_phonetic.xlsx - 工作表1」的
C 欄(注音符號)複製到一個空白工作表的 A 欄,
B 欄(字元)複製到一個空白工作表的 B 欄,
然後,全選、複製後,貼到 EditPlus,
再用正規表達式將「\t」(Tab 字元)全部取代為「 」(空白字元),
「ㄅ」取代為「1」、「ㄆ」取代為「q」…「ㄦ」取代為「-」…
(這部份的工作可以用「part_replace.xlsm」的方式來做,
但是 Tab 字元取代為空白字元的部份則需要用 EditPlus 來做)
然後,全選、複製後,貼到一個空白工作表的 A 欄,
再用「進階篩選」的「不選重複的記錄」功能,
將篩選後的 A 欄資料置放於 B 欄,
最後將 B 欄的標題列刪除,
B 欄全部的資料再全選、複製後,貼到 EditPlus,
存檔後即為我們所要的最終版注音輸入法對照表。

補充一下:
如果想明確知道是哪些地方重複的話,
前段「進階篩選」的工作可以改成:
因為「組字字根 字元」放在 A 欄,由第 2 列開始,
所以我們可以在 B2 儲存格設定公式「=COUNTIF(A:A,A2)」;
記得 B 欄的儲存格格式必須先設為「通用」,公式才會有作用。
然後用向下填滿的方式,填滿 B 欄,
最後用排序或自動篩選方式,
即可找出重複(B 欄數值大於或等於 2)的部分。

創作者介紹

泰瑞的世界

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


留言列表 (1)

發表留言
  • terryhung
  • 不嚴謹的地方在於如果有「ㄏˊㄨ」這樣的錯誤時,
    因為消去「ˊ」之後,變成「ㄏㄨ」,
    再用「full_replace.xlsm」取代後,仍抓不出這種錯誤。

    較嚴謹的作法是將單欄的注音符號排序,
    讓「˙」開頭的注音符號排在一起,
    然後先把「˙」開頭的注音符號貼到 EditPlus 裡,
    用正規表達式將「^˙」取代成為「」(NULL),
    意即消去每列開頭的「˙」;
    再用正規表達式將「$」取代成為「˙」,
    意即每列結尾補上「˙」。
    然後再將其餘的注音符號合併到這個 EditPlus 的畫面裡,
    再用正規表達式:
    將「ˊ」取代成為「\t2」;
    將「ˇ」取代成為「\t3」;
    將「ˋ」取代成為「\t4」;
    將「˙」取代成為「\t5」;
    最後全選後貼到 Excel 的空白表,
    如果用自訂篩選看到 B 欄只有 2、3、4、5、空白可以選,
    就表示沒有「ㄏˊㄨ」這類的錯誤,
    否則會多了「2ㄨ」這類的選項可以選。
    最後對 A 欄做「進階篩選」的「不選重複的記錄」,
    再做「full_replace.xlsm」取代作業,才能抓出所有的錯誤。
找更多相關文章與討論
【 X 關閉 】

【痞客邦】大學生網路社群使用習慣調查

親愛的讀者,痞客邦希望能了解大學生的網路社群使用習慣,
填問卷即可抽獨家好禮喔!
(注意:關閉此視窗將不再出現)