专利名称:基于部首样式的草体汉字手写注释的检索的制作方法
技术领域:
本发明总的涉及笔迹处理。具体来说,本发明涉及一种草体汉字的改进的字迹(ink)匹配技术。字迹匹配技术关注以下的事实,即书面汉语中有大量的汉字,并且诸如用于匹配英语字母表中的字母的传统匹配技术不足以用以检索的目的。
字迹匹配基于下面的假设而起作用,即假设电子字迹可用作不需要识别就可进行匹配的第一类数据。换言之,用户可书写草体汉字,并且不必解释这些草体笔划表示什么字就可以在搜索或匹配操作中使用包括与草体笔划相关的时间和空间信息的电子字迹数据。
这里所述的改进方案取决于与动态编程匹配的改进相关的一种强有力的部首抽取技术。本发明对所有汉语以及使用汉字的其它语言具有重要价值。目前汉字在亚洲的很多地方都在普遍使用,包括中国、台湾、日本、朝鲜及其它地方。
汉字追溯其根源是人类最早的书写形式之一象形文字。可由一个或多个称作部首的子汉字组成的单个汉字表示一个词、想法或概念。与英语中用于拼写单词的字母表中的字母不同,汉字更简洁。每个汉字都以一个单个汉字表示一个完整的词、想法或概念。
尽管汉字表示一种简洁高效的交流形式,但它在自动化系统中会存在问题。把汉字输入计算机是一个瓶颈,一些人已经提出用数字化输入板代替键盘来解决这个难题。输入板允许用户把他或她的笔迹输入计算机,并且笔迹识别技术把用户的笔迹转换为随后可输入计算机的被识别的文本。在手写汉字识别的领域中,联机识别具有的优点在于它捕获书写输入点和笔划时的时间顺序。因此,利用书写笔划线时产生的时间数据,联机识别系统可区别下划线和上划线。
尽管手写汉字识别取得了很大进展,但问题的复杂性超出了最初的预期。这在很大程度上是由于在普通商业用词汇中需要大量的汉字。例如,在书面汉语中,日常使用汉字有三千到五千个。在书面日语中,汉字字符或“kanji(汉字)”的数量要少一些。尽管如此,一个人仍然需要理解几千个汉字才能阅读日文报纸。而且,手写汉字识别的另一个困难是笔体随书写人不同而变化很大,并且人们常常书写潦草。
近来,在诸如文件检索的手写注释搜索的某些应用中,字迹匹配技术呈现出广阔的发展前景。进一步的背景资料可见美国专利5,832,474的“用户手写注释的部分匹配搜索的文件搜索和检索系统”。在这些应用中,字迹匹配与传统汉字识别技术相比的优越之外在于它处理各种笔体,尤其是草体。最近,语义匹配技术得到应用,在这种技术中,汉字被分割成其组成部首并且这些部首随后被预搜索以把汉字匹配问题简化为更小的匹配问题之一。通过执行基于抽取的部首的部分匹配,随后的汉字匹配处理不必检查不包括匹配的部首的那些汉字。
尽管基于参考部首的语义匹配是一项非常有前景的技术,但该技术成功的关键在于系统从完整汉字中抽取部首的能力。部首抽取是一个非常复杂的问题。因为手写汉字的书写形式自由,没有任何网格线,所以汉字中部首的位置在每次书写该汉字时都会有很大的不同。另外,一个部首可能会无意中与汉字的其它部分相交,从而难以把该部首识别为汉字中的独立元素。而且,在快速书写时,用户可能会允许笔无意中连笔,这样会把汉字的一个部分的结束笔划与下一部分的开始笔划连在一起。尽管连笔并不是汉字的实际部分,但它们仍然呈现在笔划数据中,这仅仅是因为用户在书写汉字的各个部分时没有提起笔或记录针。
除了上述问题,另一个问题是动态编程。动态编程是一种模式匹配技术,它在确定一种模式(如部首中的一划)是否匹配另一种模式时估计插入成本(cost)、删除成本和替换成本。传统上,笔划插入成本和笔划删除成本正比于笔划长度来计算。笔划替换成本较复杂,这是因为它们涉及测量两个笔划之间的形状相似性。通过使用传统的技术,动态编程用于获得考虑进行替换的两个笔划之间的点对的一个集合。替换成本被测量为两个点一对的欧几里德距离之和。在计算替换成本之前,每个笔划被临时移位以使该笔划的边框的左上角与原点(0,0)重叠。
传统的基于欧几里德的方法用于计算替换成本,它有两个缺点。首先,动态编程过程耗时。其次,使用欧几里德距离的技术所引入的错误是累加的。在参考笔划和测试笔划均被移位至它们的左上角与原点重叠之后,逐点的距离分析被执行。如果各个笔划的基本形状相对一致,则欧几里德距离技术可给出一个有用的品质因数。但是,如果各个笔划除了它们的左上角之外在形状上基本相同,则欧几里德距离技术无效。通过对齐两个笔划的左上角,会发现这两个笔划的剩余部分间隔为一个大的欧几里德距离,从而产生不正确的估计,即两个笔划在形状上彼此不相似。
本发明提供了一种大大改进的部首抽取技术,它将显著提高语义匹配的性能。正如在此将要更充分讨论的,该技术采用一种汉字标准化处理过程和一种改进的笔划分割处理过程,它将消除一些可能会混淆动态编程过程的有问题的产物(artifacts)。
该技术还采用了一种新的动态编程方法,在该方法中,通过使用正切矢量、中心关系估计以及起始点-结束点估计可以更健壮地估计替换成本。该动态编程过程还使用部首分类数据结构,该结构标记开始和结束部首以便于更好地匹配。另外,该动态编程过程还采用了一种技术,以便于通过使用参考部首的长度来标准化动态编程成本,并且这些标准化的成本随后根据动态编程成本而被交互调节以消除位置的不相似性。
改进的动态编程过程的结果是一个或n个最佳抽取部首的输出。最佳抽取部首(或n个最佳抽取部首)随即用于减少随后整字匹配的词汇量。尽管动态编程的改进对部首抽取特别有帮助,但它们也用于随后的整字抽取或匹配操作。
参考下面的说明书和附图可以更全面地理解本发明的目的和优点。
图1是用于理解部首识别处理的特定方案的机器印刷及手写形式的典型汉字;图2是提供汉字手写注释的语义字迹匹配系统概貌的框图;图3和4包括表示优选实施例的部首抽取处理的流程图;图5是表示传统形状相似性估计的缺点之一的部首匹配图;图6是表示优选实施例的正切矢量技术的部首匹配图;图7是表示中心关系技术的部首匹配图;以及图8是表示起始点-结束点估计的部首匹配图。
图9是目前优选的部首集的图示。
图1示出了机器印刷或排字形式10以及手写形式12的典型汉字。该特定汉字的意思是“猫”,并且由至少一个部首构成,如部首14(出现在该汉字的最左边)。该部首本身具有含义,即“动物”。因此,表示“猫”的汉字包括嵌入其中的表示“动物”的另一基本汉字。这个例子当然只是为了说明,因为在书面汉字中至少有两百个日用的部首。
通常,在汉语和其它使用汉字的语言中,部首是这些汉字的小的基本意义单元。一个或多个部首可组成一个汉字。如果适当地书写,每个部首应当仅仅处于汉字块的一个已知子区域中。正如这里所使用的,汉字块指的是在印刷页上汉字占用的近似矩形区域。可在汉字周围画出矩形边框以标出汉字块的界线。因此,可把边框看作是通常为矩形的弹性形状,它可伸缩以紧密的配合在汉字的周围,仅仅接触汉字的末端。部首位于汉字块内的预定位置。
例如,在图1所示的典型汉字中,适当书写的部首14占用了该汉字块的最左部分区域,基本上延伸到该汉字的整个高度。在其它汉字中,组成部首可占用其它位置。有时,这些位置占用了延伸到汉字块的整个高度(或整个宽度)的子区域。其它一些部首则占用小于汉字块的整个高度或宽度的区域。
汉字匹配处理的概述基本汉字匹配处理可参考图2示出。图2所示的系统表示一种采用本发明方法和设备的系统的典型实施例。其它系统也是可能的。汉字匹配处理最好针对记录时间及空间信息的称作“字迹”数据的动态记录数据来执行。在数字化输入板16上由记录针18画出的笔划被记录为一个点序列(例如,在输入板的x-y坐标空间中的点)以及某种时间戳记,通过它可以推知笔划方向。该笔划在一种数据结构中表示,该数据结构可用于表示笔划方向并用于区别笔划的起始点和结束点。由当前优选实施例使用的字迹数据类型保留有时间(时间)信息以及位置(x,y点)信息。
任何手写汉字处理系统的基本目的都是把手写汉字(用户提供)与以前存储的通过系统训练(training)获得的信息相匹配。用户输入诸如图1所示汉字12的手写汉字并且系统把该汉字与以前存储的数据匹配。利用这种方法,以前写入的手写注释可以直接检索。如果可以得到用以把存储数据与排版汉字相对应的检查表,则用户的手写输入可转换为排版汉字以进行其它处理或显示。
继续参考图2,用户的手写输入作为询问字迹存储在询问字迹数据结构中。以前获得的数据作为数据库字迹存储在数据存储器22中。通过让用户训练系统关于他或她的笔迹的其它样本可增加数据存储器22的数据量。训练涉及让用户输入预先知道其意思的汉字的样本。因而,用户的训练输入可用于构建字典中每个汉字的带标号数据。称作弹性匹配的处理则可用于比较数据结构20中的询问字迹和数据库结构22中的数据库字迹,以在数据库字迹数据存储器中选择哪个汉字最匹配询问字迹数据存储器中的汉字。
执行弹性匹配是一个耗时的处理,特别是在数据库字迹数据存储器包括大量词汇时,通常它也确实如此。我们记得,汉语包括日用的三千到五千个汉字。
为了加速传统的弹性匹配过程,图2所示的部首抽取技术得到应用。在图2中,传统的弹性匹配操作在块24中执行。但是,在执行此操作之前,通过部首抽取过程可以明显简化匹配操作或搜索。
部首抽取过程涉及首先分割询问字迹以及数据库字迹,以把每个汉字分割为其组成部分。分割块30和32因为此目的而提供。在图1示出的典型汉字中,通过识别组成部分之间的白色空间或者通过连接部分的分析,部首14可被分割或与该汉字的其余部分分开。但是,正如在下面的优选实施例的描述中将更充分研究的,手写汉字很少如此整齐地书写。很多时候,一个部首会接触或重叠汉字的其余部分;或者用户快速地在组成部分之间写下连笔。本发明提供了几种技术,它们通过改进将在下面详细讨论的部首分割和抽取处理来关注这些问题。
源自处理26和28的分割的汉字均在相应的弹性匹配块30和32中被测试以确定任何一个分割部分是否表示已知的部首。为此,在34提供参考部首的数据库。在一个典型实施例中,大约有两百个参考部首。这些部首是从汉字字典最常出现的部首集中挑选出来的。参考部首可通过训练获得,例如让用户书写作为随后要标号的独立部分的部首;或者从整字训练数据中人工抽取良好的部首样本。无论是哪种方法,参考部首均提供用于这些部首的字迹数据的良好整齐的样本,通过它们可以比较用户询问字迹和数据库字迹。
源自模块30和32的抽取部首随后在部首代码估算块36中比较。块36根据部首代码的匹配仅仅返回最匹配的候选项。最匹配的部首代码则提供给另一个部首代码估算块38,块38从数据库字迹数据存储器22中挑选那些具有最匹配部首候选项的最匹配汉字候选项,所选汉字随后提供给弹性匹配块24以便与来自数据存储器20的询问字迹相比较。
利用这种方式,用户的输入询问(存储在询问字迹数据存储器20中)仅仅与来自数据库字迹数据存储器22的所选汉字进行弹性匹配。通过首先对部首执行弹性匹配(块30和32),整个匹配处理可以非常快地执行。通过返回最匹配的三十个(两百个当中的三十个)汉字候选项,可以减少85%的计算时间。
考虑到语义(部首抽取)模型,下面将详细描述优选实施例的部首抽取和改进的动态编程技术。这些技术可在块30和32执行部首抽取时采用并且改进的动态编程技术可在执行弹性匹配(如图2的块30、32和24)时使用。尽管图2示出的部首抽取框架是目前优选的,但应当理解,本发明的技术也可在其它应用中使用。
改进的部首抽取参考图3和4,现在将描述目前优选的部首抽取技术。输入笔划数据40由用户作为询问字迹提供,或者来自一个数据库。在动态编程匹配操作之前对输入数据执行汉字标准化和笔划分割处理。在图3中,汉字标准化开始于步骤42;笔划分割开始于步骤50并且动态编程开始于步骤60。动态编程步骤的细节将在图4中示出。
汉字标准化当一个人在没有标线的纸上写字时,他或她的笔迹的尺寸可能每次都不同。因此,当一个汉字与以前存储的汉字相比较时,或者当一个部首与以前存储的部首比较时,相应笔划的长度可能不同。
为了解决这个问题,通过首先定义围绕汉字的边框并接着把边框尺寸调整为标准化的或标准尺寸,优选实施例执行汉字标准化。在图3中,边框45画在汉字12的周围并在随后按比例缩放到标准尺寸的边框46。在图示的例子中,最初书写的汉字大于标准化的汉字。当然,在一些情况下,最初书写的汉字会小于标准汉字,在此情况下,边框的尺寸将按比例放大。
如步骤47所示,细成汉字的像素或点随后被移位,如48所示,这样最初书写的汉字在尺寸上被缩小或放大至充满标准化的边框46。
在目前优选的实施例中,使用的是线性标准化。每个汉字的边框被标准化为标准汉字尺寸并且汉字中的像素被相应移动。假设(x1,y1),(x2,y2)分别是汉字边框的左上角和右下角。对于该汉字内的一点来说,标准化后的新坐标将是x`=0+(x-x1)fxy`=0+(y-y1)fy式中的fx和fy分别是在x和y方向上的比例因子。fx和fy被定义为fx=Sx/(x2-x1)fy=Sy/(y2-y1)式中的Sx是我们所选的标准汉字的宽度,而Sy是高度。目前,Sx和Sy分别选择为40和50。在标准化之后,每个汉字边框的左上角移动到原点(0,0)。
在优选实施例中,对参考部首34(图2)执行类似的标准化操作。当标准化一个参考部首时,我们标准化包含该部首的整个汉字。在训练处理中,参考部首并不被直接训练。为了保留每个参考部首的部首位置信息,我们选择一个包含该部首的字并且让用户写下该汉字。之后,参考部首可从其相应的汉字中交互抽取。我们在使用动态编程之前标准化参考(训练)汉字的尺寸。
笔划分割在通过汉字标准化进行笔划数据的标准化之后,如步骤52所示,首先通过基于落笔和抬笔信息组合笔划来执行笔划分割。当捕获输入笔划数据40时可获得落笔和抬笔信息以及输入点的时间顺序。输入点组合成原始笔划,其开始于一个落笔点且结束于一个抬笔点。如步骤54所示,系统则把这些原始笔划进一步分割成更小的笔划。这个进一步的分割是通过在y值的轨迹最小和最大值以及x值的轨迹最小值处断开原始笔划来执行的。我们称这些断点为“内部断点”,以把它们区别于原始笔划的落笔和抬笔断点。
有时数学最小或最大点对于人眼来说并不非常显眼。但它们仍然在数据中。我们称这些点为“模糊”断点。目前优选的实施例在步骤56消除模糊断点。模糊断点的消除处理根据下面的步骤定义模糊断点假设pn-i,……,pn-l,Pn,pn+l,…pn+j是依照其时间顺序的连续输入点。设pn-l,pn和pn+j是断点,并且Pn由于其y值的轨迹最小值而为内部断点。为了检查pn是否“模糊”,我们定义dy1为“试验笔划pn-l,…pn”的两个连续点的y值的平均差,并且dy2为试验笔划pn,…pn+j”的平均差,如下所示dy1=1iΣk=n-in-1((pk)y-(pk+1)y)=[(pn-i)y-(pn)y]/i++]]>dy2=1jΣk=n+1n+j((pk-1)y-(pk)y)=[(pn)y-(pn+j)y]/j]]>为了使内部断点明显,我们优选dy1和dy2的较大的绝对值。由于dy1和dy2通常方向相反,所以采用下面的规则如果|dy1-dy2|≤T,则Pn是模糊内部断点,因而将其删除。
T是一个阈值,目前设置为0.5。消除模糊的x-最小和y-最大断点的过程是相似的。
在消除模糊断点之后,在步骤58识别和消除任何连笔。连笔在手写汉字中非常普遍。连笔就是那些不是印刷体手写汉字的标准汉字的一部分的笔划。在草体笔迹中,有时候两个分开的笔划会由另外一个笔划即连笔连接。
通过检验笔划数据来估计笔划方向可以检测连笔。如果笔划是从右下到左上,则很可能这是连笔。
实际上,连笔并不总是出现在手写汉字中。额外的连笔更可能受到形成汉字时的记录针速度和方向的影响。例如,一个用户通常可能写的是没有连笔的整齐的印制体汉字。但是,当该用户写字很快时则可能出现连笔。
目前优选的笔划消除技术使用下面的规则来检测和消除连笔如果ey-sy≤1并且ex-sx≤1,则这是连笔。
在上面的公式中,(sx,sy)和(ex,ey)分别是分割笔划的起始点和结束点并且原点(0,0)位于数字化输入板或捕获设备的左上角。
一旦完成上述的笔划分割处理,则如步骤60所示,现在可执行动态编程。优选实施例的动态编程在图4中详细示出。
动态编程动态编程的目的是匹配两个部分,如参考部首和所述汉字。匹配处理在笔划级执行;因此,其结果就是两个笔迹之间的最佳笔划关系或匹配。与此匹配相关的成本被计算。由于动态编程在笔划级执行,所以在优选实施例中首先计算笔划操作(插入笔划、删除笔划或替换笔划)。
如步骤62所示,优选实施例使用点级数据计算笔划操作的成本。它与传统方法的不同之处在于笔划插入成本和删除成本在正比于笔划长度的方向上计算,并且替换成本根据形状相似性进行计算。比较起来,优选实施例把每个笔划看作是一个连续的点序列,在该序列中,在点级执行动态编程以便完全匹配两个点序列。该点级计算包括基本操作插入64、删除66和替换68。优选实施例中的替换成本估计使用若干改进的技术,包括正切矢量方法70、中心关系估计72和起始点-结束点估计74。这些将在下面讨论。但是,在进行这些改进技术的讨论之前,参考图5将描述传统替换成本测量的缺点之一。
在传统的替换成本测量中,两个笔划,如a的笔划s1和b的笔划s2之间形状相似。首先通过在c临时对齐两个笔划以使它们的左上角(或它们各自边框的左上角)重叠来执行估计。如c所示,虽然两个笔划除了最左上角的部分外基本相似,但通过使两个笔划在它们的左上角对齐,两个笔划的其余部分仍然间隔较大的欧几里德距离。这会导致累积错误,这样,替换成本所估计的值高于整个形状本来所确定的值。
图6示出了如何根据本发明的优选实施例估计替换成本。参考图6,我们定义两个笔划的相应点如下设s1是具有l1个点的笔划,并且s2是具有l2个点的笔划。Pi是s1上的第i个点,Pi在s2上的相应点是Pi,其中j=il1l2]]>接着我们计算两个相应点Pi和Pj的替换,如下所示POINT_SUB_COST(Pi|S1,S2)=1-cosθ(vi,vj)式中vi是在点Pi的正切矢量,并且vj是在点Pj的正切矢量,θ(vi,vj)是两个矢量之间的角度,并且θ∈
。
cosθ(vi,vj)可计算为cosθ(vi,yj)=(x2-x1)×(x4-x3)+(y2-y1)×(y4-y3)(x1-x2)2+(y1-y2)2×(x3-x4)2+(y3-y4)2]]>式中(x1,y1)和(x2,y2)分别是vi的起始点和结束点;(x3,y3)和(x4,y4)分别是vj的起始点和结束点。
可以看出,θ(vi,vj)越大,POINT_SUB_COST(vi,vj)的值就越大。两个相应点的替换不影响它们的欧几里德距离,但影响在这些相应点的两个笔划之间的“瞬时”形状的差。
通过对沿着笔划s1的所有点的点替换成本求和,我们可得到笔划s1和s2之间的替换成本STROKE_SUB_COST(s1,s2)=Σi=1l1POINT_SUB_COST(pi|s1,s2)]]>式中的l1是笔划s1的长度。让我们通过进一步的标准化来改进这个笔划替换成本STROKE_SUB_COST(s1,s2)=max(l2l1,l1l2)×(l2+l1)/2l1Σi=1l1POINT_SUB_COST(Pi|s1,s2)]]>式中的 项反映了两个笔划的平均长度,并且 反映了笔划尺寸的差值,因此,笔划尺寸的差值越大,替换成本就越大。
在标准化之后,我们近似具有STROKE_SUB_COST(s1,s2)≈STROKE_SUB-COST(s2,s1)新的笔划替换成本可克服几个缺点。首先,通过找到相应的点,我们可以在计算点替换成本时去掉动态编程过程。其次,如图6所示,使用正切矢量计算替换成本不具有累积效应。
以上概述的估计替换成本的正切矢量法允许不考虑笔划的结构信息来匹配笔划。为了进一步提高性能,笔划的结构关系可通过笔划的中心关系以及它们的起始点和结束点的估计进行估计。
当用户形成一个汉字时,汉字中的笔划以结构关系排列(即,笔划之间的空间关系)。为了估计结构关系,笔划的重心被计算并且用于表示笔划的位置。如图7所示,结构信息可通过两个笔划中心之间的空间关系来反映。参考图7,前两个匹配的笔划是ri(参考部首的第i划)和ci(汉字的第j划)。系统随后将匹配rm和cn。
设pi,pj,pm,pn分别是ri,cj,rm和cn的重心。矢量 可反映两个笔划ri和rm之间的空间关系。类似地,矢量 可反映cj和cn之间的空间关系。当我们试图匹配rm和cn时,不仅rm和cn在形状上要相似,而且它们相对于前面匹配的笔划(即,分别是ri和cj)的空间关系也应当相似。换言之,矢量 和 之间的角度应当小。
我们的准则是
如果 则rm和cn应当不匹配。θT是一个阈值,目前设置为π/2。在动态编程中,如果两个被检验笔划确定为不匹配,则我们把替换成本设置为非常高的数,从而使替换不能发生。否则,我们使用上述方法计算笔划替换成本。
一个例外是,如果pi=pm或pj=pn,则由此产生的零长度矢量的方向没有意义。因此,在这种情况下,上述准则将被忽略,并且将计算替换成本。
优选实施例还在计算替换成本时估计起始点和结束点。通过首先查看匹配或替换的上两个笔划,该系统检查两个笔划可能的匹配。一个笔划的起始点与下一个笔划的结束点用于定义建立一个角度的矢量,通过该角度可比较要进行匹配的笔划。该过程可参考图8进行理解。
如图8所示,设上两个匹配的笔划是ri(部首的第i划)和ci(汉字的第j划)。要检验的两划是rm和cn。设ei和ei分别是笔划ri和ci的结束点。设sm和sn分别为笔划rm和cn的起始点。矢量 反映两个笔划ri和rm之间的空间关系。类似地,矢量 反映笔划ci和cn之间的空间关系。当我们试图使笔划rm匹配cn时,不仅rm和cn在形状上应当相似,而且它们相对于前面匹配的笔划(即分别是ri和ci)的空间关系也应相似。换言之,矢量 和 之间的角度应当小。
我们的准则是如果 则rm和cn不匹配。θT是一个阈值,目前设置为π/2。与中点矢量类似,在动态编程中,如果两个正在检测的笔划被确定为不匹配,则我们把替换成本设置为非常高的数,从而使替换不能发生。否则,我们使用上述方法计算笔划替换成本。
而且,有时当两个连续的笔划连在—起时,第—划的结束点正好是第二划的起始点,即ei=sm或ej=sn。在这种情况下,将不考虑上述准则,并将计算替换成本。
在计算了上述插入成本、删除成本和替换成本之后,在76执行动态编程匹配。动态编程匹配在目前优选的实施例中通过把部首分成两个主要类别的部首分类过程78得到改进。在第一类中,部首开始一个字的前几划。在第二类中,部首结束该汉字的后几划。
一个部首所属的类别通常是预知的。这种类别信息在目前优选的动态编程匹配处理中得到加强。当一个参考部首匹配一个汉字时,如果该汉字中匹配的笔划不在该部首期望的类别中,则要增加更多的成本。通过下面的动态编程过程可解释目前优选的实施方案。
以前,动态编程用于匹配参考部首R=r1r2…rm和字C=c1c2…cm的一个子序列。在此处理中,可根据每个操作成本而发生三个操作插入、删除或替换。最终的目的是寻找一个具有最小总成本的最佳操作序列。例如,设r=r1r2r3r4是由四划组成的参考部首,并且C=c1c2c3…c8是由八划组成的匹配汉字。为了把R变换成C的一个子序列,即c`=c=c3c4c5c6,如表1所示,一种可能的操作顺序是插入c1,插入c2,用c3替换r1,用c4替换r2,插入c5,用c6替换r3并删除r4。
表1用于把第一类部首部分匹配一个汉字的一个子序列的动态编程过程I插入;S替换;D删除
在最初的动态编程过程中,我们允许匹配在笔划序列C中的任意位置开始并在任意位置结束。在上面的例子中,实际匹配从c3替换r1开始且结束于删除r4。因此,总成本就是c3替换r1,c4替换r2,插入c5,c6替换r3和删除r4之和,且没有考虑插入c1和插入c2的成本。
当考虑到部首类别时,我们试图把惩罚(penalty)加入与汉字的前几划不匹配的第一类别的笔划中或与汉字的后几划不匹配的第二类别的笔划中。为此,我们改进动态编程过程,以便对第一类部首来说允许匹配从匹配字的第一划开始并在任意位置结束;并且对于第二类部首来说允许匹配从一个字的任意位置开始并在最后一笔结束。在表1的情况中,总成本将是插入c1,插入c2,c3替换r1,c4替换r2,插入c5,c6替换r3和删除r4之和。可以看出,匹配由插入c1和插入c2的成本惩罚,这是因为替换没有开始于C的第一划。如上所述,对于第一类部首来说,动态编程可在一个字的任意位置结束。
类似地,对于属于第二类别的部首R来说,希望匹配在C的最后一划cm结束的C的一个子序列。如表2所示,一种可能的操作顺序是插入c1,插入c2,c3替换r1,r4替换r2,插入c5,c6替换r3,删除r4、插入c7和插入c8。
表2用于使第二类部首匹配一个字的动态编程过程的图示
在这种情况下,前两个插入操作(插入c1和插入c2)应当零成本执行,这是因为匹配可以在字的任意位置开始。但是,后两个插入操作(插入c7和插入c8)的成本不应忽略。
动态编程匹配步骤76产生用于使一个参考部首匹配一个字的一部分的总动态编程成本。该总成本是所有操作成本(插入、删除和替换)之和。因此,对于每个字来说,当所有的参考部首都尝试与之匹配时,笔划较少的部首往往得出较小的动态编程成本。这可能会导致错误的结果。为了解决这个问题,如步骤80所示,目前优选的实施例使用参考部首82的长度来标准化动态编程的成本。标准化动态编程的成本将消除笔划较少的部首所固有的优越性,从而产生一种更健壮的部首抽取处理过程。
两个部首(例如,参考部首和检验部首)间的位置相似性是可在部首抽取方案中利用的某种航向信息。如步骤84所示,优选实施例使用位置相似性作为筛选部首的基础,从而去除那些位置不相似的部首。对于每个字来说,该去除处理涉及到把基于动态编程的弹性匹配应用到所有参考部首。该过程随后计算参考部首与该字间的匹配笔划的位置相似性。在去除具有负位置相似性的部首之后,剩余部首的动态编程成本被分级并且具有最低成本的两个最匹配部首被选为该汉字的抽取部首。如图所示,对所有的参考部首均重复分级步骤86和不相似去除步骤84。因此,这个过程的最终产物表示88所示的抽取的一个或多个部首。
部首代码估算在从每个字中抽取部首之后,字符串就变成了部首代码即部首ID的一个序列。当两个字符串相比较时,通过动态编程处理而在部首代码级上进行匹配。这既应用到笔迹匹配笔迹(即手写数据库和手写询问)又应用到笔迹匹配打字体文本(即手写数据库和打字体文本询问)。对于打字体询问来说,可立即转换为部首代码并且与数据库串的部首代码相比较。
在用于匹配两个字符串的动态编程中,三个基本操作被定义字插入、字删除和字替换,它们中的每一个都与一种操作成本相关联。其目的就是把询问串的部首代码转换成数据串的部首代码。利用动态编程处理,系统获得一个最佳匹配序列,该序列可实现最小的编排距离(最小总操作成本)。
字插入和删除成本被指定为常数。字替换成本反映了两个字(即四个部首代码,每个字两个)的差值。字替换被定义为一个字中的部首代码在另一个字中没有被找到的出现次数。如果一个字没有抽取的部首代码,则它由两个空部首代码(ID为零的代码)表示并且替换代码以相同的方式计算。
如果需要,空部首代码可作如下修改。每个字具有两个抽取的部首并且因而每个字可由对应于部首ID的两个数表示。如果没有抽取部首,则为空部首代码并且部首ID为零。在一个实施例中,对于失配部首代码或未抽取部首代码来说,字替换以相同的方式计算。但是,如果需要的话,与失配部首代码相比,一种更严厉的惩罚可应用了未抽取的部首代码。
而且,从前面的算法中可以看出,每个抽取的部首被同等对待。特别是,当两个部首代码相同时,它们对替换成本没有影响。尽管本方法鼓励部首代码中的匹配,但它对具有较小部首抽取成本,即具有更可靠的抽取部首的部首代码中的匹配没有益处。当在部首抽取处理中获得每个部首代码时,动态编程成本将与之相关联。新方法提出把前个部首的此动态编程成本附加到替换成本计算中。如果均具有高置信度(部首抽取的低成本)的两个部首代码相匹配,则它们的替换成本应当小于具有低置信度的两个部首代码的替换成本。通过组合方法,我们把我们的新字替换成本描述如下。
让我们比较两个字C1=a1a2和C2=b1b2,其中a1a2是来自C1的抽取部首,并且b1b2是来自C2的抽取部首。而且dpCOST_b1、dpCOST_b2、dpCOST_a1、dpCOST_a2是在笔划级上的动态编程成本,即分别是b1、b2、a1和a2的部首抽取成本。这两个字的抽取成本将是SUB_COST(b1,b2;a1,a2)=COST(b1;a1,a2)+COST(b2;a1,a2)式中COST(b1;a1,a2)是b1的替换成本,它等于 并且COST(b2;a1,a2)是b2的替换成本 式中的csub_max是一个指定的常数,它表示当(a1,a2)和(b1,b2)完全不同时的最差情况下的替换成本。通过实验可知,对于任何笔划x来说,dpCOST_x都小于csub_max。
无论何时在部首代码中存在匹配(例如,b1=a2),COST(b1;a1,a2)和COST(b2;a1,a2)都总是小于csub_max/2,并且最终的替换成本将小于csub_max。
参考部首在构建一个工作实施例时,应当选择参考部首,目的就是为了提高整体的语义匹配处理。参考部首的选择直接影响部首抽取处理。通常,正确抽取的部首越多,最终的匹配率越高。提高正确抽取的部首数的一种方法是增加参考部首的数目。因此,更多的部首被抽取。但是,当参考部首数据库增加时,需要花更多的时间来训练参考部首并且花更多的时间来抽取参考部首。因而,选择正确的部首数就变成了处理时间与匹配率之间的折衷。
部首选择的另一个考虑涉及部首间的相似性。把相似的部首一起放在训练集中会引起混乱。另外,一些部首更难以抽取,仅仅是因为它们有多种不同的写法。可能引起混乱和能够以很多种不同方式书写的部首最好从用于部首抽取的参考部首集中删除。图9示出了用于实施汉字识别系统的目前优选的部首。所示的前45个参考部首包括在两千个左右的常用汉字中最频繁使用的部首。由于这些字在汉字手写中并不是以相同的频率出现,所以我们在这个部首集中补充了另外十二个部首,它们是从在数据库串中最频繁使用的部首中挑选出来的。在设计一个工作实施例时,这些参考部首可用于构建最初的实施例。之后,正如系统所使用的,根据使用频率的统计数据,其它一些部首被标识并加到参考部首数据集中。
根据前面的描述可以理解,此处所述的部首抽取技术可单独使用或彼此组合使用,以便于提高整个语义匹配处理。尽管本发明是以其目前优选的形式描述的,但应当理解,在不背离所附权利要求所述的本发明精神的情况下可以进行某些改进。
权利要求
1.一种用于检索草体手写注释的方法,包括存储注释的词汇(lexicon);存储对应于所述注释的语义部分的多个部首;输入要检索的手写注释;通过首先标准化所述输入手写注释,接着识别所述手写注释中用以表示抽取部首的部分,从而从所述输入手写注释中抽取至少一个部首;执行所述抽取部首和所述存储的多个部首之间的估算操作以识别至少一个候选部首;使用所述候选部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
2.根据权利要求1的方法,其中所述标准化步骤通过下面的步骤执行,即把所述手写注释表示为多个点并按比例缩放所述点之间的间隔,以使输入手写注释按比例缩放至一个预定尺寸。
3.根据权利要求1的方法,其中所述抽取步骤通过下面的步骤执行,即根据与所述笔划相关的抬笔/落笔信息识别所述输入手写注释中的笔划并在随后组织所述笔划。
4.根据权利要求1的方法,其中所述抽取步骤通过下面的步骤执行,即根据所述笔划中的轨迹最大和最小点识别所述输入手写注释中的笔划并在随后组织所述笔划。
5.根据权利要求4的方法还包括有选择地消除所选轨迹最大和最小点。
6.根据权利要求1的方法,其中所述抽取步骤通过识别所述输入手写注释中的连笔并消除所述连笔来执行。
7.根据权利要求1的方法,其中所述估算操作通过下面的步骤执行,即把所述抽取部首以及所述存储的多个部首表示为连续点系列并且对所述各个连续点系列执行动态编程匹配。
8.根据权利要求1的方法,其中所述估算操作包括一种动态编程匹配操作,该动态编程匹配操作得出至少一个表示匹配接近程度的编程成本量度。
9.根据权利要求8的方法还包括确定参考部首的长度并且根据所述参考部首的长度标准化所述编程成本量度。
10.根据权利要求1的方法,其中所述估算操作包括一种动态编程匹配操作,该动态编程匹配操作包括根据起始点和结束点把部首分类的步骤。
11.根据权利要求1的方法,其中所述估算操作包括一种动态编程匹配操作,该动态编程匹配操作包括通过比较与所述抽取部首和所述存储的多个部首相关的正切矢量计算替换成本的步骤。
12.根据权利要求1的方法,其中所述估算操作包括一种动态编程匹配操作,该动态编程匹配操作包括估计所述抽取部首的中心和所述存储的多个部首的中心之间的关系的步骤。
13.根据权利要求1的方法,其中所述估算操作包括一种动态编程匹配操作,该动态编程匹配操作包括估计所述抽取部首和所述存储的多个部首的起始点和结束点的步骤。
14.根据权利要求1的方法,其中所述估计操作包括比较所述抽取部首内的笔划与所述多个部首内的笔划并删除具有负位置相似性的所述候选部首的步骤。
15.根据权利要求1的方法,其中所述估计操作产生多个抽取的部首候选项并且包括根据动态编程成本把所述候选项分级的步骤。
16.一种用于检索草体手写注释的方法,包括存储注释的词汇;存储对应于所述注释的语义部分的多个部首;输入要检索的手写注释;通过使用笔划起始点和结束点信息来识别所述手写注释内的各个笔划并在随后根据轨迹最大和最小点进一步分割所述各个笔划并且使用所述分割的各个笔划来表示所述抽取的部首,从而从所述输入手写注释中抽取至少一个部首;执行所述抽取部首和所述存储的多个部首之间的估算操作以选择至少一个候选部首;使用所述候选部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
17.根据权利要求16的方法还包括有选择地消除所选轨迹最大和最小点。
18.根据权利要求16的方法,其中所述抽取步骤通过识别所述输入手写注释中的连笔并消除所述连笔来执行。
19.根据权利要求16的方法,其中所述估算操作通过下面的步骤执行,即把所述抽取部首以及所述存储的多个部首表示为连续点系列并且对所述各个连续点系列执行动态编程匹配。
20.根据权利要求16的方法,其中所述估算操作是一种动态编程匹配操作,该动态编程匹配操作得出至少一个表示匹配接近程度的编程成本量度。
21.根据权利要求20的方法还包括确定参考部首的长度并且根据所述参考部首的长度标准化所述编程成本量度。
22.根据权利要求16的方法,其中所述估算操作是一种动态编程匹配操作,该动态编程匹配操作包括根据起始点和结束点把部首分类的步骤。
23.根据权利要求16的方法,其中所述估算操作是一种动态编程匹配操作,该动态编程匹配操作包括通过比较与所述抽取部首和所述存储的多个部首相关的正切矢量计算替换成本的步骤。
24.根据权利要求16的方法,其中所述估算操作是一种动态编程匹配操作,该动态编程匹配操作包括估计所述抽取部首的中心和所述存储的多个部首的中心之间的关系的步骤。
25.根据权利要求16的方法,其中所述估算操作是一种动态编程匹配操作,该动态编程匹配操作包括估计所述抽取部首和所述存储的多个部首的起始点和结束点的步骤。
26.根据权利要求16的方法,其中所述估计操作包括比较所述抽取部首内的笔划与所述多个部首内的笔划并删除具有负位置相似性的所述候选部首的步骤。
27.根据权利要求16的方法,其中所述估计操作产生多个抽取的部首候选项并且包括根据动态编程成本把所述候选项分级的步骤。
28.一种用于从草体手写注释中提取部首的方法包括输入要检索的手写注释;和通过首先标准化所述输入手写注释,接着识别所述手写注释中用以表示抽取的部首的部分,从而从所述输入手写注释中抽取至少一个部首;
29.根据权利要求28的方法,其中所述标准化步骤通过下面的步骤执行,即把所述手写注释表示为多个点并按比例缩放所述点之间的间隔,以使输入手写注释按比例缩放至一个预定尺寸。
30.根据权利要求28的方法,其中所述抽取步骤通过下面的步骤执行,即根据与所述笔划相关的抬笔/落笔信息识别所述输入手写注释中的笔划并在随后组织所述笔划。
31.根据权利要求28的方法,其中所述抽取步骤通过下面的步骤执行,即根据所述笔划中的轨迹最大和最小点识别所述输入手写注释中的笔划并在随后组织所述笔划。
32.根据权利要求31的方法还包括有选择地消除所选轨迹最大和最小点。
33.根据权利要求28的方法,其中所述抽取步骤通过识别所述输入手写注释中的连笔并消除所述连笔来执行。
34.一种用于从草体手写注释中提取部首的方法包括输入要检索的手写注释;和通过使用笔划起始点和结束点信息来识别所述手写注释内的各个笔划并在随后根据轨迹最大和最小点进一步分割所述各个笔划并且使用所述分割的各个笔划来表示所述抽取的部首,从而从所述输入手写注释中抽取至少一个部首。
35.根据权利要求34的方法还包括有选择地消除所选轨迹最大和最小点。
36.根据权利要求34的方法,其中所述抽取步骤通过识别所述输入手写注释中的连笔并消除所述连笔来执行。
37.在一种用于匹配手写注释的动态编程过程中,一种用于确定笔划替换成本的改进方法包括识别多个要比较的笔划;把正切矢量分配给每个进行比较的笔划;并且把替换成本建立在所述矢量之间的关系上。
38.在一种用于匹配手写注释的动态编程过程中,一种用于确定笔划替换成本的改进方法包括识别多个要比较的笔划;确定与每个进行比较的笔划相关的重心;和把替换成本建立在所述重心之间的关系上。
39.在一种用于匹配手写注释的动态编程过程中,一种用于确定笔划替换成本的改进方法包括识别多个要比较的笔划;执行匹配操作以识别一对笔划;使用所述多个笔划的起始点和结束点的关系计算替换成本。
40.根据权利要求34的一种用于检索草体手写注释的方法还包括接收来自用户的输入注释;存储注释的词汇;和使用所述抽取的部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
41.一种用于检索草体手写注释的方法,包括存储注释的词汇;存储对应于所述注释的语义部分的多个部首;输入要检索的手写注释;从所述输入手写注释中抽取至少一个部首;执行所述抽取部首和所述存储的多个部首之间的估算操作以识别至少一个候选部首;使用所述候选部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
42.一种用于检索草体手写注释的方法,包括存储注释的词汇;存储对应于所述注释的语义部分的多个部首;输入要检索的手写注释;通过识别所述手写注释内的各个笔划,把正切矢量分配给所述各个笔划中的每一笔划和所述存储的多个部首并且使用所述正切矢量之间的关系计算替换成本并且执行所述各个笔划和所述存储的多个部首之间的动态编程,使用所述分配的正切矢量计算替换成本,从而从所述输入手写注释中抽取至少一个部首;执行所述抽取部首和所述存储的多个部首之间的估算操作以选择至少一个候选部首;使用所述候选部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
43.根据权利要求42的方法,其中所述分配正切矢量包括的步骤是至少找到一对点,在这一对点中,所述一对点的第一点来自所述单个笔划并且所述一对点的第二点来自所述存储的多个部首;在所述一对点的所述第一点计算所述单个笔划的第一正切矢量并且在所述一对点的所述第二点计算所述存储的多个部首的第二正切矢量。
44.根据权利要求42的方法,其中所述关系是所述第一正切矢量和所述第二正切矢量之间的角度。
45.一种用于检索草体手写注释的方法,包括存储注释的词汇;存储对应于所述注释的语义部分的多个部首;输入要检索的手写注释;通过识别所述手写注释内的各个笔划,确定与所述各个笔划相关且与所述存储的多个部首相关的重心信息,使用重心信息之间的关系计算替换成本,从而从所述输入手写注释中抽取至少一个部首;执行所述抽取部首和所述存储的多个部首之间的估算操作以选择至少一个候选部首;使用所述候选部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
46.根据权利要求45的方法,其中所述确定重心信息的步骤包括的步骤是识别来自所述各个笔划的第一对笔划;识别来自所述存储的多个部首的第二对笔划,其中第一笔划对应于所述第一对笔划的第一划并且第二笔划对应于所述第一对笔划的第二划;形成所述第一对笔划的重心之间的第一矢量;并且形成所述第二对笔划的重心之间的第二矢量。
47.根据权利要求45的方法,其中所述关系是所述第一矢量和所述第二矢量之间的角度。
48.一种用于检索草体手写注释的方法,包括存储注释的词汇;存储对应于所述注释的语义部分的多个部首;输入要检索的手写注释;通过识别所述手写注释内的各个笔划,确定与所述各个笔划相关且与所述存储的多个部首相关的起始点和结束点信息并且使用起始点和结束点信息之间的关系来计算替换成本,从而从所述输入手写注释中抽取至少一个部首;执行所述抽取部首和所述存储的多个部首之间的估算操作以选择至少一个候选部首;使用所述候选部首选择所述词汇的一个子集;执行所述输入手写注释和所述子集之间的匹配操作,以便于从所述词汇中检索一个注释。
49.根据权利要求48的方法,其中所述确定起始和结束点信息的步骤包括的步骤是识别来自所述各个笔划的第一对笔划;识别来自所述存储的多个部首的第二对笔划,其中第一划对应于所述第一对笔划的第一划并且第二划对应于所述第一对笔划的第二划;形成所述第一对笔划的第一划的结束点和所述第一对笔划的第二划的开始点之间的第一矢量;并且形成所述第二对笔划的第一划的结束点和所述第二对笔划的第二划的开始点之间的第二矢量。
50.根据权利要求48的方法,其中所述关系是所述第一矢量和所述第二矢量之间的角度。
51.在用于匹配手写注释的动态编程过程中,一种用于估算包含在所述注释内的部首的改进方法包括通过使用第一动态编程操作对输入的手写注释执行部首抽取以产生多个抽取的部首候选项,其中第一动态编程操作产生与所述多个抽取的部首候选项中的每一项相关的一组成本;把每个所述部首候选项与一个部首代码相关联;使用第二动态编程操作估算所述部首代码,在第二动态编程操作中,替换成本使用在所述第一动态编程操作期间确定的所述一组成本来确定。
全文摘要
草体汉字使用语义匹配处理进行分析,由此,汉字中的部首首先被抽取并且用以把整个词汇的搜索空间减小到只包含匹配部首的那些汉字。在执行部首抽取时,输入汉字被标准化并被分割为笔划,这些笔划接着根据抬笔/落笔信息和轨迹最大和最小值信息组织。模糊断点和连笔在该处理中被消除。动态编程匹配则以笔划为基础执行,其中笔划替换成本通过各种方法以逐点为基础进行估计,这些技术包括正切矢量分析、中心关系估计和起始点/结束点估计。动态编程成本根据参考部首的长度进行标准化并且位置不相似性被消除。
文档编号G06K9/62GK1324068SQ0112142
公开日2001年11月28日 申请日期2001年3月29日 优先权日2000年3月29日
发明者马跃, 章驰 申请人:松下电器产业株式会社