開源中文輸入法
在Windows上面中文拼音輸入法數不勝數。簡單數了一下自己用過,就有六種以上:
- 智能ABC
- 微軟拼音
- 紫光拼音
- 搜狗輸入法
- 谷歌輸入法
- QQ輸入法
- ......
可參考wikipedia 中文輸入法列表,以及小眾軟件 我最喜歡的《拼音輸入法》。在手機端各種拼音輸入法種類更多。
而在Unix和Linux平台上也存在不少中文輸入法,它們不僅免費,而且開源。如果想要了解輸入法的實現,不妨從它們入手。
輸入法大致可分為三部分:
- 輸入法框架
- 輸入法引擎
- 輸入法界面
關於輸入法結構的介紹,可以參見這篇文章Packaging Input Method Framework and Engines。
輸入法框架
Windows系統提供統一的輸入法框架,在Windows XP和之前版本是IMM(Input Method Manger),之后是TSF(Text Service Framework)。搜狗,谷歌,QQ等輸入法都是在IMM框架下面實現了引擎和界面。而Linux下面輸入法框架並不統一,這給兼容性帶來很大問題。
IBus
Intelligent Input Bus。相對較新。使用C和Python開發。
特點:
- 輸入法引擎可以按需加載\卸載
- 支持系統托盤(Systray)
- 支持XKB
- 配置更改即可生效
- 提供C和Python的綁定
提供以下拼音輸入法引擎:
- ibus-pinyin IBus主要開發者開發的
- ibus-googlepinyin 由Android項目移植過來
Scim
Smart Common Input Method。歷史比較悠久,曾作為多數Linux發行版默認的中文輸入法。使用C++開發。
特點:
- 使用C++編寫,完全面向對象。
- 高度模塊化。
- 非常靈活的架構,即可以用作動態加載的庫,也可以作為C/S輸入法環境。
- 簡單的編程接口。
- 完全支持i18n,及UCS-4/UTF-8編碼
- 包含很多方便實用的函數來加速開發
- 特性非常豐富的GUI Panel
- 統一的配置框架
提供以下拼音輸入法引擎:
- scim-ccinput
- novel-pinyin
- scim-pinyin
- fitx
- scim-sunpinyin
Fcitx
小企鵝輸入法,Free Chinese Input Toy for X。
特點:
- 支持主題(Theme)
- 支持系統托盤(Systray)
- 支持Kimpanel
- 支持KDE配置模塊
- 全局簡繁轉換
提供以下拼音輸入法引擎:
- fcitx-pinyin
- fcitx-sunpinyin
- fcitx-googlepinyin
Rime
全名中州韻輸入法,不僅僅是一個輸入法,而是一個輸入法算法框架。 非常有創意地通過YAML格式的配置文件,定制輸入法。參見RimeWithSchemata
Rime 是一款強調個性的輸入法。 Rime 不要定義輸入法應當是哪個樣、而要定義輸入法可以玩出哪些花樣。 Rime 不可能通過預設更多的輸入方桉來滿足玩家的需求;真正的玩家一定有一般人想不到的高招。
它支持主流操作系統:
- Linux: 中州韻 ibus-rime
- Windows: 小狼毫 Weasel
- Mac OS X: 鼠須管 Squirrel
輸入法引擎
除了輸入法框架自帶的pinyin輸入法引擎,sunpinyin,libgooglepinyin比較常用。
sunpinyin
sunpinyin是基於統計語言模型(Statistical Language Model)輸入法引擎。支持上述的三個輸入法框架。 Mac下面的FIT輸入法也將sunpinyin作為輸入法引擎。參見FIT攜手sunpinyin。
SunPinyin是由Sun中國工程研究院的北京國際化中心開發,並貢獻給開源社區的。最初由張磊(Phill.Zhang)博士獨立完成,后來由眾多的社區開發者共同推進,目前的版本是2.0.x。支持整句輸入,能夠記錄用戶的詞匯和語言模型,從而訓練出更適合你的輸入法。
在Google code的項目的wiki上面,有三篇非常詳細的代碼導讀系列文章,可以讓有興趣的人能有相對深入了解的途徑。 很少能看到類似關於拼音輸入法引擎如何實現的文章。
libgooglepinyin
Google pinyin Android 版本(注意不是桌面版本)是曾經開源的,但從2009年后就再未更新。libgooglepinyin就是從這個版本移植過來的。同樣的項目還有scim-googlepinyin、fcitx-googlepinyin。
Github上還有反向工程版本com.google.android.inputmethod.pinyin
其他有趣的項目
libpinyin
參見開源拼音輸入法社區的大融合。libpinyin是SunPinyin、Novel Pinyin和iBus-Pinyin社區聯合創建的子項目,致力於為中文拼音輸入法提供智能整句輸入的算法核心,將試圖合並novel-pinyin和sunpinyin中的智能拼音整句輸入算法部分。
javachinesepinyin
這是一個中文拼音輸入法的Java實現,基於HMM模型,無詞典,能完成拼音轉漢字,和漢字轉拼音的任務,並結合Edit Distance使其具有中文輸入糾錯功能。
結論
輸入法相關的開源項目很多,但成熟並實際應用的不多,很多個人項目不再更新,甚至沒有內容。今后會繼續關注,不斷在這篇文章進行更新。