用于存储拼音的存储结构及拼音输入方法

文档序号:6444737阅读:273来源:国知局
专利名称:用于存储拼音的存储结构及拼音输入方法
技术领域
本发明涉及拼音处理技术领域,具体地说,是涉及一种用于存储拼音的存储结构及基于该存储结构的拼音输入方法。
背景技术
在嵌入式系统设备中,如手机、数字机顶盒等,大都需要中文汉字的输入,其中拼音输入是最常用的一种。由于嵌入式系统CPU性能较低、内存等资源较少,因此,嵌入式系统对通过拼音获得汉字的输入方法要求较高,一方面要求输入法高效,对查询结果的筛选及查询效率较高,另一方面,要尽可能地减少对内存的占用。基于上述嵌入式系统的特殊性,目前在嵌入式系统中,构造拼音外码到汉字内码的转换通常有两种方法静态数组和有序树。采用静态数组的方法,也就是将每个拼音(总共300多个)定义为一个数组。这种方法虽然实现简单,但是具有固有的缺点(1)不便于实现汉字的联想功能;(2)程序运行之初需要为这些数组静态分配内存空间,占用较多的系统资源;(3)查询效率不高。采用有序树的方法,最常用的就是Trie树。Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。在现有的拼音输入法设计中,"Trie 树的存储结构为多叉链表,树中的每个结点除根结点外均包括有一个字符,每个结点均包括有1个值域和26个指针域共27个域,而根结点也包括有沈个指针域,其中,26个指针域对应于沈个英文字母。采用Trie树存储拼音并作为拼音输入结构时,虽然可以提高查找速度,但是,由于每个结点均通过沈个指针域指向沈个英文字母,而在实际拼音组建时,很多指针域是无效的、也即无法组成拼音,因此,大量无效的指针域占用了相当大的内存空间资源,进而降低了内存的工作效率,导致嵌入式系统整体性能下降。

发明内容
本发明的目的在于提供一种用于存储拼音的存储结构及基于该存储结构的拼音输入方法,以减少存储结构所占的存储空间,提高查找拼音及根据拼音查找汉字的速度。为实现上述发明目的,本发明所提供的存储结构采用下述技术方案来实现
一种用于存储拼音的存储结构,所述存储结构为一树形结构,树形结构的根结点包括有指向其一个子结点的指针域,树形结构中除根结点和叶结点之外的其他结点各包括有指向其父结点的指针域、指向其一个子结点的指针域及指向一个兄弟结点的指针域,属于同一层的兄弟结点依次链接形成一个链表,树形结构中的叶结点包括有指向其父结点的指针域。本发明通过对传统的Trie树进行改进而提出一种新型树形结构的存储结构来存储拼音,根结点仅需要一个指针域指向其一个子结点,其余结点最多通过三个结点分别指向父结点、子结点及兄弟结点,大大减少了结点的指针域,提高了指针域的有效性,降低了存储结构所占用的存储空间,进而可以提高拼音的查找速度。
如上所述的存储结构,为实现对拼音相对应的汉字进行快速定位,所述树形结构中除根结点之外的其他结点还包括有与该结点所包含的拼音字母相对应的关键字、由根结点至该结点的路径构成的拼音对应的汉字在字库中的起始位置值及相同拼音的汉字个数值。
如上所述的存储结构,为进一步提高查找速度,所述属于同一层的兄弟结点依次链接形成的链表中,根据结点的关键字的使用频率对结点排序,形成有序的链表。
如上所述的存储结构,所述指向一个兄弟结点的指针域为指向右兄弟结点的指针域或指向左兄弟结点的指针域,优选为指向右兄弟结点的指针域。
为实现本发明目的,本发明所提供的拼音输入方法采用下述技术方案来实现一种拼音输入方法,该方法基于上述所述的用于存储拼音的存储结构,该方法具体包括下述步骤根据汉字拼音规则构建树形结构,以存储拼音;从树形结构的根结点出发,每个拼音字母对应一层结点,沿着与给定的拼音相应的指针逐层向下查找;在找到与给定的拼音相等的结点后,获取由根结点至该结点的路径构成的拼音对应的汉字在字库中的起始位置值及相同拼音的汉字个数值;根据起始位置值及汉字个数值从汉字库中读取汉字并显示。
如上所述的拼音输入方法,若查找到树形结构的叶结点仍未找到与给定的拼音相等的结点,则提示拼音输入错误。
如上所述的拼音输入方法,所述拼音输入方法优选应用于数字机顶盒、手机等嵌入式系统设备中,以减少对嵌入式系统设备有限资源的占用。
与现有技术相比,本发明的优点和积极效果是本发明通过对传统的Trie树进行改进而提出一种新型树形结构的存储结构来存储拼音,根结点仅需要一个指针域指向其一个子结点,其余结点最多通过三个结点分别指向父结点、子结点及兄弟结点,大大减少了结点的指针域,提高了指针域的有效性,降低了存储结构所占用的存储空间;在应用这种存储结构进行拼音输入时,可以提高拼音的查找速度,进而提高根据拼音查找汉字的速度。
结合附图阅读本发明的具体实施方式
后,本发明的其他特点和优点将变得更加清林疋。


图1是本发明用于存储拼音的存储结构一个实施例的示意图; 图2是本发明拼音输入方法一个实施例的流程图。
具体实施方式
下面结合附图和具体实施方式
对本发明的技术方案作进一步详细的说明。
请参考图1,该图1示出了本发明用于存储拼音的存储结构一个实施例的示意图。
如图1所示,以包含拼音a、ai、an、ao、ang、ba、ban、da的部分存储结构为例,该实施例的存储结构为一树形结构,包括有根结点11,根结点11作为父结点,其子结点构成第一层分支结点12,第一层分支结点12共包括有4个子结点,对应的字母分别为a、b、c、 d ;该层中的结点a作为父结点,其子结点构成第二层分支结点13,第二层分支结点13包括的子结点有i、n、o等;第二层分支结点13作为父结点,其包括有一个叶节点g。此外,第一层分支结点12中的结点b作为父结点,其下的第二层分支结点包括有一个子结点a,而子结点a又包括有一个叶节点η。第一层分支结点12中的分支结点d作为父结点,还包括有一个叶节点a。在图1示出的存储结构中,根结点11包括有指向其一个子结点a的指针域,叶结点g包括有指向其父结点η的指针域,叶结点η包括有指向其父结点a的指针域,而叶结点 a包括有指向其父结点d的指针域。除了根结点11及所述的三个叶节点之外,该实施例存储结构中的其他结点各包括有三个指针域,分别为指向父结点的指针域、指向一个子结点的指针域及指向一个兄弟结点的指针域。以第一层分支结点12中的结点a为例,该结点包括有指向其父结点、即根结点11的指针域,还包括有指向一个子结点i的指针域,还包括有一个指向其右兄弟结点b的一个指针域。再以第二层分支结点13中的结点η为例,该结点包括有指向其父结点、即第一层分支结点12中的结点a的指针域,还包括有指向一个子结点、即叶结点g的指针域,还包括有一个指向其右兄弟结点ο的一个指针域。在该实施例中,同属于同一层的兄弟结点依次链接形成一个链表,父结点通过指向一个子结点的指针域指向其所有子结点构成的链表。具体来说,同属于根结点11的第一层分支结点12中的四个结点a、b、c、d作为兄弟结点,依次链接形成链表,根结点11通过指向其子结点a的指针域而指向其所有子结点构成的链表;同属于第一层分支结点12中的父结点a的第二次分支结点13中的三个结点i、n、o作为兄弟结点,依次链接形成链表,父结点a通过一个指向其子结点i的指针域而指向其所有子结点构成的链表。采用这种存储结构之后,不管父结点有多少个子结点,均可以通过一个指针域而指向所有的子结点,大大降低了父结点的指针域,减少了对存储空间的占用。在由兄弟结点依次链接形成链表时,可以通过结点指向一个兄弟结点的指针域进行链接。指向兄弟结点的指针域可以是指向右兄弟结点的指针域,也可以是指向左兄弟结点的指针域,优选为指向右兄弟结点的指针域,以便于进行链表查找。以第一层分支结点12 为例,其中的一个结点a包括有执行右兄弟结点b的指针域,结点b包括有一个指向其右兄弟结点c的一个指针域,结点c又包括有一个指向其右兄弟结点d的指针域,…,通过所述指向右兄弟结点的指针域,第一层分支结点12中的结点a、结点b、结点c及结点d依次链接形成了链表。而且,在该实施例中,属于同一层的兄弟结点依次链接形成的链表中,可以根据结点的关键字的使用频率对结点进行排序,形成有序的链表,以减少从父结点到子结点进行字母匹配查找的过程,提高拼音的查找速度。此外,该实施例中,为实现对拼音相对应的汉字进行快速定位,树形结构中除根结点11之外的其他结点还包括有与该结点所包含的拼音字母相对应的关键字、由根结点至该结点的路径构成的拼音对应的汉字在字库中的起始位置值及相同拼音的汉字个数值等共3个值域。请参考图2,该图2示出了本发明拼音输入方法一个实施例的流程图。该实施例的拼音输入方法基于图1实施例的拼音存储结构进行拼音的查找,具体流程如下步骤21 流程开始。
步骤22 根据汉字拼音规则构建树形结构。
该步骤是根据现有存在的300多个汉字拼音及其拼写规则填充图1实施例所述的树形结构中的各个结点,除根结点之外,每个结点包括有一个字母,形成存储有拼音的树形结构。
步骤23 从树形结构的根结点出发,根据给定的拼音逐层向下查找。
用户输入待查询的拼音,以此拼音作为给定的拼音,从树形结构中查找与给定的拼音相匹配的结点值。在查找时,从根结点出发,每个拼音字母对应一层结点,沿着与给定的拼音相应的指针逐层向下查找。例如,以图1实施例的树形结构为例,给定的拼音为 “ang”,则从根结点11出发,根据根结点11指向其子结点的指针域而获得其子结点构成的链表,并依次查找链表中的结点,找到与给定拼音中的第一个字母“a”相等的关键字对应的结点,也即找到了第一层分支结点12中的结点a。然后,根据该结点a指向其子结点的指针域向下查找,再从其子结点构成的链表中查找与给定拼音中的第二个字母“η”相等的关键字对应的结点,从而找到了结点η。由于还未查找到与给定拼音“ang”相等的结点,则再从结点η继续向其子结点查找,找到了结点η的叶结点g的关键字与给定拼音“ang”中的第三个字母“g”相等,则停止查找。有的情况下,可能无需查找到叶结点即可获得与给定拼音相等的结点,则也停止查找。
步骤M 判断是否查找到结点。若是,转至步骤沈;若否,执行步骤25。
根据是否找到与给定的拼音相等的结点来判断是否查找到需要的结点,当然,这里的与给定的拼音相等是指从根结点开始一直到最后一个结点经过的路径中的所有结点组合起来后的值与给定的拼音相等。
步骤25 若没有找到相等的结点,则提示拼音输入错误,然后转至步骤观。
步骤沈若查找到相等的结点,则获取相应结点的起始位置值即同拼音的汉字个数值。
这里,结点的起始位置是指该结点所包含的、由根结点至该结点的路径构成的拼音对应的汉字在字库中的起始位置值,而且,该结点也包括有与根结点至该结点的路径所构成的拼音相同的汉字个数值。在找到结点后,可以直接读取该结点的这两个值。
步骤27 根据起始位置值及汉字个数值从汉字库中读取汉字并显示。
—般的,在汉字库中,相同拼音的汉字连续存放,且对外提供一个起始位置指针, 因此,通过获取的起始位置值及汉字个数值就可方便地从汉字库中得到拼音相同的汉字。
上述实施例的拼音输入方法基于图1实施例中的拼音存储结构,能够实现拼音的动态查找,且查找速度快,所用拼音结构占用的存储空间少,尤其适合于应用在数字机顶盒、手机等嵌入式系统设备中,以减少对嵌入式系统设备有限资源的占用。
以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管参照前述实施例对本发明进行了详细的说明,对于本领域的普通技术人员来说,依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明所要求保护的技术方案的精神和范围。
权利要求
1.一种用于存储拼音的存储结构,其特征在于,所述存储结构为一树形结构,树形结构的根结点包括有指向其一个子结点的指针域,树形结构中除根结点和叶结点之外的其他结点各包括有指向其父结点的指针域、指向其一个子结点的指针域及指向一个兄弟结点的指针域,属于同一层的兄弟结点依次链接形成一个链表,树形结构中的叶结点包括有指向其父结点的指针域。
2.根据权利要求1所述的存储结构,其特征在于,所述树形结构中除根结点之外的其他结点还包括有与该结点所包含的拼音字母相对应的关键字、由根结点至该结点的路径构成的拼音对应的汉字在字库中的起始位置值及相同拼音的汉字个数值。
3.根据权利要求1或2所述的存储结构,其特征在于,所述属于同一层的兄弟结点依次链接形成的链表中,根据结点的关键字的使用频率对结点排序,形成有序的链表。
4.根据权利要求3所述的存储结构,其特征在于,所述指向一个兄弟结点的指针域为指向右兄弟结点的指针域。
5.根据权利要求3所述的存储结构,其特征在于,所述指向一个兄弟结点的指针域为指向左兄弟结点的指针域。
6.一种拼音输入方法,其特征在于,该方法基于上述权利要求1至5中任一项所述的用于存储拼音的存储结构,该方法包括下述步骤根据汉字拼音规则构建树形结构,以存储拼音;从树形结构的根结点出发,每个拼音字母对应一层结点,沿着与给定的拼音相应的指针逐层向下查找;在找到与给定的拼音相等的结点后,获取由根结点至该结点的路径构成的拼音对应的汉字在字库中的起始位置值及相同拼音的汉字个数值;根据起始位置值及汉字个数值从汉字库中读取汉字并显示。
7.根据权利要求6所述的拼音输入方法,其特征在于,若查找到树形结构的叶结点仍未找到与给定的拼音相等的结点,则提示拼音输入错误。
8.根据权利要求6或7所述的拼音输入方法,其特征在于,所述拼音输入方法应用于嵌入式系统设备中。
9.根据权利要求8所述的拼音输入方法,其特征在于,所述嵌入式系统设备为数字机顶盒。
10.根据权利要求8所述的拼音输入方法,其特征在于,所述嵌入式系统设备为手机。
全文摘要
本发明公开了一种用于存储拼音的存储结构及拼音输入方法。所述存储结构为一树形结构,树形结构的根结点包括有指向其一个子结点的指针域,树形结构中除根结点和叶结点之外的其他结点各包括有指向其父结点的指针域、指向其一个子结点的指针域及指向一个兄弟结点的指针域,属于同一层的兄弟结点依次链接形成一个链表,树形结构中的叶结点包括有指向其父结点的指针域。应用本发明的存储结构及拼音输入方法,可以减少存储结构所占的存储空间,提高查找拼音及根据拼音查找汉字的速度。
文档编号G06F17/30GK102521418SQ20111045783
公开日2012年6月27日 申请日期2011年12月31日 优先权日2011年12月31日
发明者田友强 申请人:青岛海信宽带多媒体技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1