OpenCC 已提供十分優質的繁簡轉換,不過呢,實際使用下來難免會有些不到位的地方。所幸,OpenCC 的架構開放又有彈性,修改 json 設定檔就能載入自訂轉換字典,如果對既有轉換表或轉換規則不滿意,OpenCC 開放源碼,絕對讓你改到開心為止。

用個簡單例子示範如何自訂字彙轉換。假設我想將「黑暗執行緒在雲霄飛車上吃便當」翻成簡體,如使用包含常用詞彙轉換的設定檔 tw2sp.json,轉換結果如下:

輸出結果為「黑暗綫程在云霄飞车上吃便当」,而我希望保留「執行緒」不要翻成「綫程」,並將「云霄飞车」與「便当」 翻成大陸用語「过山车」與「盒饭」。

遇到 OpenCC 未包含的轉換字彙,最簡單的解決方法是在 json 設定加掛自訂的轉換表。如下圖,每行文字以 Tab 鍵相隔,前方是繁體中文詞彙,後方是希望轉換的簡體中文詞彙:

將 tw2sp.json 另存為 my-tw2sp.json 再修改加入{ "type": "text", "file": "TWCustMapping.txt" }:

改用 my-tw2sp.json,「过山车」與「盒饭」對了,但「綫程」沒改過來:

細究原因,是 TWPhrasesRev.ocd 裡定義了將「執行緒」轉為「綫程」。要修正這點可從原始碼中找到 TWPhrasesRev.txt,新增一條專有名詞,指定「黑暗執行緒」還是翻成「黑暗執行緒」,值得注意的是 TWPhrasesRev.txt 每一行前後都是繁體。

如下圖,我們將 TWPhrasesRev.ocd 換成 TWPhrasesRev.txt,type 則改成 "text":

重跑一次,結果就完全符合預期了:

OpenCC 支援 .txt 跟 .ocd 兩種格式的字典檔,修改並改用 TWPhrasesRev.txt 即可自訂轉換詞彙,如希望提高轉換效率,可利用 opencc_dict.exe 工具將修改版 .txt 轉換成 .ocd。(注意:.ocd 檔 32/64 位元有別,請用正確位元版本的 opencc_dict.exe 進行轉換)

掌握以上技巧,我們就能微調轉換結果,符合客戶的各式要求囉~ 祝大家轉換愉快。

Exmaple of customized conversion rules for OpenCC


Comments

# by 布丁布丁吃布丁

很實用的資訊,感謝。

# by hsu

請問新增字庫另存成my_s2twp.json,但會跑出UnicodeDecodeError: 'cp950' codec can't decode byte 0x80 in position 751: illegal multibyte sequence是該如何解決?感謝回答!

# by Jeffrey

to hsu,TWPhrasesRev.txt 每一行前後都必須是繁體,是否在其中有摻雜簡體?若沒有頭緒,有個無敵破案大絕,將字庫分批刪去(或加入),看何時錯誤消失(或發生),縮小範圍抓出兇手。

Post a comment