Page 1 of 512345

Open Chinese Convert 開源簡繁轉換

中文與漢字, 設計開發 15 Comments »326 views

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取得聯繫

标签:, , , ,

ibus-pinyin注音模式新特性

Linux, 設計開發 4 Comments »285 views

前一段時間ibus-pinyin注音模式發布以後,得到了來自Ubuntu正體中文站Plurk的朋友們熱烈的關注,對此我感到非常榮幸。限於當時開發倉促,很多功能都沒有很好地實現,不過我還是得到了許多寶貴的意見反饋,基於此我公布了「注音模式用戶交互設計方案」,並依據其改善了用戶交互模式。在1.3.9穩定版發布前夕,我先向大家介紹一下ibus-pinyin注音模式的新特性。

本次更新最大的改動是加入了「引導鍵」選詞模式。什麼是「引導鍵」呢?「引導鍵」就是在輸入模式下的空格鍵(或曰「空白鍵」)。在輸入模式下,按下空格鍵,就會進入選詞模式,這時候按鍵響應會優先被處理爲選詞。選詞模式下可以直接按下候選詞標籤對應的按鍵進行選詞,也再次按下空格選擇光標所在位置的候選詞,按上下方向鍵可以移動光標位置。

在輸入模式中,候選詞前面的標籤是灰色的,而且不顯示光標位置。當按下空格鍵、上下方向鍵時,可以進入選詞模式。當然如果你想直接選詞,可以按Alt + 選詞鍵,或者可以使用「輔助選詞鍵」。「輔助選詞鍵」爲F1,F2,…F10,以及數字鍵盤上的數字,使用輔助選詞鍵可以在任何時候選詞。

當進入選詞模式後,候選詞標籤顏色變深,並且選詞光標也出現。此時可以直接按候選詞標籤對應的選詞鍵選詞。

應大家要求,我們還加入了選詞鍵設置的選項。如果你不喜歡用數字鍵選詞,可以設置爲其他的按鍵,這個設計承襲自大名鼎鼎的「新酷音」輸入法。

當然了,「引導鍵」選詞只是可選的,如果你喜歡原來那樣的模式(按空格鍵即時選詞),可以在「偏好設定」中關閉「啟用選詞引導鍵」選項。其他特性如「鍵盤映射」、「模糊音」、「自定義詞組」,都可以在偏好設定中找到。

趕快試用一下新版本吧,如果你是Ubuntu用戶,現在已經可以在ppa源中取得新版本,使用方法如下:

sudo add-apt-repository ppa:shawn-p-huang/ppa
sudo apt-get update
sudo apt-get install ibus-gtk ibus-qt4 ibus-pinyin ibus-pinyin-db-open-phrase

設置一次過後今後一旦有新版本就會自動更新,或者使用apt-get install ibus-pinyin強制更新即可。

歡迎大家提出意見或建議,期待您的反饋。

标签:, , , , , ,

ibus-pinyin注音模式預覽

Linux, 中文與漢字, 設計開發 41 Comments »798 views

經過一個多星期的開發,終於基於ibus-pinyin的引擎做出了注音模式,馬上就要發布了,現在先放出預覽現在已經發佈。

(什麼是注音呢?注音全名注音符號,又叫注音字母,是一套漢語的標音符號,例如ㄅㄆㄇㄈㄉㄊㄋㄌ。可別把它當作日文假名,其實注音的每個字母都是有來由的。注音符號制定於北洋政府時期,一直作為教學所用。中國大陸1958年以後停用了注音而改用漢語拼音,臺灣則沿用注音至今。)

為什麼要做一個這樣的注音輸入法呢?因為據我所知,現有的各種注音輸入法的水平要遠遠落後於各種拼音輸入法,例如大名鼎鼎的新酷音輸入法、微軟新注音,都只停留在組詞的階段,甚至不少時候需要自己來翻好幾頁選字,更不用說智能組句,簡拼等功能了。一直以來我想製作一款優秀的注音輸入法,以改善臺灣同胞的打字體驗,亦可復興優秀的注音符號系統。恰好ibus-pinyin是Linux平臺下的一個非常優秀的輸入法,且開發者很活躍,願意進行各種嘗試,故我就加入了ibus-pinyin小組,開始了ibus-pinyin注音模式的開發。幸運的是,ibus-pinyin的代碼很明晰,而且其作者Peng Huang大牛非常熱心地對我進行了指導和幫助,因而我們纔只用了一個多星期就做出了注音輸入法。

ibus-pinyin注音模式儘量參考了其他注音輸入法,但又沒有完全拘泥於其模式,而是結合了拼音輸入法的常用交互邏輯。輸入注音時,候選詞列表即時更新,第一個候選詞為智能組句的結果,後面依次是組詞、單字。按空格可以選擇高亮區域的候選詞,按上下鍵可以移動高亮區域,按過上下鍵或選詞時進入選詞模式,此時可以直接按數字鍵選詞,同時小鍵盤數字鍵或Shift + 數字鍵可以在任何時候直接選詞。下圖是輸入時的截圖:

除此之外,ibus-pinyin注音模式還支持了簡拼和混拼,就是在組詞時只用輸入字的聲母,效果如下:

想要輸入標點符號也很容易,只要按`鍵(數字鍵1左邊),即可進入符號模式,再按一個字符即可開始選各種符號。這種方式是模仿了微軟新注音。效果如下圖:

當然,限於開發進度,ibus-pinyin注音模式還遠遠沒有達到盡善盡美的地步,當前版本還有一些問題亟待解決。主要問題如下:

  1. 暫時不支持聲調。因為限於數據庫的格式(缺乏聲調信息),我們還無法做出基於聲調模式的選字選詞,不過這已經列入開發日程,近期版本就會支持。
  2. 繁體模式下有重複字的情況,這個問題將會在近期整理詞庫後解決。
  3. 目前僅支持標準注音鍵盤,下個版本將會加入其他注音鍵盤方案選項。

Q&A

Q:如何安裝本輸入法?

A:由於Ubuntu的官方源不能及時更新到最新版本,我们推薦使用ppa源。使用方法為在終端下輸入

sudo add-apt-repository ppa:shawn-p-huang/ppa
sudo apt-get update
sudo apt-get install ibus-gtk ibus-qt ibus-pinyin ibus-pinyin-db-open-phrase

接下来,在頂部菜單 系統 – 管理 – 語言支援 ,把“鍵盤輸入法系統”設置為ibus,然後註銷重新登入。

Q:如何切換出本輸入法?

A:點擊輸入漢字的區域,在系統托盤中點擊鍵盤圖標,選擇“漢語 – Bopomofo”,或者使用ctrl + space。如果列表中沒有Bopomofo,右鍵點擊托盤中的鍵盤圖標,選擇 偏好設定 ,在輸入法標籤中點擊 選擇輸入法 – 漢語 – Bopomofo,然後點擊加入。

Q:如何選擇候選字詞?

A:輸入過程中,候選詞列表會即時更新,按下空格鍵即可選取高亮區域的字詞,按上下鍵可以移動高亮區域。選詞過程中也可以直接按數字鍵選詞,使用Shift + 數字鍵可以在任何時候直接選詞。

Q:如何進行中英文模式切換?

A:點擊輸入法狀態條上的中/英按鈕,或者按Shift鍵即可切換中英文模式。

Q:如何在中文模式下輸入標點符號?

A:按`(數字鍵1左邊的按鍵)以後,進入符號模式,接下來按不同的按鍵可以顯示不同的符號列表。

請大家繼續關注,我們熱切地希望得到任何反饋,包括問題報告、建議、用戶習慣意見等。

目前開發者:BYVoid, Peng Huang,歡迎有意加入開發者聯繫。

标签:, , , , ,

有幸加入ibus-pinyin的开发

設計開發 11 Comments »272 views

最近结识了中文Linux下最常见的输入法iBus的作者Peng Huang,并有幸加入了ibus-pinyin输入法的开发工作。开发输入法本身就是一个不常见的工作,因此很难找到相关资料,而开发一个优秀的拼音输入法更是难上加难。在此深切地膜拜Peng Huang,能与这样的牛人合作并从中得到指点,真是莫大的荣幸。

不少传言说iBus是Python写的,效率不行,实际上这是一个谣传。ibus的确曾经是python写的,但是现在已经用C++重写,效率得到很大的提高,而且兼容性要远远强于Scim。iBus全名为intelligent input bus,顾名思义它是一个输入法平台,也可以理解为是一个已经写好的与系统交互的库,各种输入法运行在iBus上。输入法只是调用了iBus,调用iBus可以让其作者专心地编写输入法功能的代码,而不是把过多的精力浪费在与系统交互上,也增加输入法的可移植性。而ibus-pinyin正是iBus作者Peng Huang写的一个运行在iBus上的拼音输入法。

花了不短的时间才大致看明白了ibus-pinyin的源码,发现大致的逻辑是:捕获用户输入的字符串-将字符串解析为拼音-查询词库将拼音解析为词汇-用词汇智能组句-显示候选词-输出文本。其中第一步和最后一步都很简单,因为已经被iBus提供了良好的接口,因此重点在于拼音解析词汇解析智能组句上。由于开发力量过小(开发人员加上我才3个人),这些功能的实现还很简单。像拼音解析遇到了歧义(如xian,fangan)还都只是指定一种(出现概率较大)解析方式,没有实现高度的智能化。

我所关注的部分是为ibus-pinyin实现声调模式,注音模式,和精确简繁转换这些功能。声调模式需要一个字库,这个已经从Unicode获得,而词库目前是不带声调的,要实现带声调需要较大人力。注音模式主要是推广到繁体用户那里,因为据我了解到的注音输入法智能组句功能都很弱,如果有这样强的输入法一定会受欢迎的。精确的简繁转换主要是实现输出地道的繁体,这就要解决大量的简繁一对多词汇了,具体实现也很复杂,只能逐步做。

截至今日(2010.5.12)ibus-pinyin的最新版本是1.3.5,下一版本发布之前两位开发者精力主要集中在开发输入法Lua插件支持和用户词库同步上。Lua插件就是让输入法支持自己开发的外接程序,让用户更灵活定制。用户词库同步是目前较为成熟的输入法都具备的功能,就是实现用户可以将自己的词库上传到服务器上,便于用户保存输入习惯,另一方面也方便我们统计和更新词库。但是作为开源软件,服务器费用是个问题,目前可以考虑用免费的Google App,将来也许可以得到像Google这类大公司的赞助吧。我很看好ibus-pinyin的发展,因为首先它是开源的,而且容易实现跨平台。目前没有好用的能够跨平台的输入法,而这个市场正好可以由ibus-pinyin来填补吧。

标签:, , , , , , , ,

明瞭體——優美的舊字形無襯線體

中文與漢字, 設計開發 37 Comments »306 views

明瞭體,是我個人以Windows Vista日文字體Meiryo為基礎製作的一款舊字形字體。Meiryo作為日文字體保留了許多舊字形的優美特徵,然而卻混入了一部分日本新字體略字,我將之一一糾正為經典的舊字形,並加入了方正蘭亭黑體以補全生僻字簡化字,使其成為一個非常優美的屏幕顯示字體。配合Windows的Cleartype或者Linux的文字清晰技術,明瞭體在任何字號都有非常良好的表現,效果如下圖。

為解釋明瞭體為什麼是優美的舊字形,我用下面名句中的字來一一解釋

1、燕燕于飛 差池其羽 之子于歸 遠送於野(《詩經 邶風 燕燕》)

“差”上下不連筆。“羽”中兩撇而非點提,更符合象形。“歸”右上“⺕”中間一筆貫穿。“遠”、“送”二字走至旁兩點。“送”右上兩點為“八”字形。“於”最後一筆為提而非點。

2、知我者 謂我心憂 不知我者 謂我何求 (《詩經 王風 黍离》)

“者”字中間有一點。

3、天命玄鳥 降而生商 宅殷土茫茫 (《詩經 商頌 玄鳥》)

“天”上面一橫較長。“玄”下半部分“幺”前兩筆為撇點。“降”右下角為四筆。“商”第一筆為短橫。“殷”字右上角“几”帶鈎。“茫”右下角“亡”字形上面一橫不出頭。

4、令沅湘兮無波 使江水兮安流 (《楚辭 九歌 湘君》)

“令”中間為一橫,下部從“卩”。“兮”上邊“八”字形有一橫。

5、木受繩則直 金就礪則利 (《荀子 勸學》)

“受”上邊從“爪”字形。“繩”部首從“糸”字形。“直”下邊從一折。

6、請布基 慎聖人 愚而自專事不治 (《荀子 成相》)

“請”字右下角“丹”字形之中為一豎。“慎”從“眞”。

7、既自以心為形役 奚惆悵而獨悲 (《歸去來兮》 陶淵明)

“既”從“上白下匕”。“以”從豎提兩筆。“為”從爪字頭“爲”。“惆”之“周”中兩橫之間的豎出頭。“悲”上部“非”左邊從一撇一提。

8、此曲祗應天上有 人間能得幾回聞 (《贈花卿》 杜甫)

“祗”部首從“示”字形,“氐”下邊為一橫。“幾”左下角“人”字形不出頭。

回頭再看看我們的微軟“雅”黑,相比之下真是毫無雅緻可言。最大的問題是筆畫粗細不一,讓人感覺好像是雜糅了好幾個字體。再加上“新字形”一味追求於手寫體接近,使印刷體毫無印刷體之美感。

1、走至旁只有一點,顯得不夠穩當。
2、言字旁起筆一點讓整個字有傾斜之勢。
3、絞絲旁下邊三點顯得非常難看,尤其是本來對稱的字如“絲”。
4、“直”平行筆畫過多,讓人眼花繚亂(數不清到底有幾橫)。
5、示字旁和衣字旁僅僅一點之差,難以分辨。

本人修改的明瞭體還在後期製作階段,目前已經可以使用,涵蓋了GBK Big5 Unicode BMP內所有漢字。如果你需要這款字體,歡迎與我聯繫。

标签:, , , , , , , , , ,
20 queries. 0.614 seconds. Designed by NattyWP .
Images by desEXign.