2006/05/31

键盘抽象与机器人

今天在考虑键盘抽象和机器人问题。

为设备按键映射和键盘种类抽象并不难。键盘只有两种,数字键盘和QWERTY键盘,前者内嵌字母;后者内嵌数字。QWERTY的变种键盘,BB7100那种,就是一个减少了字母表的键盘。只有在全QWERTY的时候,能采用自动分隔composition的办法来处理,即使有模糊音的时候也是如此,因为前置模糊音并不会破坏分隔原则;但是其它的情况都只能被动匹配,即把字词的编码翻译成键盘码(字母或数字)然后匹配composition,这能处理字数>=或=问题(Longer),但是无法快速处理尾码渐进匹配(progressive),需要额外的数据表才行,否则就要遍历拼音表,这需要再考虑一下,暂无很好的解决方案。

现有的代码把匹配分到了不同的对象中完成,譬如字数过滤和Alpha过滤(允许匹配非拼音规则的英文、符号、网址、Email地址等等)在数据库搜索中解决。但是看起来这个代码得挪个地方了。因为在被动匹配的情况下,字数是在匹配之后才知道的。:(。这回到了我昨天写的C++封装心得:把类拆小,每个只实现单一功能。

按照你告诉别人的东西去做,你就成功了--米兰·昆德拉

不过在现阶段,似乎没有必要把这个问题搞的很复杂。基本上考虑两种键盘就可以了,一种是Qwerty,包括Treo, HP65/69,Nokia E61,Moto Q,BenQ,Dopod,BB等都是这种键盘,区别只是内嵌数字键的方法不同;另外就是手机上的Numpad,好在手机上的Numpad内嵌字母的方式都是一样的,数据库无需更改。至于BB7100的键盘,其实也是不错的设计,可惜支持的手机不多,但是随着SE M600系列的发布,这种情况也许会有改观,毕竟SE品牌有着大批拥趸而且UIQ是Symbian最好的分支,只是不知道内置的中文输入法会不会让中国用户接受。

机器人问题比较麻烦。汉字分隔和拼音标注不是在一个小小的巨硬程序中能实现的,事实上,前者是中文搜索引擎的核心技术之一,后者是汉语言计算机处理上的难点课题。好在我要求并不高,前者在网上找到了一个免费程序,而后者可以购买拼音大师。除此之外还需要对格式做一些简单的正则表达式替换,工作量不大,用Editplus就可以解决,或者用Turbo C++写个简单的命令行程序就可以了。不过,这基本上可以让巨硬II具有主动学习功能(根据用户的短信和Memo来学习词频)的想法破灭了。:(。或者退一步,只能根据已有词组调整词频,不能通过学习自动造词了。

机器人问题还涉及到英文,数字,和符号的自动处理。其实这也和巨硬II中的保留History问题类似,只是以前没仔细考虑过。数字用通配符是比较好的做法。英文可以考虑成自动造词。但是符号问题比较棘手,尤其是混合在英文数字之中的符号。大致来说,符号分为三类,一类是中止符,比如逗号句号,会清除History;另一类是含义符,比如$,可以当作英文字符处理,还有一类是强制分词符号,可以当作是词与词之间的分隔,包括引号双引号书名号等等。在最初的时候,我只会考虑处理ASCII中的所有可打印符号和GBK中定义的可打印符号,至于Unicode中浩如烟海的符号,以后再说吧。:(

No comments: