有幸加入ibus-pinyin的开发
This post is written in Chinese. Please consider using Google Translate
最近结识了中文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来填补吧。