有幸加入ibus-pinyin的開發
最近結識了中文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來填補吧。