Beyond the Void
BYVoid
Open Chinese Convert 開源簡繁轉換

Open Chinese Convert(OpenCC)是一個中文簡繁轉換開源項目,提供簡繁轉換詞庫和可供程序調用的程序庫(libopencc)。現託管於Google Code

關於簡繁轉換

由於種種歷史問題,漢字系統被割裂爲「簡化字」和「繁體字」,然而「簡化字」並不能完全取代原有的繁體字,一方面是由於古籍、書法、文字學的研究需要,另一方面則是港澳臺日韓越及其他海外地區「簡化字」並不通行。隨着信息技術的發展,這方面的需求不斷突出,因此簡繁轉換便成了一個信息技術界和中文研究界需要共同解決的問題。

精確的簡繁轉換一直以來是一個難題,其原因主要是簡體和繁體互有一對多的現象,而具體用字對應規則需要聯繫上下文分析語義纔能確定。而廣義的「簡繁轉換」,還包括了不同地域習慣用字和用詞差異的轉換(如「软件」「軟體」等),甚至詞和詞之間也有「一對多」的關係,因而使轉換更加複雜。目前現有的簡繁轉換軟件,即使是專業的(收費),也不能完全解決這些問題,在開源界能接近其水平的更是寥寥無幾。因此OpenCC的誕生,就是爲了儘可能地解決這個難題。

一些概念

漢字(據不完全統計)有十萬之眾,「簡化字」非但沒有減少漢字數量,反而使漢字數量更加龐大。雖然日常用到的字祇有數千,且有着複雜的關係。要做好簡繁轉換,必須理解這之中的許多關係與微妙的差別

「異體字」

由於漢字造字年代久遠,且非一人一時之所造,通行時間又爲世界之最,流變眾多,許多字並非祇有一種寫法,如「為爲」「朵朶」「畫畵」「污汚汙」等等。這些字祇是寫法不同,而沒有任何表意的區別,因此被稱爲「異體字」。狹義的異體字是沒有任何表意的區別的一組字,而廣義的異體字還包含了表意範圍有交叉或所屬關係的字以及「通假字」。下文中的異體字全部是狹義的異體字

需要注意的是「通假字」祇是同音假借,本字和被假借字可能意義完全不同,因而不是異體字。而「訛字」和「俗字」(絕大多數)則屬於異體字。例如「繫」字在傳抄的時候,左上角被寫成了「車」,然後以訛傳訛,就產生了訛字「繋」。「俗字」或稱「俗體字」是民間通行的一種變體,許多俗字就是筆畫較爲減省的異體字,也有很多來自訛字。

「繁體字」「簡體字」「簡化字」

嚴格地說,「繁體字」和「簡體字」是異體字關係,「繁體字」是相對「簡體字」而創造的概念。「簡體字」這一名稱,始見於1935年民國教育部總結的一批「古已有之」、「歷代通行」的「筆劃較少的」異體字。這批簡體字主要蒐集自民間話本「述而不作」地整理出,沒有類推造字。

「簡化字」,顧名思義則是人工簡化的字,這個概念的產生與近代「漢字改革」思潮有關,最早見於錢玄同的文中。1964年,中國文字改革委員會出版了《簡化字總表》(不是「簡體字總表」),簡化字開始在中國大陸流行開來。1977年,中央又發佈《第二次漢字簡化方案》,1986年被廢除,史稱「二簡字」。慢慢「簡化字」這一概念就被固定下來,專指中國大陸推行的簡化字

可見「簡體字」並不等於「簡化字」,前者強調異體關係,後者強調簡化關係。而現在這兩個概念趨於混淆,乃至用「簡體字」表達「簡化字」的意義更常見,其主要原因是由於另一個詞彙「簡體中文」的出現。比起中文的混淆,英文解釋更加清楚:「簡化字」的英文翻譯是「simplified Chinese characters」(簡化過的漢字),simplified源自動詞simplify簡化。「簡體字」由於概念不常見,沒有公認的正式翻譯,有一種譯 作「simpler variants of Chinese characters」(較簡單的漢字變體)。

由於「簡體字」和「繁體字」本身存在對立關係,繁體字也就慢慢變成專指港澳臺用字了。事實上港澳臺用字也不盡相同,如「裏」「裡」等,於是又有了「港澳繁體」「臺灣正體」等名字。

已有項目的缺陷

OpenCC的的誕生並不是輪子的重複發明,而是爲了實現一個更好的簡繁轉 換計劃,因爲目前已有的各種項目,或多或少地有着各種缺陷。

Wikipedia

毫無疑問最廣爲人知的簡繁轉換項目莫過於Wikipedia提供的簡繁轉換表。Wikipedia有效地利用了分散的人力,整理出了一個數量不小的表格,其優點在於*詳細地區分了簡繁轉換和地域轉換。但是也有許多不足:

  1. 異體字處理混亂,「一簡對多異」被當作「一簡對多繁」處理。如「为」對應「爲為」。
  2. 一簡對多繁有眾多爭議,處理不統一,時分時不分。如「卷烟」「烟卷」分別用了「煙」和「菸」。
  3. 有大量不成詞的「詞」,祇爲正向最大轉換優化,不兼容別的分詞算法。如「们斗了胆」「們斗了膽」。
  4. 專爲Wikipedia設計,依賴編輯的人工干預。
  5. 一般非地域轉換中「着」被併入「著」,不符合香港、海外等地用字習慣。
使Wikipedia做出改變較難,尤其是在這種民主的管理模式下,多數人(臺灣)可能會毫不顧及少數人(香港)。

cconv

cconv是另一個簡繁轉換的項目,較早開發,有一定的用戶。缺陷很明顯:

  1. 簡繁轉換和地域轉換混同一談。
  2. 完全沒有處理異體字。
  3. 功能雜糅了編碼轉換和簡繁轉換,不易剝離。
  4. 簡繁轉換數據被編譯到庫中,無法修改和擴展(除非重新編譯)。
  5. GPL協議發佈,對開發者限制較大。
  6. 目前長期無人維護。

OpenCC 的特點和方法

OpenCC特點

  • 嚴格區分「一簡對多繁」和「一簡對多異」。
  • 完全兼容異體字,可以實現動態替換。
  • 嚴格審校一簡對多繁詞條,原則爲「能分則不合」。
  • 使用歧義分割+最少分詞算法,儘可能從技術上優化轉換效果。
  • 詞庫和程序庫完全分離,可以自由修改、導入、擴展。
  • 以Apache開源協議發佈,使開發者真正可以自由使用。
  • 已經用於ibus-pinyin的繁體模式輸入,由ibus開發組長期協助維護。
  • 支持 C,C++,Python,PHP等多種語言調用,命令行直接調用,以及圖形界面(開發中)。

解釋

OpenCC有獨立的「一簡對多繁」表、「一繁對多簡」表和異體字表,保證沒有混雜着異體字。而且可以方便地自定義地區習慣使用的異體字,兼容臺灣、香港和海外地區不同的習慣。

簡繁轉換詞庫中數萬詞彙經過校對,最大可能地保證轉換準確性,用字原則爲「能分則不合」。舉例如「臺」「檯」「台」,在臺灣習慣中,有合流爲「台」的現象,但其意義界限明顯,故OpenCC從分,(具體見此列表)。根據不同的習慣,也可以設定爲合流。

簡繁轉換功能的核心算法爲歧義分割+最少分詞,簡單解釋爲首先掃描待轉換字符串,分割成若干個有歧義的區間(即每個區間內可以有多種分詞方案),然後對每個區間的字內構造圖論模型,使用最短路徑算法求出最優分割方案,然後對分詞的結果每部分進行轉換。這種算法不僅準確性高於直接正向掃描轉換,而且速度也很快,測試中每秒可以轉換8.4MB文本(UTF8編碼,內容爲小說,速度僅供參考)。

OpenCC把詞庫和程序庫完全分離,程序庫可以讀取兩種格式的詞庫,一種爲Tab分割的平面文本,一種爲OpenCC專門優化過的數據結構,ocd格式。平面文本數據庫格式方便閱讀和修改,ocd格式是OpenCC構造出的Double Array Trie數據結構,使用其可以大大提供轉換速度。OpenCC還提供了詞庫轉換程序,可以自由在兩種格式之間轉換。

OpenCC程序庫提供了C,C++,Python,PHP等語言的接口,便於在任何環境下使用,此外還提供了命令行直接調用的模式,圖形界面也在開發當中。

詞庫來源

OpenCC的繁體到簡體轉換的詞庫是由單字對應人工校對後生成的,單字對應數據來自Unicode數據庫以及人工的覈對和修改。簡體到繁體的詞庫由大量的繁體語料自動轉換到簡體然後校對而成。

參考資料

歡迎試用和加入

如果感興趣,可以先在綫試用一下, 然後安 裝到你的系統

開源非一人之力,有眾人的支持纔能做得更好。歡迎有意者加入開發,歡迎中文專業者和愛好者加入詞庫審校工作。

如有任何問題或建議,請到 http://code.google.com/p/open-chinese-convert/issues/entry 報告。或者可以直接與BYVoid取得聯繫


上次修改時間 2017-02-03

相關日誌