簡轉繁字型是將簡體文字以繁體字顯示的字型。對於習慣閲讀繁體字的用户,在某些不提供簡繁轉換的平台(如電子書閲讀裝置),可以利用簡轉繁字型令簡體文字以繁體字顯示,從而減少閲讀時的負擔。
然而,現時的簡轉繁字型是簡單地將簡體字的碼位對應繁體字形,不能處理簡體字與繁體字之間存在的「一簡對多繁」現象,因此使用效果並不理想,也使許多人產生了「字型不能正確處理簡轉繁」的錯誤印象。
事實上,目前通行的 OpenType 字型格式提供了大量字型特性。使用其中的 GSUB(glyph substitution,字圖替換)規則,可以實現能處理「一簡對多繁」的簡轉繁字型。
本文介紹了簡繁轉換工具 OpenCC 與 OpenType 字型的 GSUB 規則,並介紹了將二者結合,在字型層面實現簡繁轉換的方法。利用同一方法,也可以實現能處理破音字的拼音字型及注音字型。
「一簡對多繁」是指一個簡體字對應多個繁體字的現象。例如,簡體字「后」同時對應「後」(後面)與「后」(太后)兩個繁體字。
由於「一簡對多繁」現象,在簡轉繁時需要考慮上下文。
OpenCC 是開放原始碼的中文簡繁轉換工具,可以利用詞語處理「一簡對多繁」現象。
OpenCC 詞庫不僅定義了單字的簡繁對應關係,還定義了數萬個詞語的簡繁對應關係。OpenCC 程式執行時根據「正向最大匹配」演算法匹配文章中的簡體詞語,然後轉換為繁體。
例如,在轉換句子「太后的头发很干燥」時,程式根據詞庫中存在的詞語,從左至右依次匹配「太后」、「的」、「头发」、「很」、「干燥」,然後分別轉換為「太后」、「的」、「頭髮」、「很」、「乾燥」。
OpenType 字型提供了 GSUB 規則,用於替換字型中的字圖。
GSUB 規則可以分為以下六類:
簡繁轉換需要實現多對多替換,例如將「错综复杂」轉換為「錯綜複雜」,四個字均發生了變化。然而,以上六種 GSUB 規則僅包括一對一、多對一、一對多替換,卻不包括多對多替換。
為了實現多對多替換,可以採用「偽字圖」的方法。首先使用多對一替換,將簡體詞語替換為一個偽字圖;然後使用一對多替換,將這個偽字圖替換為繁體詞語。
示例如下:
輸入字串 | U+97E9 | U+5267 | U+5947 | U+7687 | U+540E | U+64AD | U+51FA | U+540E |
---|---|---|---|---|---|---|---|---|
對應簡體字圖 | 韩 | 剧 | 奇 | 皇 | 后 | 播 | 出 | 后 |
第一步替換 | 偽字圖 0 | 奇 | 偽字圖 1 | 偽字圖 2 | 后 | |||
第二步替換 | 偽字圖 0 | 奇 | 偽字圖 1 | 偽字圖 2 | 後 | |||
第三步替換 | 韓 | 劇 | 奇 | 皇 | 后 | 播 | 出 | 後 |
注意「皇后」、「播出」是繁簡同形的詞語,但仍要在第一步替換為偽字圖,否則會影響第二步替換。
經過簡單的試驗可以得出,OpenType 字型在執行第一步替換時遵循「正向最大匹配」原則,與 OpenCC 的簡繁轉換演算法相同,因此二者是等效的。
簡轉繁不可能做到完全準確。例如「时间不准差一分钟」這個句子本身存在歧義,對應的繁體既可能是「時間不準差一分鐘」(不準確),也可能是「時間不准差一分鐘」(不允許)。
「正向最大匹配」演算法存在一定的侷限性。例如,對句子「拥有 116 年历史」執行正向最大匹配,當匹配到「年」時,由於「年历」是一個詞,會被匹配,從而錯誤地轉換為「擁有 116 年曆史」;正確的寫法應為「擁有 116 年歷史」。
OpenCC 詞庫不可能囊括所有詞語,例如新詞未必能及時收錄於 OpenCC 詞庫中。
在上述方法中,一條簡繁詞語的對應關係需要使用一個偽字圖,而偽字圖也會佔據字圖數量。OpenType 字型的字圖數量上限為 65535 個。
為了防止字圖數量超過上限,可以採取兩種方法:
第一:可以從字型中刪除一些生僻字的字圖。
第二:可以適當刪除一些簡繁詞語的對應關係。應優先刪除繁簡同形、且在逐字轉換時不會產生錯誤的詞語,例如上面例子中的「播出」。
OpenType 字型提供了 trad 特性。在排版引擎中開啟 trad 特性時,字型可以將簡體字顯示為對應的繁體字。但是,目前支援 trad 特性的字型並不多。
只要將上述替換表放入字型的 trad 表中,就可以製作支援 trad 特性、且能處理「一簡對多繁」的字型。
OpenCC 支援中國大陸、台灣、香港的習慣用字和用詞轉換。如果在上述簡繁詞語的對應關係中加入地區字詞的對應關係,就可以處理不同地區的字詞轉換,例如將「内存」轉換為「記憶體」。
另外,OpenType 字型可以根據語言指定不同的替換表。只要根據 OpenCC 詞庫,在 ZHS
, ZHT
, ZHH
表中指定不同的替換表,就可以令同一字型在不同語言環境下使用不同的字詞轉換。
根據上述方法制作了簡轉繁字型繁媛明朝。
(作於 2020 年 7 月 31 日,修改於 2020 年 10 月 1 日)