[讨论] 嵌入式系统中文输入法的设计

呱呱   2008-2-21 10:39 楼主
摘   要:在基于嵌入式系统的智能终端中,中文人机交互界面是必须的功能,某些系统还要求中文文本输入。本文介绍了一种占用较少资源并适于在MCU上实现的中文输入法。   引言
  目前,以LCD和数字键盘实现的人机交互式界面在智能终端中广泛采用。在不同的应用场合,对人机界面的要求也不同,一些情况下只要求简单参数的显示和选择,而在一些信息终端中,还要求文字的输入。
  在使用高性能CPU和标准显示设备的情况下,实现友好的人机界面可采用商用嵌入式系统( 如Linux或WinCE)所支持的GUI程序。但很多情况下,智能终端使用MCU,且其显示设备是非标准接口的小型LCD。此时,必须找到占用较少资源的低成本实现方法。
  笔者参加的智能终端项目就是一个比较典型的基于MCU的人机界面应用,使用128×64点阵式LCD模块,要求可显示Unicode编码的一、二级常用汉字库并可进行中文输入。此应用中输入法相关的代码和数据占用约20kB。在应用开发中,我们使用了实时操作系统μC/OS-II,相关内容可参考有关文献。
  简单的中文拼音输入法
  汉字输入法的实质是建立一种按键组合到汉字编码的映射关系,因此,使用数字键盘的嵌入式系统的输入法与使用标准键盘的PC机的输入法没有本质的不同,其区别主要在于嵌入式应用中处理器、存储器等资源比较有限。如对应汉字“你”,拼音输入法下PC键盘按键组合为“ni”,而在一般数字键盘下,其按键组合则为“64”。
  在多数手持式设备(如智能电话)中,以0~9数字键与几个简单的控制键实现汉字输入,比较著名的是在手机中广泛采用的T9 和iTap 输入法。这里我们介绍一种简单的拼音输入法的实现方法。
  一般终端键盘包括12个按键,分别是0~9数字键和“*”、“#”两个特殊键。按通用规则,数字1对应空格,其功能基本等同于PC机中的空格键,用于输入空格或作为当前汉字的确认键;2~9数字键分别对应下述汉语拼音字母:
  2:a b c   3:d e f     4:g h i
  5:j k l    6:m n o   7:p q r s  
  8:t u v   9:w x y z
  而“0”、“*”、“#”键则作为输入法中的控制键。我们将“#”作为“选择键”,用于选取同一数字键组合下的不同拼音组合。
  输入法中使用了两个重要数据结构,分别是PY_NODE和PY_SUBNODE。每个PY_NODE对应一个数字键组合,PY_SUBNODE则对应一组拼音组合。由于一个数字组合可对应多个拼音组合(如“226”对应“ban”、“bao”、“can ”、“cao”),因此这两个结构实现的是一个两级的对应表。
  PY_NODE按树组织,而PY_SUBNODE按双向链表组织。二者的基本关系如图1所示。
  以下是两个结构的定义:
  typedef struct py_node{
  unsigned int son[8];   //对应下次2~9按键输入时应转到的PY_NODE的ID号
  unsigned int father;     //父节点ID号
  struct py_subnode *ptrpy;   //指向下属第一个PY_SUBNODE的指针
  }PY_NODE;
  typedef rom struct py_subnode{
  unsigned char py[7];                   //本节点的拼音字符串
  struct py_subnode *prev;           //指向前一PY_SUBNODE的指针
  struct py_subnode *next;            //指向下一PY_SUBNODE的指针
  unsigned char *ptrUnicode;        //指向本节点对应Unicode码表的指针
  }PY_SUBNODE;
  设计中我们所参照的汉语拼音表中共有412种组合,这样系统中必须有412个PY_SUBNODE与其一一对应;系统中共建立了250个PY_NODE。建立此部分数据的工作比较繁琐,分以下5个步骤进行:
  1、 汉字按拼音进行分组,按常用程度排序,并将汉字转化为Unicode码或国标码,码型视系统要求而定;
  2、将有效拼音转换为数字键盘值组合,如拼音“cui”转为数字值“284”,这些值对应了部分PY_NODE;
  3、增加中间PY_NODE,用于表示本身无效但后续输入有效的拼音,如“b”、“c”、“don”、“dua”等节点;
  4、 将数字键组合相同的PY_SUBNODE编成链表,由某一PY_NODE中的ptrpy指针指向表头;
  5、 按数字键组合的关系,将PY_NODE组成树。
  图1中所示组织关系并不复杂,但其工作量不小,一般情况下可编写转换程序自动建立。图2为拼音输入法数据结构的一个片断。
  在改变当前PY_NODE时,一般应伴有一些显示操作,因应用不同各有差异,此处不做过多说明。
  在当前节点下,可以用某一指定控制键(如“#”键)来选择此PY_NODE下属的PY_SUBNODE以缩小汉字的选取范围。
  增加功能
  上述拼音输入法比较简单,且完成了输入法需要的基本功能。对于某些应用场合,对输入法还有更多的要求,可在上述方法的基础上进行改进实现。一些常见的要求和改进方法列举如下:
  ① 增加常用字功能
  在上述输入法中,增加常用汉字。只考虑国标码中的约7000常用汉字情况下,输入法所占用的存储空间增加14kB。
  ② 增加联想功能
  为使输入更为友好,很多输入法设有联想功能,即在输入一个汉字后,此汉字常用的后续汉字自动成为候选项由用户选择。
  ③ 笔划输入法
  笔划输入法较之拼音输入法的优势在于重码少,输入不常用汉字时也不必多次翻页查找。
  以五笔划输入法为例,通过五个按键即可输入汉字。该输入法将汉字笔划分为5种笔划,即:“一”、“丨”、“丿”、“丶”和“-”五种笔划,分别对应数字键“7”、“8”、“9”、“*”、“0”,如“你”字的组合为“丿”、“丨”、“丿”、“-”、“丨”、“丿”、“丶”。
  笔划输入法与拼音输入法的区别在于人的感觉而非机器的操作,本质上只是按键组合与汉字码表对应关系有所不同,如“你”在拼音输入法下对应“64”,而在笔划输入法下则对应“989089*”。
  ④ 关于特殊符号、英文和数字
  对于一些常用的特殊符号、英文和数字的输入,较常用的做法是将以单独的输入法实现。
  软、硬件设计
  输入法的性能优劣,更多的不是体现在算法,而是是否符合实际需求。因此它的优化工作是对前述PY_NODE和PY_SUBNODE组织的优化,如汉字次序的安排、联想功能中后序字的组织、以及操作界面的设计是否适合人们的使用习惯。因算法本身很简单,所以用C语言可实现较高的代码效率,以及较好的可移植性。
  对于很多8位MCU,地址空间不大于64kB。这样小的空间对于汉字界面中的汉字库和输入法中的大量数据结构是远远不够的(如一、二级常用字的16×16点阵汉字库至少需要约220kB),因此常使用地址分页方式实现地址扩展。在MCU外部设一锁存器作为“页”寄存器,每页大小根据MCU特性和实际需求确定,如MCS51系列最大可为64kB一页。由于页寄存器的操作为独占型的,因此在中断内不能进行操作;而在基于RTOS的多任务环境下,应避免多个任务同时使用页寄存器。
  结语
  由于8位、16位MCU的应用场合多是低成本的设备,当商用输入法的成本无法接受或无法得到时,自行编写输入法应是可行的。当然,本文所讨论的只是实现输入法的基本方法,虽然方法可行,但所编写的输入法代码应经过较长时间的测试才可以作为产品的正式软件发布。

回复评论 (2)

回复:嵌入式系统中文输入法的设计

我只在51上做过拼音输入法 5笔没想过 最近要做日文和焊文,没有头绪
点赞  2008-3-1 13:45

回复 楼主 呱呱 的帖子

高通汉字输入系统
2009年4月        高通®汉字

公司简介
集通公司专注于中文信息处理技术领域,包含汉字库芯片和汉字输入法。是国内外唯一的全系列中文信息产品的供应商。集通公司自80年代起至今,具有20多年的专业技术积淀,曾被评为“上海十大软件公司”,集通公司是国家信标委统一委托生产标准字库芯片的唯一厂商。集通公司获得“本土创新奖”《EDN CHINA》、“企业新星奖”《电子产品世界》。集通公司拥有16项专利技术,15项软件版权,并通过ISO9000质量认证。

产品
汉字库:GT21/23系列标准点阵字库芯片,GT60系列智能曲线字库芯片;
汉字输入法:GT-KEYIN系列GT三维部件输入法,GT快捷拼音输入法;
存储芯片ROM:GT27系列4MB/16MB32MB/64MB;

应用功能
领域………………应用
手机………………短信编辑、电话簿
遥控器……………交互式机顶盒及数字电视的文字输入
电话终端…………短信编辑、电话簿
手持终端…………汉字数据采集
税控收款机………发票内容的输入
LED显示屏………LED屏离线遥控汉字输入
电子词典…………待查汉字的输入

高通汉字输入系统内容
1.GT三维部件
2.GT快捷拼音
3.GT简便符号
4.数字
5.英文字母
由于拼音输入法不能覆盖所有用户,非拼音用户在手机用户中占20%以上,在广东等方言地区比例更大,遥控器在提供拼音输入同时,必须要提供非拼音输入法;
鉴于常人仅能念出4千多汉字的发音,对于人名、地名等冷僻字,即使习惯拼音的用户也必须依赖非拼音输入法完成汉字输入。
GT三维部件输入法是针对大量非拼音用户的需求,在提高输入效率的同时,首次实现字型部件输入免记忆。

三维部件输入法特点
输入全程均由提示行提示,避免用户在汉字输入时的思维负担,首次实现形码免记忆。
采用大部件(复合笔画)输入,避免按照逐笔输入时造成的效率低下问题。
输入效率提高42%,平均输入键数为3.47键。
通过GB/T-18031汉字输入法国家标准检测
首款实现声母、韵母双向容错的拼音输入法,如chi吃、ci次互相容错,qing情、qin亲互相容错。
首、次键多声母同时提示,如:按“5JKL”键后,立即出现单键对应多个声母的汉字同时供选(如:就J、可K、力L),明显减少拼音输入法按键次数。
支持数字键直接选字,免去反复移动光标选字的麻烦。
充分利用数字键盘,每页显示最多12个高频汉字,使翻页次数减少一半。
联想词单页显示,无需翻页。
输入效率提高35%,按键次数减为3.85次/字

三维部件输入法技术指标及效率对比
项目                                GB2312                        GB18030
字数                                6,763汉字                27,484汉字
键位数                                11键                        11键
码长(逐字加权)        3.47键/字                3.92键/字
编码效率                        80.6%                        74.5%
最小显示屏                        120点*38点                120点*38点
效率对比(对比结果是以覆盖率70%的高频汉字逐键实测所得)
T9:5.25键                ZI:5.35键                GT快捷拼音:3.17键

数字小键盘汉字输入法的国家标准GB18031主要指标之一,为每汉字按键次数不得超过6键,T9笔画为5.25键,ZI笔画为5.35键,均勉强达到标准。高通三维部件(复合笔画)输入法为3.17键,属输入法效率的重大突破。
GT三维部件—构成根据汉字的字形规律,将每个汉字拆分为至多不超过两个部件(首部件和尾部件),每个部件通过两维索引确定,至多不超过三键选中,以大部件优先为原则。每个汉字最多不超过6键一维索引输入法部件三维模型二维索引三维部件。

GT快捷拼音输入法技术指标及效率对比
项目                                GB2312                                GB18030
字数                                6,763汉字                        27,484汉字
占用键位数                        16键                                16键
码长(逐字加权)        5.00键(10字提示)        5.10键(10字提示)
4.39键(12字提示)        4.48键(12字提示)
最小提示行                        120点*38点                        120点*38点

效率对比(对比结果是以覆盖率70%的高频汉字逐键实测所得)
T9:5.85键                        ZI:5.29键                        GT快捷拼音:3.85键

上海集通数码科技有限公司
地址:上海市漕河泾开发区田州路99号新茂大厦809室
电话:+86-021-54451000        13911873186
WebSite:www.genitop.com
点赞  2009-6-17 15:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复