输入法中候选词的生成方法及系统与流程

文档序号:15665909发布日期:2018-10-16 17:01阅读:396来源:国知局

本发明涉及文字处理技术,特别是涉及一种输入法中候选词的生成方法及系统。



背景技术:

文字输入中由于英文字母只有26个,并且对应了计算机键盘上的26个字母按键,因此直接按下计算机键盘中的字母按键即可实现英文输入;但是对于汉字输入而言,汉字种类繁多,是难以枚举的,无法与键盘所拥有的任一字母按键建立一对一的映射关系,因此,为了实现计算机中的汉字输入就必须对汉字进行编码,并建立汉字编码和字母按键之间的映射关系,以使得用户通过键盘输入某一汉字编码时计算机将输入的汉字编码转换为相应的汉字。

汉字作为一种图形文字是由音、形、义来共同表达的,因此,计算机中汉字输入的编码方法实际是将汉字的音、形、义与特定的字母按键相联系,例如,中文拼音输入法是根据汉字的音建立汉字拼音与字母之间的关系,用户通过输入与汉字拼音对应的字母序列来完成汉字的输入。

然而,在中文拼音输入法的使用过程中,与汉字拼音对应的字母序列输入是免不了发生漏打字母的情况,这一情况在连续输入词组或者句子的场景下更加无法避免,进而造成汉字音节输入不完整,无法得到正确的汉字,需要进行字母序列的重新输入,这将导致用户频繁地进行改错和重新输入等操作,非常地不方便。



技术实现要素:

基于此,有必要提供一种能提高用户操作上的方便性的输入法中候选词的生成方法。

此外,还有必要提供一种能提高用户操作上的方便性的输入法中候选词的生成系统。

一种输入法中候选词的生成方法,包括如下步骤:

获取输入的字母序列;

生成所述字母序列中子串的代价矩阵;

通过所述代价矩阵切分所述字母序列;

补全切分得到的子串,并根据补全的子串生成候选词。

优选地,所述生成所述字母序列中子串的代价矩阵的步骤为:

逐一计算字母序列中子串的代价函数;

通过所述代价函数进行填充得到代价矩阵。

优选地,所述通过所述代价函数进行填充得到代价矩阵的步骤具体为:

将字母序列中的字母分别对应矩阵中的行和列,并将所述代价函数填充到矩阵,所述填充的代价函数中对应子串的起止字母是与矩阵中的行和列相匹配的。

优选地,所述通过所述代价矩阵切分所述字母序列的步骤为:

扫描所述代价矩阵中的代价函数得到若干个连续的子串,所述连续的子串之间代价函数之和小于或等于字母序列的总代价,并将所述连续的子串之间的位置作为切分位置;

按照所述切分位置在所述字母序列中进行切分。

优选地,所述补全切分得到的子串,并根据补全的子串生成候选词的步骤为:

判断所述切分得到的子串是否与预设的音节前缀相匹配,若是,则

获取与所述切分得到的子串相匹配的音节,并在所述字母序列将所述获取的音节替换为所述切分的子串;

按照替换后的字母序列生成候选词。

一种输入法中候选词的生成系统,包括:

序列获取模块,用于获取输入的字母序列;

矩阵生成模块,用于生成所述字母序列中子串的代价矩阵;

切分模块,用于通过所述代价矩阵切分所述字母序列;

补全处理模块,用于补全切分得到的子串,并根据补全的子串生成候选词。

优选地,所述矩阵生成模块包括:

函数计算单元,用于逐一计算字母序列中子串的代价函数;

填充单元,用于通过所述代价函数进行填充得到代价矩阵。

优选地,所述填充单元还用于将字母序列中的字母分别对应矩阵的行和列,将所述代价函数填充到矩阵,所述填充的代价函数中对应子串的起止字母是与矩阵中的行和列相匹配的。

优选地,所述切分模块包括:

扫描单元,用于扫描所述代价矩阵中的代价函数得到若干个连续的子串,所述连续的子串之间的代价函数之和小于或等于字母序列的总代价,并将所述连续的子串之间的位置作为切分位置;

序列切分单元,用于按照所述切分位置在所述字母序列中进行切分。

优选地,所述补全处理模块包括:

判断单元,用于判断所述切分得到的子串是否与预设的音节前缀相匹配,若是,则通知音节获取单元;

所述音节获取单元还用于获取与所述切分得到的子串相匹配的音节,并在所述字母序列将所述获取的音节替换为所述切分的子串;

候选词生成单元,用于按照替换后的字母序列生成候选词。

上述输入法中候选词的生成方法及系统中,生成输入的字母序列中子串的代价矩阵,通过代价矩阵进行字母序列的动态切分,进而通过切分得到的子串进行补全,将未完整输入的子串变换为完整的音节,使得用户输入不完整音节时不需要进行频繁地改错和重新输入,大大提高了用户操作上的方便性。

【附图说明】

图1为一个实施例中输入法中候选词的生成方法的流程图;

图2为图1中生成字母序列中子串的代价矩阵的方法流程图;

图3为图1中通过代价矩阵切分字母序列的方法流程图;

图4为图1中补全切分得到的子串,并根据补全的子串生成候选词的方法流程图;

图5为一个实施例中输入法中候选词的生成系统的结构示意图;

图6为图5中矩阵生成模块的结构示意图;

图7为图5中切分模块的结构示意图;

图8为图5中补全处理模块的结构示意图。

【具体实施方式】

如图1所示,在一个实施例中,一种输入法中候选词的生成方法,包括如下步骤:

步骤S10,获取输入的字母序列。

本实施例中,用户通过中文拼音输入法进行汉字输入的过程中,按下字母按键输入一系列的字母序列,该字母序列包括了完整音节、音节前缀、简拼音节、英文单词以及非法音节等至少一种类型,其中,完整音节是某一汉字的全拼,例如,“zhang”即为一个完整音节;音节前缀是完整音节的前缀,是一不完整音节,例如,“fe”即为一个音节前缀,是完整音节“fei”、“fen”或者“feng”的前缀;简拼音节为声母,可以是词组中每一汉字对应声母的集合;若均不属于完整音节、音节前缀、简拼音节以及英文单词中的任一类型,则为非法音节,例如“fej”。

步骤S30,生成字母序列中子串的代价矩阵。

本实施例中,字母序列可任意划分成多个子串,具体的,可将字母序列定义为s1s2...sn,则该字母序列的任一子串sisi+1…si+k(1≤i≤n,0≤k≤n-i)。划分得到的子串可以是完整音节、音节前缀、简拼音节、英文单词以及非法音节中的任意一种类型,根据子串所属的类型对该子串赋予不同的权值,以用于表征通过子串得到相应汉字的代价,例如代价函数,进而通过字母序列中所能组合得到的子串对应的代价函数形成代价矩阵。

如图2所示,在一个实施例中,上述步骤S30具体包括:

步骤S310,逐一计算字母序列中子串的代价函数。

本实施例中,对于字母序列中的所有子串逐一计算代价函数,以得到通过相应子串生成候选词的代价。具体的,对于子串的代价函数,完整音节和音节前缀可直接生成候选词,因而所耗费的代价为0,即在子串为完整音节或音节前缀时代价函数c(x)为0,进一步的,可将代价函数用十六进制的形式表示,即0x0000,以方便进行数据处理,提高处理效率;简拼音节生成候选词还是需要耗费一定代价的,在子串为简拼音节时代价函数c(x)为1,其十六进制为0x0001;以此类推,可将子串为英文单词的代价函数设定为某一数值,优选的,该数值可以是字母序列的长度限值,即中文拼音输入法中规定的用户一次所能输入的最长字母序列对应的长度,例如,可以是64,如此设定数值方可保证后续字母序列切分的正确性,子串为英文单词时代价函数若为64,则相应的十六进制形式为0x0040;对于子串为非法音节的代价函数而言,其耗费的代价将会是最大的,因而可将对应的代价函数定义为字母序列的长度限值的倍数关系,使得英文单词的代价函数与非法音节的代价函数之间存在字母序列的长度限值的倍数关系,例如,若英文单词的代价函数为64,则非法音节的代价函数将为64*64=4096,对应的十六进制为0x1000。

步骤S330,通过所述代价函数进行填充得到代价矩阵。

本实施例中,代价矩阵是由所有子串对应的代价函数形成的,对于子串sisi+1…si+k对应的总代价函数为f(si+1…si+k),其递归计算公式如下:

计算得到每一子串的代价函数之后,将进行代价函数的填充以形成代价矩阵。

在一个实施例中,上述步骤S330的具体过程为:将字母序列中的字母分别对应矩阵中的行和列,并将代价函数填充到矩阵,填充的代价函数中对应子串的起止字母是与矩阵中的行和列相匹配的。

本实施例中,代价矩阵中每一矩阵元素均为对应子串总代价函数的数值。将字母序列中的字母依次对应代价矩阵的行和列,将代价函数按照矩阵中行和列所对应的字母依次进行填充,例如,参照如下代价矩阵,在这一代价矩阵中对于行为x,列为y(x≤y)处的矩阵元素而言,x行所对应的字母为子串的起始字母,y列所对应的字母为子串的终止字母。遵循这一填充方式所得到的代价矩阵将会使得代价函数仅分布于矩阵对角线以及右上角部分,将矩阵对角线以下的矩阵元素填充为零,或者矩阵对角线以及左下角部分,将矩阵对角线以上的矩阵元素填充为零,这一填充方式使得代价函数有序分布,便于提高后续扫描速度。但是,并不仅限于使用这一填充方式进行代价矩阵的填充,将代价函数按照其它顺序所进行矩阵填充也是可以的。

步骤S50,通过代价矩阵切分字母序列。

本实施例中,根据代价矩阵可以获知组成用户输入的字母序列的多个子串所耗费的最小代价,进而实现字母序列的准确切分,使得切分得到的子串所对应的汉字均是用户所期望得到的。

如图3所示,在一个实施例中,上述步骤S50包括:

步骤S510,扫描代价矩阵中的代价函数得到若干个连续的子串,连续的子串之间代价函数之和小于或等于字母序列的总代价,并将连续的子串之间的位置作为切分位置。

本实施例中,切分位置是用户输入的字母序列s1 s2...sn的切分点,假设该字母序列为两个汉字组成的词组,则位于si和si+1之间的切分位置则是字母序列中将两个汉字对应的子串切分开来的切分点。扫描的子串若满足f(s1 s2...si)+f(si+1 si+2...sn)≤f(s1s2...sn)则确定si和si+1之间为切分位置。

步骤S530,按照切分位置在字母序列中进行切分。

本实施例中,根据得到的切分位置对用户输入的字母序列进行切分以得到每一汉字对应的子串。例如,对于字母序列“feji”,得到的切分位置为*所在位置,即“fe*ji”,则对其进行切分将会得到子串“fe”和“ji”。

步骤S70,补全切分得到的子串,并根据补全的子串生成候选词。

本实施例中,切分得到的子串可能在输入时不可避免地发生了某一字母的漏输,成为一个不完整的音节,因此对于这一类音节需要对其进行补全,进而根据补全的音节获知相应的汉字。例如,切分得到的子串为“fe”,则这一子串是一个音节前缀,补全得到的完整音节可以是“fei”、“fen”以及“feng”,进而在根据“fei*ji”、“fen*ji”以及“feng*ji”生成候选词。

如图4所示,在一个实施例中,上述步骤S70包括:

步骤S710,判断切分得到的子串是否与预设的音节前缀相匹配,若是,则进入步骤S730,若否,进入步骤S770。

本实施例中,预先存储了音节前缀,在进行了字母序列切分之后将判断切分得到的子串是否为预先存储的音节前缀,如果是,则将会对其进行子串的补全处理,如果否,则说明切分得到的子串可能为完整音节和简拼音节中任意一种,可以直接进行候选词的生成。所存储的音节前缀是一个不完整音节的集合,即可以是列表的形式,表中每一元素都是某个完整音节的前缀,例如:

″be″,″bia″,

″cho″,″chon″,″co″,″con″,″cua″,

″din″,″do″,″don″,

″dua″,

″fe″,

″go″,″gon″,

″ho″,″hon″,

″jio″,″jion″,″jua″,

″ko″,″kon″,

″len″,″lon″,″lua″,

″mia″,

″nia″,″no″,″non″,″nua″,

″pia″,

″qio″,″qion″,″qua″,

″ra″,″ro″,″ron″,″rua″,

″sho″,″so″,″son″,″sua″,

″tia″,″tin″,″to″,″ton″,″tua″,

″we″,

″xua″,

″yon″,″yua″,

″zho″,″zhon″,″zo″,″zon″,″zua″

步骤S730,获取与切分得到的子串相匹配的音节,并在字母序列将获取的音节替换为切分的子串。

本实施例中,获取切分得到的子串对应的所有完整音节,将用户输入的字母序列中的不完整音节替换成完整音节,以实现字母序列的智能补全,避免了用户的改错重输过程,提高了输入速度,使得生成的候选词更为合理。

步骤S750,按照替换后的字母序列生成候选词。

步骤S770,根据输入的字母序列生成候选词。

如图5所示,在一个实施例中,一种输入法中候选词的生成系统,包括序列获取模块10、矩阵生成模块30、切分模块50以及补全处理模块70。

序列获取模块10,用于获取输入的字母序列。

本实施例中,用户通过中文拼音输入法进行汉字输入的过程中,按下字母按键输入一系列的字母序列,该字母序列包括了完整音节、音节前缀、简拼音节、英文单词以及非法音节等至少一种类型,其中,完整音节是某一汉字的全拼,例如,“zhang”即为一个完整音节;音节前缀是完整音节的前缀,是一不完整音节,例如,“fe”即为一个音节前缀,是完整音节“fei”、“fen”或者“feng”的前缀;简拼音节为声母,可以是词组中每一汉字对应声母的集合;若均不属于完整音节、音节前缀、简拼音节以及英文单词中的任一类型,则为非法音节,例如“fej”。

矩阵生成模块30,用于生成字母序列中子串的代价矩阵。

本实施例中,字母序列可任意划分成多个子串,具体的,可将字母序列定义为s1s2...sn,则该字母序列的任一子串sisi+1…si+k(1≤i≤n,0≤k≤n-i)。划分得到的子串可以是完整音节、音节前缀、简拼音节、英文单词以及非法音节中的任意一种类型,矩阵生成模块30根据子串所属的类型对该子串赋予不同的权值,以用于表征通过子串得到相应汉字的代价,例如代价函数,进而通过字母序列中所能组合得到的子串对应的代价函数形成代价矩阵。

如图6所示,在一个实施例中,上述矩阵生成模块30包括函数计算单元310以及填充单元330。

函数计算单元310,用于逐一计算字母序列中子串的代价函数。

本实施例中,函数计算单元310对于字母序列中的所有子串逐一计算代价函数,以得到通过相应子串生成候选词的代价。具体的,对于子串的代价函数,完整音节和音节前缀可直接生成候选词,因而所耗费的代价为0,即在子串为完整音节或音节前缀时代价函数c(x)为0,进一步的,可将代价函数用十六进制的形式表示,即0x0000,以方便进行数据处理,提高处理效率;简拼音节生成候选词还是需要耗费一定代价的,在子串为简拼音节时代价函数c(x)为1,其十六进制为0x0001;以此类推,函数计算单元310可将子串为英文单词的代价函数设定为某一数值,优选的,该数值可以是字母序列的长度限值,即中文拼音输入法中规定的用户一次所能输入的最长字母序列对应的长度,例如,可以是64,如此设定数值方可保证后续字母序列切分的正确性,子串为英文单词时代价函数若为64,则相应的十六进制形式为0x0040;对于子串为非法音节的代价函数而言,其耗费的代价将会是最大的,因而可将对应的代价函数定义为字母序列的长度限值的倍数关系,使得英文单词的代价函数与非法音节的代价函数之间存在字母序列的长度限值的倍数关系,例如,若英文单词的代价函数为64,则非法音节的代价函数将为64*64=4096,对应的十六进制为0x1000。

填充单元330,用于通过代价函数进行填充得到代价矩阵。

本实施例中,代价矩阵是由所有子串对应的代价函数形成的,对于子串sisi+1…si+k对应的总代价函数为f(si+1…si+k),其递归计算公式如下:

计算得到每一子串的代价函数之后,填充单元330将进行代价函数的填充以形成代价矩阵。

在一个实施例中,上述填充单元330还用于将字母序列中的字母分布对应矩阵的行和列,将代价函数填充到矩阵,填充的代价函数中对应子串的起止字母是与矩阵中的行和列相匹配的。

本实施例中,代价矩阵中每一矩阵元素均为对应子串总代价函数的数值。填充单元330将字母序列中的字母依次对应代价矩阵的行和列,将代价函数按照矩阵中行和列所对应的字母依次进行填充,遵循这一填充方式所得到的代价矩阵将会使得代价函数仅分布于矩阵对角线以及右上角部分,将矩阵对角线以下的矩阵元素填充为零,或者矩阵对角线以及左下角部分,将矩阵对角线以上的矩阵元素填充为零,这一填充方式使得代价函数有序分布,便于提高后续扫描速度。但是,并不仅限于使用这一填充方式进行代价矩阵的填充,将代价函数按照其它顺序所进行矩阵填充也是可以的。

切分模块50,用于通过代价矩阵切分字母序列。

本实施例中,切分模块50根据代价矩阵可以获知组成用户输入的字母序列的多个子串所耗费的最小代价,进而实现字母序列的准确切分,使得切分得到的子串所对应的汉字均是用户所期望得到的。

如图7所示,在一个实施例中,上述切分模块50包括扫描单元510以及序列切分单元530。

扫描单元510,用于扫描代价矩阵中的代价函数得到若干个连续的子串,连续的子串之间的代价函数之和小于或等于字母序列的总代价,并将连续的子串之间的位置作为切分位置。

本实施例中,切分位置是用户输入的字母序列s1 s2...sn的切分点,假设该字母序列为两个汉字组成的词组,则位于si和si+1之间的切分位置则是字母序列中将两个汉字对应的子串切分开来的切分点。扫描的子串若满足f(s1 s2...si)+f(si+1 si+2...sn)≤f(s1s2...sn)则确定si和si+1之间为切分位置。

序列切分单元530,用于按照切分位置在字母序列中进行切分。

本实施例中,序列切分单元530根据得到的切分位置对用户输入的字母序列进行切分以得到每一汉字对应的子串。

补全处理模块70,用于补全切分得到的子串,并根据补全的子串生成候选词。

本实施例中,切分得到的子串可能在输入时不可避免地发生了某一字母的漏输,成为一个不完整的音节,因此对补全处理模块70于这一类音节需要对其进行补全,进而根据补全的音节获知相应的汉字。

如图8所示,在一个实施例中,上述补全处理模块70包括判断单元710、音节获取单元730以及候选词生成单元750。

判断单元710,用于判断切分得到的子串是否与预设的音节前缀相匹配,若是,则通知音节获取单元730,若否,则通知候选词生成单元750。

本实施例中,预先存储了音节前缀,在进行了字母序列切分之后判断单元710将判断切分得到的子串是否为预先存储的音节前缀,如果是,则将会对其进行子串的补全处理,如果否,则说明切分得到的子串可能为完整音节和简拼音节中任意一种,可以直接进行候选词的生成。所存储的音节前缀是一个不完整音节的集合,即可以是列表的形式,表中每一元素都是某个完整音节的前缀。

音节获取单元730,用于获取与切分得到的子串相匹配的音节,并在字母序列将获取的音节替换为切分的子串。

本实施例中,音节获取单元730获取切分得到的子串对应的所有完整音节,将用户输入的字母序列中的不完整音节替换成完整音节,以实现字母序列的智能补全,避免了用户的改错重输过程,提高了输入速度,使得生成的候选词更为合理。

候选词生成单元750,用于按照替换后的字母序列生成候选词。

候选词生成单元750还用于判断到切分得到的子串不与预设的音节前缀相匹配时,根据输入的字母序列生成候选词。

上述输入法中候选词的生成方法及系统中,生成输入的字母序列中子串的代价矩阵,通过代价矩阵进行字母序列的动态切分,进而通过切分得到的子串进行补全,将未完整输入的子串变换为完整的音节,使得用户输入不完整音节时不需要进行频繁地改错和重新输入,大大提高了用户操作上的方便性。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1