具体实施方式
下面将结合附图详细描述本发明的具体实施例。在同一个实施例中,相同的附图标记用于表示执行相同功能的相同元件或元素。
汉语拼音和英文单词一样,由26个字母组成。汉语拼音是单音节的词,一般由一个声母以及一个韵母,或者由单个韵母组成。下面列出了一些声母和韵母(其中v对应于汉语拼音ü)。
声母表:b p m f d t n l g k h j q x zh ch sh r z c s y w
韵母表:a o e i u v ai an ao ou ei en er ia ie in iu ua ue(ve)ui un uo angeng ing ong
声母和韵母之间相互组合,形成了表示汉语拼音的音节。下面列出了一些汉语拼音的音节。
音节表:
ba bo bai bei bao ban ben bang beng bibie biao bian bin bing bu
pa po pai pao pou pan pen pang peng pi pie piao pian pin ping pu
ma mo me mai mao mou man men mang meng mi mie miao miu mian minming
fa fo fei fou fan fen fang feng fu
da de dai dei dao dou dan dang deng di die diao diu dian ding duan duo dudui dong
ta te tai tao tou tan tang teng ti tie tiao tian ting tuan tuo tu tun tui tong
na nai nei nao nen nang neng ni nie niao niu nian nin niang ning ne nuo nunv nong
la le lailei lao lou lan lang leng li lia lie liao liu lian lin liang ling luo lu lvlun lue(lve)long
ga ge gai gei gao gou gan gen gang geng gua guai guan guang guo gu gungui gong
ka ke kai kou kan ken kang keng kua kuai kuan kuang kuo ku kun kui kong
ha he hai hei hao hou hen hang heng han hua huai huan huang huo hu hunhui hong
ji jia jie jiao jiu jian jin jiang jing ju jiong jue(jve)
qi qia qie qiao qiu qian qin qiang qing qu qiong que(qve)
xi xia xie xiao xiu xian xin xiang xing xu xun xiong xue(xve)
zha zhe zhi zhai zhao zhou zhan zhen zhang zheng zhua zhuai zhuan zhuangzhuo zhu zhun zhui zhong
cha che chi chai chou chan chen chang cheng chuai chuan chuang chuo chuchun chui chao chong
sha she shi shai shao shou shan shen shang sheng shua shuai shuan shuangshuo shu shun shui
re ri rao rou ran ren rang reng ruan ruo ru rui
za ze zi zai zao zou zang zeng zuan zuo zu zhuai zun zui zong
ca ce ci cai cao cou can cen cang ceng cuan cuo cu cun cui cong
sa se si sai sao sou san sen sang seng suan suo su sun sui song
ya yao you yan yang yu ye yue(yve)yuan yi yin yun ying yong
wa wo wai wei wan wen wang weng wu
从上面的音节表可以看出,汉语拼音必定以韵母结尾。在此规律的基础上,本发明人提出了更加简单有效的识别汉语拼音的方法。
图1是根据本发明的一个实施例处理混写语料的方法100的流程图。
步骤101是读取步骤,读取待处理的混写语料。该混写语料可包含汉语拼音(例如,姓名)和英文单词。可以从例如硬盘驱动器、闪存、诸如软盘、光盘等的存储介质来读取该混写语料。
步骤105是提取步骤,从该待处理的混写语料中提取包括至少一个字母的单词。可以采用一般的提取单词的方法。例如,可通过空格符号、制表符号、标点符号或回车符号等来判断单词的起始或结束,从而提取单词。当然,也可以采用其它方式来提取单词。
步骤110是识别步骤,按照从所提取的单词的末尾开始按从后向前的方向,以逐个字母判断的方式来识别该单词是否是汉语拼音。
进一步分析汉语拼音的韵母,可以发现汉语拼音只能以下列9个字母之一结尾{a,o,e,i,u,v,r,n,g},而汉语拼音的首字母却可以是多达23种可能(除了i、u、v之外),因此按照单词从后向前的方向进行判断,比从前向后的方式更优。在英文单词中有大量以非上述9个字母结尾的单词。例如,对于单词best,由于其末尾字母t不可能出现在汉语拼音末尾字符,因此仅需要一步比较就可以判断该单词best不是汉语拼音。也就是说,在步骤110中,如果单词不是以上述9个字母之一结束,则立即可识别出它必定不是一个汉语拼音。通过判断最后一个字母可以快速地排除大量的、诸如英文单词的非汉语拼音。而在现有技术的从前往后的判断方式下,仅仅通过一个单词的首字母,大多数情况下我们无法有效区分它是否是一个汉语拼音。
为了更准确地识别汉语拼音,可以参照汉语拼音的韵母表,建立如图2所例示的树形结构(以下,称为逆韵母树)。可以预先建立该树形结构,也可以在执行图1的方法100的过程中并行地建立该树形结构,或者将该建立步骤包括在步骤101、105、110的任一个中。
在图2中,树右边的数字表示左边节点所在的层的深度。例如,1表示第一层,2表示第二层,以此类推。该逆韵母树中的每个节点包括一个字母,每一个完整的分支(以及第一层中除r、n、g外的字母)都是韵母表中的一个韵母或组合韵母(即韵母的组合,如ian、iao、uai、uan、iang、iong、uang)。树中最后一层的节点称为叶子节点。
对于给定的单词,按照从所述单词的末尾开始按从后向前的方向,逐个字母地匹配该逆韵母树;如果所述单词的一个字母与所述逆韵母树的相应层不匹配,则直接确定该单词不是有效的汉语拼音,并且结束该识别方法。
应注意,图2的树形结构有可能进行变更。例如,由于韵母ve在大多数情况下也可以写作ue,所以可以省略有关ve的分支。类似地,也可以省略有关vn的分支。另外,由于韵母un是uen的缩写,因此图2的树形结构可以增加有关uen的分支。类似地,也可以增加iou的分支(其缩写是iu),等等。也有可能根据需要去除或增加其它分支,或仅仅使用树形结构的前几层。
图3是以示例的方式示出利用逆韵母树来识别汉语拼音的一个方法300的流程图。本发明不限于这样的示例,基于该示例,本领域技术人员很容易构造出其它等价的方法或算法。
在步骤301中,测量在步骤105中提取的单词的长度N(即,该单词所具有的所有字母的数目)。
在步骤304中,取出所述单词的末尾字母。例如,这可通过设置判断参数L的初始值为L=N、并取出所述单词的第L个字母(从前向后,或从左向右)来实现。
在步骤307中,将逆韵母树的第一层设置为当前层。
在步骤310中,将该第L个字母(此时是末尾字母)与当前层(此时是上述逆韵母树的第一层)进行匹配,以查看该第L个字母是否与逆韵母树的第一层中的某个节点的字母相同。如果上述匹配的结果是“否”,则前进到步骤312,在此,确定该单词不是汉语拼音,从而结束该方法。
如果步骤310处的匹配结果是“是”,则前进到步骤314,确定该匹配的节点是否是逆韵母树的叶子节点。如果该确定结果是“是”,则前进到步骤320,在此,确定该单词可能是有效的汉语拼音,从而结束该方法。
如果步骤314处的确定结果是“否”,则方法前进到步骤315,在此确定L是否等于1。如果L=1(步骤315处的“是”),则方法前进到步骤317并确定该单词不是有效的汉语拼音,从而结束该方法。另一方面,如果L≠1(步骤315处的“否”),则方法前进到步骤316。在步骤316,将该匹配的节点的下一层设置为当前层。然后在步骤318,将判断参数L减去1(L=L-1),并取出单词的第L个字母。然后方法回到步骤310,将单词的第L个字母与当前层进行匹配。
按照以上的方法,当在逆韵母树的某一层判断为与单词的某个字母不匹配,则直接确定该单词不是有效的汉语拼音,并结束流程。当判断为匹配时,则该单词有可能是有效的汉语拼音。在该层不是逆韵母树的最后一层(即,叶子节点)且单词的该字母不是最后一个字母(即,首字母)的情况下,再进入逆韵母树的下一层,匹配该单词的下一字母,直到完成逆韵母树的最后一层或该单词的首字母的匹配为止。
与上述通过判断单词的结尾字母来识别汉语拼音的方法相比,由于英文单词中以汉语拼音的韵母结尾的单词更少,因此通过与逆韵母树进行匹配,可以进一步地排除大量的非拼音单词,提高了识别的准确度。
进一步地,为了更准确地识别汉语拼音,可以参照音节表,将声母包括到上述树形结构中,从而类似地建立逆拼音树。为了简洁起见,图4中仅仅给出了逆拼音树的一部分的例子。其中,第一层的节点{u}具有位于第二层上的两个子节点{o}和{i},节点{i}进一步具有位于第三层上的7个子节点{m}、{d}、{n}、{l}、{j}、{q}、{x},这7个子节点是逆拼音树的叶子节点。虽然在此未示出整个逆拼音树,但本领域技术人员根据汉语拼音的音节表,很清楚整个逆拼音树的构造及其可能的变更形式。
对于给定的单词,按照从所述单词的末尾开始按从后向前的方向,逐个字母地匹配该逆拼音树;如果所述单词的一个字母与所述逆拼音树的相应层不匹配,则直接确定该单词不是有效的汉语拼音;以及如果所述单词的所有字母与所述逆拼音树的一个分支完全匹配,则确定该单词是有效的汉语拼音。
图5以示例的方式,示出了与图3类似的利用逆拼音树来识别汉语拼音的另一个方法500的流程图。本发明不限于这样的示例,基于该示例,本领域技术人员很容易构造出其它等价的方法或算法。
另外,在汉语拼音中,有一些可以不带声母,而仅仅由纯韵母构成,例如,a、an、ang、ai、ao、e、en、o、ou等等。为了更准确地识别汉语拼音,尤其是此类不带声母的汉语拼音,可以引入“假叶子节点”的概念。该假叶子节点不是逆拼音树的真正的叶子节点,而是上述纯韵母的汉语拼音的首字母所在的节点(如图4中带“*”号的那些节点),从任一假叶子节点到其根节点的一条路径也是一个有效的韵母或汉语拼音。可以将叶子节点和假叶子节点统称为“终点节点”。在此意义上,逆拼音树的一个“分支”表示从一个终点节点到其根节点的路径上的所有节点上的字母组成的字母序列。换句话说,逆拼音树的每一条分支是一个完整有效的汉语拼音。当然,终点节点并不是本发明所必要的,而且也可以为了实现本发明的不同目的而进行变化。例如,可以将不常用的“ei”、“eng”也包括到上述纯韵母的汉语拼音中。
在方法500中,在步骤501中,测量在步骤105中提取的单词的长度N。
在步骤504中,取出所述单词的末尾字母。例如,这可通过设置判断参数L的初始值为L=N、并取出所述单词的第L个字母(从前向后,或从左向右)来实现。
在步骤507中,将逆拼音树的第一层设置为当前层。
在步骤510中,将该第L个字母(此时是末尾字母)与当前层(此时是上述逆拼音树的第一层)进行匹配,以查看该第L个字母是否与逆拼音树的当前层中的某个节点的字母相同。如果上述匹配的结果是“否”,则前进到步骤512,在此,确定该单词不是汉语拼音,从而结束该方法。
如果步骤510处的匹配结果是“是”,则前进到步骤514,确定该匹配的节点是否是逆拼音树的叶子节点。如果步骤514处的确定结果是“否”,则前进到步骤518。在步骤518,确定L是否等于1。如果步骤518处的确定结果是“是”,则前进到步骤522,在此,确定该匹配的节点是否是逆拼音树的假叶子节点。如果步骤522处的确定结果是“否”,则前进到步骤524并确定改单词不是有效的汉语拼音,从而结束该方法。
如果在步骤518处确定L不等于1,则方法前进到步骤526。在步骤526,将该匹配的节点的下一层设置为当前层。然后在步骤528,将判断参数L减去1(L=L-1),并取出单词的第L个字母。然后方法回到步骤510,将单词的第L个字母与当前层进行匹配。
另一方面,如果步骤514处的确定结果是“是”,则前进到步骤516。在步骤516,确定L是否等于1。如果确定L不等于1,则前进到步骤512,在此,确定该单词不是有效的汉语拼音,从而结束该方法。
如果在步骤516处确定L=1,则确定该单词是有效的汉语拼音,从而结束该方法。
另一方面,如果步骤522处的确定结果是“是”,则前进到步骤520,确定该单词是有效的汉语拼音,从而结束该方法。
下面结合图4和图5举例说明本发明的实施例。对于一个有效的汉语拼音“xiu”,在步骤50 1中,确定拼音长度N=3。在步骤504中,设置判断参数L=N=3,并取出“xiu”的第3个字母“u”。在步骤507中,设置逆拼音树的第一层为当前层。
在步骤510中,检查字母“u”与逆拼音树的当前层(此时是第一层)是否匹配。因为“u”被包括在第一层的节点{a,o,e,i,u,v,r,n,g}中,所以步骤501处的匹配结果是“是”,方法前进到步骤514。
在步骤514中,因为匹配的节点{u}不是逆拼音树的叶子节点,所以推进到步骤518,因为L不等于1,所以继续推进到步骤526,将位于{u}之后的第二层设置为当前层。然后在步骤528,设置L=2,并取出单词“xiu”的第二个字母“i”。方法返回步骤510,将字母“i”与逆拼音树的当前层(此时,{u}在第二层中的子节点)进行匹配。由于“i”被包括在{u}的子节点{o,i}中,所以前进到步骤514。此时该匹配的节点{i}不是逆拼音树的叶子节点,因此前进到步骤518,此时L不等于1,因此继续前进到步骤526。在步骤526,将位于{i}之后的第三层设置为当前层,然后在步骤528设置L=1,取出“xiu”的第一个字母“x”。方法再次返回步骤510,将字母“x”与逆拼音树的当前层(此时,{i}在第三层中的子结点)进行匹配。由于“x”被包括在{i}的子节点{m,d,n,l,j,q,x}中,步骤推进到514,由于该匹配的节点是叶子节点,因此推进到步骤516,由于此时L=1,因此推进到步骤520,确定该单词“xiu”是有效的汉语拼音。换句话说,因为“xiu”与逆拼音树的一个分支<x,i,u>完全匹配,所以确定该单词“xiu”是有效的汉语拼音。
表1给出了利用逆拼音树的本实施例的算法性能与前述的传统方法(1)和方法(2)的比较结果。
表1:
测试场景 |
测试单词数量(总单词数/拼音 |
场景描述 |
方法(1)的使用时间 |
方法(2)的使用时间 |
利用逆拼音树的本方法的使用时间 |
本方法相对方法(1)的性能提升 |
本方法相对方法(2)的性能提升 |
场景1 |
3731833/0 |
只有英文单词 |
12.19ms |
0.83ms |
0.48ms |
2,440% |
72.92% |
场景2 |
2740442/192844 |
英文单词与汉语拼音混写,各汉语拼音出现频率相同 |
8.73ms |
0.64ms |
0.37ms |
2,259% |
72.97% |
场景3 |
7135228/7135228 |
只有汉语拼音,各汉语拼音出现频率相同 |
10.18ms |
1.37ms |
0.83ms |
1,127% |
65.06% |
从表1可以看出,利用逆拼音树的本实施例的方法与传统的方法相比,识别时间大大缩短,因而大幅度地提高了工作效率。
图6是根据本发明的一个实施例的处理混写语料的装置600的方框图。该装置600包括读取模块601,其读取待处理的混写语料;提取模块602,从所述读取模块接收所述待处理的混写语料,从所述待处理的混写语料中提取包括至少一个字母的单词;以及识别模块603,从所述提取模块接收所述单词,按照从所述单词的末尾向前的方向,以逐个字母判断的方式来识别所述单词是否是汉语拼音。
识别模块603可以通过判断单词的结尾字母是否是9个字母{a,o,e,i,u,v,r,n,g}之一,来迅速判断该单词是否为有效的汉语拼音。
识别模块603还可以建立如图2或图4所示的树形结构,或利用预先已经建立的树形结构。在此情况下,识别模块603可执行如图3或图5所示的方法,以便识别该单词是否为有效的汉语拼音。为了避免重复,在此不再详细描述识别模块603的具体操作。
本发明可以应用于多个方面。例如,当利用本发明的方法或装置快速识别出单词是有效的汉语拼音后,可以不将其标记为拼写错误,提高工作效率。在混写英文和汉语拼音的某些特定情况下,汉语拼音表示人的姓名或实体的名称。假如汉语拼音表示人的姓名,并且姓和名是分开的两个单词,则可以进一步根据中国人姓名的没有中名的特点,来正确地标记人的姓名。例如,将姓和名标示成不同的背景颜色。
应注意,本发明的实施例可以通过硬件、软件或硬件和软件的组合来实现,其实现方式不对本发明的范围构成限制。
本发明实施例中各个功能模块相互之间的连接关系不对本发明的范围构成限制,其中的一个或多个功能模块可以包括或连接到其它任意的功能模块或外部元件。
虽然上面已经结合附图示出并详细描述了本发明的一些实施例,本领域的技术人员应当理解,在不偏离本发明的原则和精神的情况下,可以对这些实施例做出变化和修改,而仍然落在所附的权利要求及其等价物的范围内。