一种中文输入法简拼实现方法和系统
技术领域
本发明涉及计算机技术,特别涉及一种中文输入法简拼实现方法和系统。
背景技术
电脑使用者要将汉字输入到电脑,就要使用中文输入软件。目前,中文输入软件可分为键盘输入和非键盘输入。
1)键盘中文输入软件,就是利用键盘,根据一定的编码规则来输入汉字的一种方法。目前,汉字编码方案已经有数百种,其中在电脑上已经运行的就有几十种,汉字输入的编码方法,基本上都是采用将音、形、义与特定的键相联系,再根据不同汉字进行组合来完成汉字的输入的。
2)非键盘中文输入软件,包括手写输入软件、语音输入软件、OCR输入软件等。
目前比较成熟、使用最广的就是基于键盘的中文输入软件。在智能简拼输入法中,用户可以通过输入一个音节的任何一个前缀(前提是这个前缀本身不是完整的音节)来达到输入汉字的目的。如输入“zhog”,可以得到如图1所示的结果。在该输入法中,输入法软件内部需要维护一个简拼串(全拼串中的每个音节的首字母组成的字符串)到全拼串的映射表(如图2所示)和全拼串到其对应的候选词的映射表(如图3所示)。可以看出,索引的顺序都是按照字符串从小到大的顺序,对于这种已经排序的数组,查找的算法(例如折半查找)都是对数时间复杂度。
这种方案主要有两个缺点:①内存占用大,需要维护两个表:一个是简拼串到全拼串的映射表,另一个是全拼串到候选词的映射表;②简拼扩展(包括查找简拼到全拼的映射表和全拼到候选词的映射表)的速度比较慢。查表的过程包括三个步骤,一是在简拼到全拼映射表中找出简拼串对应的全部全拼串,二是把输入拼音串和每个找出的全拼串进行比较,找出其中匹配的全拼串,三是到拼音词典中找出每个全拼串对应的候选词。假设简拼到全拼映射表的索引数目为N,全拼到候选词映射表的索引数目为M,那么平均一个简拼串对应的全拼串数目为M/N,第一个步骤花费的时间为logN,第二个步骤花费的时间为M/N,第三个步骤花费的时间为(M/N)logM。则这三个步骤一共花费的时间为logN+M/N+(M/N)logM。
发明内容
本发明的目的在于提供一种中文输入法简拼实现方法和系统,可以克服现有技术的缺陷。
本发明采用的技术方案是:一种中文输入法简拼实现方法,对输入的拼音串进行音节划分后包括以下步骤:A1,在拼音词典中找到与所述拼音串的每个音节首字母都相同的结点;A2,以此结点为中心在拼音词典中向上、向下分别查找,找出与所述拼音串的每个音节相匹配的全拼串;A3,将所述匹配的全拼串对应的候选词按照词频从大到小进行排序。
进一步的,所述拼音词典中存储有全拼串到对应候选词的映射表;所述全拼串按照全拼串中每个音节首字母所组成的字符串从小到大排序;当每个音节首字母所组成的字符串相同时,按照全拼串从小到大排序。
作为优选,步骤A2中,当向上或向下找到的全拼串的音节首字母与所述拼音串的音节首字母不完全相同时停止向上或向下查找,执行步骤A3。
本发明一种中文输入法简拼实现方法进一步包括步骤:A4,将所述排序好的候选词显示在候选词窗口中。
本发明还公开了一种中文输入法简拼实现系统,包括拼音词典和用于对输入的拼音串进行音节划分的音节划分模块,还包括:
查找模块,用于在拼音词典中找到与所述拼音串的每个音节首字母都相同的结点,并以此结点为中心在拼音词典中向上、向下分别查找,找出与所述拼音串的每个音节相匹配的全拼串;
排序模块,用于将所述匹配的全拼串对应的候选词按照词频从大到小进行排序。
进一步的,所述音节划分模块用于对输入的拼音串进行音节划分后输出到所述查找模块;所述查找模块在接收到所述拼音串后执行以下步骤:B1,获得所述拼音串的音节首字母;B2,在拼音词典中找到与所述音节首字母都相同的全拼串作为结点;B3,以此结点为中心在拼音词典中向上、向下分别查找,找出与所述拼音串的每个音节相匹配的全拼串发送到所述排序模块。
进一步的,所述排序模块用于从所述查找模块接收全拼串,将所述全拼串对应的候选词按照词频从大到小进行排序。
作为优选,所述候选词的词频信息存储在所述拼音词典中。
进一步的,还包括显示模块,用于将所述排序模块输出的候选词显示在候选词窗口中。
作为优选,步骤B3中,当向上或向下找到的全拼串的音节首字母与所述拼音串的音节首字母不完全相同时停止向上或向下查找。
本发明的有益效果在于:(1)在中文输入法系统中不再需要简拼串到全拼串的映射表,减小了内存的占用;(2)采用新的索引结点的排序规则,大大提高了简拼扩展的速度。
附图说明
图1是在智能简拼输入法中输入“zhog”后得到的结果示意图;
图2是现有输入法中简拼串到全拼串的映射表;
图3是现有输入法中全拼串到其对应的候选词的映射表;
图4是本发明中文输入法简拼实现系统的结构示意图;
图5是本发明中拼音词典的数据结构图;
图6是本发明中文输入法简拼实现方法的流程图。
具体实施方式
下面根据附图和具体实施例对本发明作进一步阐述。
如图4所示,一种中文输入法简拼实现系统10包括音节划分模块101、查找模块102、排序模块104、显示模块105和拼音词典103。
其中,拼音词典103负责存储拼音串到对应候选词的映射表、候选词的词频信息等数据。本发明拼音词典103相对现有拼音词典来说,少了简拼串到全拼串的映射表,只存储有全拼串到对应候选词的映射表,且采用新的数据结构,减小了内存的占用。该数据结构中全拼串的排序遵循以下两条准则:1.首先按照全拼串中的每个音节首字母所组成的字符串从小到大进行排序。2.当全拼串的每个音节首字母所组成的字符串相同时,按照全拼串从小到大排序。即:首字母相同时,按照第一个音节第二个字母在字母表中的排序顺序排序,第二个字母也相同时按照第三个字母排序,当第一个音节完全相同时按照第二个音节第二个字母排序,依次类推。
图5所示的索引就是按照以上两条准则进行排序的,图中左侧的一列“gydg”“gydg”“gydgs”等并不包含在数据结构中,只是为了说明本数据结构的排序方法。这种结构中的一个优点是:所有首字母相同的全拼串在数组中是聚在一起的,它们在数组中的位置是连续的。这样就可先在此数组中找到一个所有音节首字母都与输入拼音串相匹配的结点后,通过向其相邻的结点扩展就可以找到简拼串所对应的全部全拼串。
音节划分模块101负责接收用户输入设备发送过来的拼音串,将该拼音串按照音节进行划分,然后发送到查找模块102。其中,音节划分的算法可以采用动态规划算法。
查找模块102负责获得与用户输入的拼音串相匹配的全部全拼串,再发送到排序模块104。获得匹配的全部全拼串的方法是:首先获得音节划分后的拼音串的音节首字母,然后在拼音词典103中找到与上述音节首字母都相同的全拼串作为中心结点,再以此结点为中心在拼音词典103中向上、向下分别查找,找出与用户输入的拼音串的每个音节相匹配的全拼串。当向上或向下找到的全拼串的音节首字母与用户输入的拼音串的音节首字母不完全相同时才停止向上或向下查找。其中,所述匹配是指输入拼音串的音节与全拼串的音节完全相同,或者输入拼音串的音节不完整,但其音节是全拼串音节的前缀。
排序模块104负责根据接收到的全拼串从拼音词典103中获得对应的候选词,再根据这些候选词的词频从大到小进行排序,然后发送到显示模块105。
显示模块105负责将接收到的候选词和用户输入的拼音串(音节划分后的)一起在候选词窗口中显示给用户,显示效果与图1所示相同。
下面以图5所示数据结构为例说明本发明中文输入法简拼实现方法的流程(如图6所示):
步骤S1,用户使用用户输入设备输入拼音串“gonydiah”。
步骤S2,音节划分模块101采用动态规划算法进行音节划分,结果为“gon’y’dia’h”。
步骤S3,查找模块102在拼音词典103中找到一个与输入拼音串(音节划分后)“gon’y’dia’h”每个音节首字母都相同的结点,假设找到了结点“gong’ye’dian’han”。
步骤S4,查找模块102以结点“gong’ye’dian’han”为中心向上向下分别进行扩展,把输入拼音串和每个找出的全拼串比较,找出其中匹配的全拼串,直到找到一个全拼串的音节首字母与输入拼音串的音节首字母不完全相同为止。
结点“gong’ye’dian’han”与输入拼音串“gon’y’dia’h”音节首字母相同并且匹配。向上扩展到“gan′ying′dian′he”结点,此全拼串与输入拼音串“gon’y’dia’h”比较,不匹配,但音节首字母相同。继续向上扩展到结点“guang′yin′de′gu′shi”,不匹配而且音节首字母不相同,停止向上匹配。向下扩展到“gong′yong′dian′hua”结点,此全拼串与输入拼音串“gon’y’dia’h”比较,匹配,且音节首字母相同。继续向下扩展到结点“gao′ya′dian′ji”,不匹配而且音节首字母不相同,停止向下匹配。将结点“gong’ye’dian’han”和“gong′yong′dian′hua”发送到排序模块104。
步骤S5,把每个匹配的全拼串对应的候选词按照词频从大到小进行排序。根据上个步骤,匹配的全拼串包括“gong’ye’dian’han”和“gong′yong′dian′hua”。它们对应的候选词分别为“工业电焊”和“公用电话”。假设“公用电话”的词频大于“工业电焊”的词频,则排序结果为“公用电话、工业电焊”,发送到显示模块105。
步骤S6,显示模块105将候选词和用户输入拼音串显示在候选词窗口中。
下面讨论一下本发明中简拼扩展的时间复杂度。假设简拼到全拼映射(此时是全拼串中每个音节首字母所组成的字符串到全拼串的映射)的数目为N,全拼到候选词映射表的索引数目为M,那么平均一个简拼串对应的全拼串数目为M/N。本发明中的查词表过程包括两个步骤,一是在拼音词典103中找到一个与输入拼音串每个音节首字母都相同的结点,时间为logM。二是以此结点为中心向上向下分别进行扩展,把输入拼音串和每个找出的全拼串比较,找出其中匹配的全拼串,时间为M/N。这两个步骤一共花费的时间为logM+M/N,(M>N)比现有技术中花费的时间logN+M/N+(M/N)logM要短。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。