用于各种便携设备的表格式文字输入模式

——用于各种便携设备的表格式文字输入模式
2008年07月31日 14:58    来源:上海动手做报社    关注度(5252)

指导教师 华东师范大学第二附属中学 王保卫
 
摘要
表格式文字输入模式主要是最大化了每一次按键所产生的效果。基于这个思想改变当前的输入模式,从而从源头上加快输入速度。本课题主要是根据这种模式,以拼音输入法为基础,在触摸屏设备和普通手机上,将这个思路具体化,并且展现了这种输入模式的应用效果。在触摸屏设备的版本中,以列表示韵母,以行表示声母,用户通过点击屏幕上的单元格,来选定欲输入文字的拼音及文字。通过对拼音使用率的分析,保证了在合并相近拼音后,各位置所代表的各拼音所含文字不出现较大的紧密和稀疏。由于是基于成熟的输入法,不需要专门的学习,易于上手。统计显示,这种输入模式在用户熟悉之后,较现在带触摸屏的便携式终端上的输入模式有相当提升。在普通手机版本中,充分利用了数字键盘这一所有手机共同拥有的最大的特点,表格与按键相对应,在按键的过程中,不断收缩范围,使用户每次按键都有意义,在减少按键的同时,获得更准确的读音范围,加之拼音输入法中通常最耗费时间的同音多字的选择也可以快许多,由此,这种输入模式不论在触摸屏设备上与否,效率都得到较大提高。
关键字: 输入法 便携设备 手机 拼音
引言
当前拼音输入软件将精力大量放在降低重码率上,这对系统资源的占用较大,不适合便携式终端使用;同时,这在通常情况下已经能得到就用户输入的拼音本身而言合理的结果,但很可能不是用户所要的结果。由此可以认为,它已接近极限,想要进一步提升效果,就需要相当高的智能,让设备联系上下文理解文意了。此外,这需要目标设备具有较高的性能,因而需要较高成本,且往往这本身的开发就费用昂贵。
而从源头上对输入法进行改变,却少人问津。一方面是这个问题只牵涉到少数东亚语言,常常不能引起足够的重视;另一方面,qwerty键盘已经当然地成为了人们习惯的在计算机上使用的快捷的输入方式,可是将这一方式几乎一成不变地向其他设备移植后,却不能发挥出其原本在计算机上时拥有的优势,还浪费了新平台的优点,因而难以有适合其他终端的输入法。
拼音虽然通常长达2~6位(有时确定读音就要9次按键[1]),但是,它们实际上可以使用的组合数却很少,仅379种。因此在这一课题中将拼音作为用于实现这种输入模式的基本输入法,从而兼顾输入效率和学习难度。但这并不表示这种模式仅适用于拼音,它完全有可能应用在其它输入法上。
功能概览
对于触摸屏设备
(屏幕分辨率不小于210*260(绝大多数触摸屏PDA和手机能够达到,程序的设计保证可以使用手指,而非笔,来按键))
考虑通过以列表示韵母,以行表示声母,那么,每一个格子就可以表示几种声母与韵母的组合。用户首先通过点击屏幕上的单元格,来选定欲输入文字的拼音。在这一部分中,有以下几个特点(如图1):
       每一个单元格所表示的拼音组合可能超过1个。这样做一方面帮助了拼音掌握不完善的人使用这种输入方法(应用表格文字输入模式后,前后鼻音模糊、平翘舌音模糊等天然地被实现了);另一方面,进行组合可以减小列表的宽度,在保证不出现较大地紧密和稀疏的情况下,使得这种输入模式能够在屏幕更小的设备上使用;
       标点、特殊符号、英文与其他拼音分开,另外归类;
       行列分别有周期性的颜色的渐变,将两种颜色叠加后作为一个单元格的颜色。这样可以帮助用户定位需要的行列;

用户选定拼音之后,将得到另一张表格,这张表格大致构造如图2所示,有如下几个特点:
u       拼音,带音调的拼音和文字的摆放方式,这种清晰的布局使得用户可以快速地找到需要的文字。而对于那些使用手柄或是导航键的用户来说,就可以快速的定位到需要的文字。
u       默认不显示生僻字,只显示GB2312标准中的字,只有当特定标记被点击之后,才显示GB2312以外的字。这样不会使得有些字无法输入,却能因为直接可以得到的文字的总量适当减小,而有效地提高输入效率。
u       文字位置按照HOSS频序排列。
在这种输入模式下,通过字库的分析并合理排布,保证任何字都可以在两次按键以内确定。
前述的方式主要在于降低了按键次数。也可以考虑下述适用于大多数手机的版本略扩大表格后(4×5)在触摸屏上使用,这使得按键较大,易于输入。
对于大多数手机
(支持Java ME,MIDP2.0和CLDC1.0,绝大多数中低端及以上手机能够达到)
    大多数手机不论从性能方面,还是从屏幕分辨率等角度讲,都远不如触摸屏设备。但与此同时,手机拥有许多触摸屏设备没有的特点,它们拥有数字键盘,拥有方向键。表格是文字输入模式充分利用了这一特点。
为了尽可能地扬长避短,与前述触摸屏手机版本的区别主要在于,操作不是通过触摸,而是通过提供给用户的与键盘相对应的表格。从而可以使手机键盘的利用率尽可能高,由此减少输入汉字需要的按键次数,以提高中文输入的效率。

                                                                                            图 三
现在来举一个例子,比如要输入“输入方式”这几个字:
依次按“#”,“4”,“4”这三个键(这三个键分别在三次的表格中对应s所在的行,u所在的列),从而确定“输”的读音,最后按“2”选择“输”(“输”所在的位置恰为键盘中2的位置)。
由于“输入”是一个常用的词汇,接下来,只需要按方向键中的“中键”,就可以完成“入”字的输入。
然后按“1”(“1”恰为f所在列,ang所在行)。但是,与“输”的输入过程不同,接下来只要按“下”键就可以完成“方”字的输入。这是因为,“方”是一个非常常用的字。
与“输入”类似,“方式”也是一个常用词,所以,最后按下“中键”。就此完成了“输入方式”这几个字的输入。
 
效果
触摸屏设备的效果比较直观。所以这里主要对大多数手机的效果进行分析。
 
通过编程,对本输入模式与普通手机拼音输入法在逐字输入的情况下(不使用联想功能),所需的平均按键次数进行了统计和比较。
平均按键次数是这样定义的:
其中f(c)指字符c的出现频率,g(c)指字符c的最少按键次数[4]
 
表格输入模式所需按键次数的模拟程序计算g(c)的流程:
1.       读入表格输入模式的汉字排布表,将所有文字的所需次数设定为(3+该文字在底层区域的序号/12)(对于绝大多数字,这一值为4)。
2.       读入常用字表(即第二、第三级状态下的4个最常用字),将这些字的所需次数修改为2或3。
 
普通手机拼音输入法所需按键次数的模拟程序计算g(c)的流程(这里模拟的手机输入法的具体说明:使用T9,允许不完整拼音输入,拼音切换每次一键,允许逐个选择音调,不需确定已选拼音,翻页每次一键完成,每页中间向两侧频率减小):
1.       读入T9规则表。
2.       读入拼音汉字表。对所有出现了的拼音的非空前缀处理为T9规则中所对应的数字序列,生成决定每个读音的所有前缀所需的按键次数。同时,对每个文字,生成它的读音表。
3.       按频率由高到低顺序处理文字。对于每个文字,枚举它的每种读音。对于每种读音,枚举它的每个前缀,并计算决定读音的按键次数与选取文字的按键次数之和。选取所有情况的最小值作为g(c)。
 
普通手机拼音输入法平均按键次数的统计中,每页显示文字数不同会影响统计结果,这是几种情况的结果:
每页5字
每页6字
每页7字
每页8字
每页9字
4.818865
4.800082
4.799639
4.808563
4.822386
会产生这样的结果,原因在于:当每页显示文字过少时,用户需要更多地去翻页。而显示文字过多时,选择每页两端的文字就会需要更多的按键次数。统计显示,每页7字恰好是两者的平衡点,此时得到最优值。
将表格式文字输入模式与普通手机拼音输入法每页字数最优情况下的结果进行比较,如图5:
表格式文字输入模式
常规T9拼音输入法
3.173128
4.799639

此外,还进行了全句输入的测试。由于难以进行系统的分析与模拟。所以是直接在手机上进行的。结果如下:

 
表格模式
索爱K750c
诺基亚N70
摩托罗拉L6
诺基亚5310
2
5
6
5
7
1
1
1
1
4
3#
5
4
7
1
1
1
1
便
3
5
6
6
8
4
6#
7
8
4
6#
7
8
8
3
5#
7
7
2
3
4
3
2
3
6
7
6
8
4
3#
4
5
4
4#
6
7
6
1
1
1
1
2
5#
6
6
7
1
1
3
3
SUM
39
55(6#)
71
71
53
注:上表中各数据的统计是已知的可能达到的最小值:
索爱K750c,诺基亚N70,摩托罗拉L6:使用了联想功能。同时,在前2者中,如果可能且有效,将使用数字编号来选择汉字,这可以大程度的加快速度,但不是非常普遍的方式。
索爱K750c:x(#)指包括1次长按。如果不长按将增大按键次数至少一次,这里选择了长按;如果不长按与长按总按键次数相等,选择不长按。但在实际应用中,对用户而言(时间、麻烦程度等),一次长按的代价可能远超过2次短按的代价。
诺基亚5310:以词为单位输入,这与表格式文字输入模式是可以相结合的,并可以进一步提升表格式文字输入模式的速度。
实现
当前版本可以供最终用户使用,但是,更重要的,它是一种功能的演示,以拼音输入法为基础,展现这种输入模式的价值。
开发使用Java ME和Java SE、Python相结合的方法。
 
主程序——Java ME
主程序使用Java ME编写,代码的组织是面向对象的。为了兼顾兼容性和效果,使用了Connected Limited Device Configuration (CLDC) 1.0 (JSR 30)和Mobile Information Device Profile (MIDP) v2.0 (JSR 118)。

一方面,Java本身具有较强的可移植性,CLDC1.0和MIDP2.0本身就被绝大多数手机和个人助理设备所支持,并且是大多数此类设备上主要的扩展方式。
另一方面,代码的思路是基于对象的。程序中用于显示文字的代码被组织成了一个文字绘制对象,绘制界面中的文字表格也是由一个专门对象负责的……图4显示了用户按键后程序的工作过程。
同时,Java最大的特点就是易于维护。在前述基础上,编写过程中,不但时刻注意代码的执行效率和空间使用量,且处处关注可维护性和可读性,为将代码移植到更接近于设备的平台提供了最大的可能性。
   
在主程序中,使用到了几个现成的类:
游戏开发包,javax.microedition.lcdui.game.*:包括了2种显示元素。由此,程序可以简单地使用双缓存显示大多数内容,并将场景和角色(Sprite)的概念融入到了其中,更清晰地表达程序的内容。提高了效率和可维护性。
数据输入流,java.io.DataInputStream等:由输入的二进制文件来决定表格的排布方式等,这样,就可能在不修改主程序的基础上,在Java ME平台设备有限的资源下,展现出其它输入法应用基于表格的输入模式后的效果。
线程,java.lang.Thread和java.lang.Runnable:通过实现Runnable接口,用线程的方式执行一些简单的与时间有关的周期性的代码。
 
表格排布方案设计——Java SE
表格的排布使用Java SE完成。他主要的功能是根据GB2312字库、HOSS频序表、汉字拼音表、ASCII字库,生成包含符号、英文等在内的拼音表格字库以及各级表格中的文字排布方式,并输出为纯文本。这些文本文件经开发者整理后,再由这一程序生成二进制版本,供主程序使用。在字库的生成过程中,由于文字的数量虽然不多,但基于对GB18030,乃至更完整的字库在这个平台上实现的考虑,几乎使用了线性复杂度的代码来获得最高的执行效率。
字库的整理是在Java SE和Excel的辅助下,人工完成的。通过计算机对数据的分析,获得各种拼音的频率,人工根据相似性(比如将平翘舌音、前后鼻音放在一起)和频率,整理字库,尽可能的发挥表格输入法的特性。
如果不考虑相似性,那么,通过搜索和二分、贪心相结合,可以避免人工的辅助。这种方式的时间复杂度是,其中m、n分别是行和列的项目数(比如韵母数和声母数),m’是列上要分成的组数,U是每个单元格内条目数的总数的最大值。
 
还用到了一些数据结构和输入输出类:
哈希表,java.util.HashMap和java.util.HashSet:使用哈希表保存文字的各种信息。并由此将同一个字的各种信息对应起来,从而产生表格。同时,为了可扩展性,存储空间是动态的。
平衡树(红黑树),java.util.TreeMap:非触摸版本中,生成联想功能所有数据。使用平衡树维护第二次按键后所能确定的各范围内最常用的前5个字。随后,对于每个第一次按键后能确定的范围,将其下一级中的前5个字加入树中。这个操作几乎是线性的。
缓冲数据输出,java.io.BufferedDataWriter:将数据以跨平台的方式,使用缓存,用二进制格式生成字库(拼音布局、文字表、文字显示方式、频序、联想等),作为资源文件供手机应用程序使用。
 
点阵字库制作——Python
点阵字库的生成使用了Python和PIL(Python Image Library)。
由于各种便携式平台对文字字体和大小的支持通常非常有限,而软件对文字占用空间(指在屏幕上占用的像素数)的精确性要求较强,为了保证作品在各种平台上效果的一致性,软件使用专门的字库文件来显示文字。
字库的生成通过图像处理,将bmp格式的文字图形矩阵,通过裁减、调整等,转换为二进制文件,从而把图像转换为点阵字库。
总结
当前,手机已经进入千家万户,上至七八十岁的老人,下至刚上小学的孩子,人人都可以有一部手机。然后,无法否认,现有的编写是设备上输入文字的速度还相当令人难以接受。表格式文字输入模式可以根据设备的特点,加快包括拼音输入法在内的一些输入法的输入速度。两者分别适用于拥有触摸屏(或者与触摸屏相似的技术,如NOKIA的虚拟键盘技术, MOTO等的可变键盘技术)的一般性能的设备(包括,但远不限于手机、PDA等)和大多数手机设备。
在研究过程中还发现,用于便携终端的表格式文字输入模式在没有触摸屏、也没有数字键盘的设备(如一些PSP,MP3,它们有时也需要文字输入)上同样适用。在这些设备上,表格可以与手柄、摇杆、导航键等设备相对应,便捷地用这种模式实现汉字的输入。方便了使用者直接使用已有输入设备,而不是搬出键盘来实现中文输入。
需要强调的是,这里提出的是一种输入模式,而不是一个专门的输入法。它可以应用在很多设备上,所基于的输入法也不限于拼音,甚至可能是某个尚未提出的输入法。
提升文字输入速度,从电脑的诞生到现在,始终,是一个重要的课题。在键盘逐渐被淡化的当前社会,在按键变少甚至没有按键的设备上实现快速文字输入的意义越来越大。相比手写输入,这种模式更快速;相比直接移植电脑输入法,这种模式更便利,也更高效。
参考文献
Swaroop C H 《Byte Of Python》
Bruce Eckel 《Thinking In Java》
陈劲松输入法论坛 http://www.srf.cn
CSDN.net IT技术社区 http://www.csdn.net
 

[1] 比如,在手机T9拼音输入法中,要输入“邵”字,先要按7426,这时得到pian、piao、qian、qiao

(责任编辑:管理员)

文章来源:http://202.120.127.145/Default.aspx?tabid=291&ctl=Detail&mid=696&Id=310