本发明涉及一种语言文字信息处理技术,特别涉及文字编码、输入和识别技术。 据1983年11月在北京召开的中文信息处理国际研讨会资料,汉字编码方案虽多达四百种,但实际应用较多的不过十余种,而且各有优缺点,但没有一种是与汉字识别挂钩的。现在正在研究的汉字识别方案大多采用结构法,也有采用根据直线斜率和方向识别的。但它们的共同缺点是大都必须对扫描信号进行平滑(变成单线条)或除噪声等予处理,而且必须跟踪每根线条、有的需庞大的样板库,不仅占用大量内存(至少60K以上),而且速度慢。至今各种汉字识别技术还存在这样那样的问题,尚未有完善的识别技术大规模推广。
本发明的目的是将汉字和其它各种文字的编码和识别挂钩,即字符编码和识别结果所得的编码相同,可共用一个检索表,以大大简化检索手续并节约内存。
本发明的另一个目的是提供一种直接从扫描输入信号抽取字符特征数据的十分简单的硬件,而这些数据只需经过十分简单的处理过程即可得到用于检索的字符编码。
本发明再一个目的是,提供一种音素编码法,以便熟悉汉语拼音的人能有一种快速的辅助输入手段。
本发明的其次一个目地是提供一种随机定义简化输入技术,可以用功能键或换挡键配合字符键存贮和输入重复出现的词或词串,而不受样板行的限制。
字符笔形的模糊归类和编码
组成汉字和其他各种字符的基本单位叫笔形。笔形可以是单笔或由多笔组成结构单元,也可以是从整体字切割的一部分。
汉字或其他字符的笔形可以按形状,组成方式或结构等特征进行模糊归类。归类的目的一是便于记忆,一是在识别时便于处理,归类的基本原则是,同类笔形要有共同的特征,尽量避免由于同类而造成同码。为此,同一个字可根据不同的标准(特征)归于不同的类。
笔形可以分成如下的类:
1)点:单独的点(包括挑)、双点(如丷、冫、等)三点(如、等)。
2)横:如一、、丅、亠等。
3)竖:如丨、丨、丿、卜、、等。
4)交:如十、、大、等。
5)盖(下缺):如冂、、宀、、冂、月、几、几、等。
6)框:方框(如口、囗)长框(如、目、日、四等)。
7)斜:如丿、丿、丶等。
8)叉:如乂、又、弋、等。
9)弯和角:如、人、厂、、、亅、、乛、、了等。
10)纽:如、乚、勹、、辶、廴、、厶、等。
11)右缺:如匚、、上、七、匕、七、匕、C、K等。
12)左缺:如、、丬、弓、、了、习、、彐、等。
13)左右缺:如工、王等。
14)上缺:如、凵、山、、丩、凵、等。
15)串:横串如廿、艹、廾、卅、、也、、艹、等。竖串如扌、丰、车、、戈、、才等。
16)插:上插如主、圭、巫、曲、由、肀、等;下插(下伸)如干、于、手、毛等。穿插如中、申、巾、等。构件插如西、、雨等。
17)斜缺如、夕、勹、刀、、爫、(欠字头)等。
18)闭(带脚框)如:耳、、皿、阝、卩等。斜闭如攵、女、片、夕、等。
19)带斜框:如、臼、白、等
20)线集:如木、个、水、、、等
以上各类还可按不同标准进行再分类。例如根据排列成竖的共同特征,可以把氵、彡归入竖类,按照中部有交点下部有顺钩的特点,可以把才、手和寸、才等归成一类,如此等等。
以上是详细的分类,最简单的分类采用十种笔形,即:点(包括上挑),横、交(包括十和)竖、盖(包括、冂、、月、几等),框(包括方框如口、囗和长框如等),斜(包括撇和捺)、叉(包括乂、、又等)弯和纽。这种分类法可用于词典检字,也可用于文字编码,如再加上左缺、右缺、上缺和横串及竖串等五类,就可以将各种文字字符编码。例如α的编码是框、纽。∝的编码是框、右缺。
如果要减少编码长度,最好是取25至36种不同的类。
下面是适用于汉字和其他各种字符的编码分类举例。
以上分类还可对各类笔形作必要的调整和增删。所用代码还可根据使用频率作适当修改。
为了加快输入速度,每个笔形键可以安排2个或更多的常用字。可以用一个或几个字符键作为常用字换挡键。此换挡键还可安排一个常用字,一个常用词尾,并兼作输入键(相当于空键)。
例如在上例中,可使用Z键作为“了”(单键输入)和“子”(作词尾)直接输入键兼作常用字换挡键。例如K键安排“可”和“右”字键,按K键和空键输入“可”,按Z键输入“右”。每个键安排的常用字应当包含该键所表示的笔形。在键面上标出两个或更多常用字,而其所包含的该键所代表的笔形部分用不同颜色突出显示。在这种情况下,非常用笔形作独立字使用时,必须拆分笔形进行编码。常用字键应当允许另外定义别的字。
编码采用对角交叉取码原则,且具体规则如下:
1.整体字:按先切取首部笔形,次切取尾部笔形,再切取顺数第二个笔形,最后切取倒数第二个笔形。能横切的不竖切(如“井”字取卄、廾、而不取);宁切取多笔笔形,不取少笔笔形(例如“亡”字取和,不取丶、、一);一刀切断不留尾(如“申”字取亅、口、一)。
2.田形结构字:先左上角,后右下角,次右上角,再左下角依次编码。如“韶”字取“亠”、“口”、“刀”和“日”。
3.形结构字:先左角部,后按整体字或其他结构字处理。如“远字取“辶”、“一”、“一”、“儿”。
4.多字元字:字元超过4个的字,仍按先首后尾次序,第三个必须取中间部分的字元。如“器”字取“口”、“口”、“大”、和“口”“赢”字必须取“亠”、“几”、“月”和“口”。“衡”字必须取“彳”、“丁”、“”和“大”等等。
为了区别同码,可以用“横”表示横排结构和包围结构,用“竖”表示竖排结构和整体字。也可以打入末笔或右上角笔形代码区别。对于汉字以外的文字,可以用代表不同文种,弧形、圆形或构件连接的代码区别。例如西文“O”、和数字“0”,在识别码里不能单用“框”表示,而必须用文种区别码区别。
如果要使一个键盘能供多种文字直观识符输入,可以将键设计成切头四棱锥体形状,五面标记五种不同字符,键作为转换开关使用(或者根据用户要求安装)。可以根据以上笔形归类编码规则和下面叙述的音素编码法为不同文种制定一些特殊的规则。这样可扩充设备的功能,便于不同用户使用。
为了加快输入速度,可以采用词码输入方式。词码的编码方法是第一个字取首笔形,第二个字取尾笔笔形,如有同码,再取右上角或靠近末笔笔形的笔形。三字词头个字取首笔笔形,第二个字取末笔笔形,第三个字取右上角或首笔笔形,都是四码。
如果不用词码,上述例子大部分可用三码输入,如同码就报警,补打第四码即可,如采用词码,则规定四码就自动输入,不必按空键,这样可大大减少击键次数。
汉字和其他字符的识别
汉字和其他各种字符的笔形特征主要有:1)直线的斜率;2)线条(即笔画)与线条之间的接点和交点的数量和分布;3)带弯或纽的线条,其拐曲的方向和分布。不论是印刷体或手写体,一个字符,其各个笔形的这些基本特征大体上是不变的。例如“日”,印刷体是由位于四角的拐曲和位于两竖中点的接点组成。而手写体只可能发生左上角有开缝,中间(有时下部)的横线不与竖连接以及外框变形等情况,这些都可用规定误差范围或用逻辑函数式予以解决。
为了得到字符的各个笔形特征,可采用比较相邻行(或列)相应坐标的扫描信号变化的方法。有四种变化情况,其意义和表示代码如下表:
第1种情况表示原始状态,可用作分界符,第二种情况可以予示后行是线条的前沿(开始),也可能表示“1”信号串向一侧伸长。第三种情况可以予示前行是线条的后沿(终结)。也可表示“1”信号串缩短。
下表列出部分字符矩阵中相邻行(或列)信号变化的几种典型模式:
模式 行(列) 标号 C1C2C3C4C5C6C7C8C9C10
1 前行 Li 0 0 0 0 0 0 0 0 0 0
后行 Li+1 0 0 0 1 1 1 0 0 0 0
模式 行(列) 标号 C1C2C3C4C5C6C7C8C9C10
2 前行 Li 0 0 0 1 1 1 0 0 0 0
行后 Li+1 0 0 0 0 0 0 0 0 0 0
3 前行 Li 0 0 0 1 1 1 0 0 0 0
后行 Li+1 0 0 1 1 1 0 0 0 0 0
4 前行 Li 0 0 0 1 1 1 0 0 0 0
后行 Li+1 0 0 0 0 1 1 1 0 0 0
5 前行 Li 1 1 1 1 1 1 1 1 1 1
后行 Li+1 0 0 0 0 1 1 1 0 0 0
6 前行 Li 0 0 0 0 1 1 1 0 0 0
后行 Li+1 1 1 1 1 1 1 1 1 1 1
7 前行 Li 1 1 1 0 0 0 0 0 0 0
后行 Li+1 1 1 1 1 1 1 1 1 1 1
8 前行 Li 0 0 0 0 0 0 0 1 1 1
后行 Li+1 1 1 1 1 1 1 1 1 1 1
9 前行 Li 0 1 1 1 0 1 1 1 0 0
后行 Li+1 0 0 1 1 1 1 1 0 0 0
10 前行 Li 0 0 1 1 1 1 1 0 0 0
后行 Li+1 0 1 1 1 0 1 1 1 0 0
由第一种模式可判定Li+1行是一条宽度为3比特的线条的前沿,其坐标为Li+1,C4至Li+1,C6。
由第二种模式可以判定线条后沿在Li行,其坐标为Li,C4,至Li,C6。
由第三种模式可以判定线条在向左斜。
由第四种模式可以判定线条在向右斜。
由第五种模式可以通过“1”信号串始终点坐标此较(C4-C1>=δ,C7-C10<=-δ,此处δ=3)判定Li行有下接线条。
第六种模式可用同样的办法判定Li+1行有上接线条。
第七种模式可用“1”信号串始终点坐标比较(C1(Li)-C1(Li+1)<=±δ/2此处δ=3)判定Li+1行左角上接线条。
第八种模式可用同样的办法判定Li+1行右角上接线条。
第九种模式表示两根线条合并。合并有下列几种情况:一是一根线条近似垂直时,可能予示向上的拐曲(如框的左右下角倾斜,或有顺钩或反钩等),也可能予示垂直线下面有交点,也可能予示斜线与直线会聚。一是两根线条近似对称倾斜时,可能予示下面有叉的交点(下面有分支时),也可能是拐曲(下面有短的后沿时)。
第十种模式表示线条分支。分支有下列几种情况:一是一根线条近似垂直,可能予示向下的拐曲(如框的左右上角倾斜或有左拐曲或右拐曲等)。也可能表示直线与斜线(点)会聚,一是两根都是对称斜线时如果上头有合并就很可能是叉的交点。
第八和九两种模式是第六种模式的一个特例(Li行“1”信号串移向端部)。第五种模式发生同样的变化时,就得到向下的左右角相接,
识别过程如下:
1)输入一行(或列)扫描信号并送入相邻扫描信号此较器和代码比较器中比较,得出表示相应坐标上信号变化的代码;2)记下代码变化处的坐标;3)将上述数据一边记录一边进行处理,以便判断笔形特征,并用代码表示。数据记录是以线条为记录小区,每根有始沿的线条记录一个小区。始沿坐标接近的线条记在同一个横向分区的大区内。如果两根(或两根以上)线条连通,就以连通结构作为一个大区。分区是与线条的坐标位置对应的。所得到的笔形特征也分别用代码表示,并记录在相应的大区内,经过处理后得到一个按字符结构安排的笔形特征表;4)按照编码规则抽取特定位置上的笔形特征代码,用函数式判定其笔形类别并组成编码,即可检索字库地址。
下面举例说明这一过程。
如附图1所示。1至12行表示从比较结果记录中抽取的变化较大的行。分别用L1至L12表示其处理过程。La至Ld表示各线条。
L1:由01代码串判定La前沿在R11区记下“1”代码串始点和终点坐标。
L2:由11代码串判定La续延,在R11区记下“1”代码串始终点坐标。由端部01代码判定左斜,记下左斜代码。
L3:由11代码串判定La续延,记下始终点坐标。由00代码隔开的01代码串判定Lb始沿,在R21区记下其始终点坐标。
L4:由10代码串判定La后沿,在R11区记下始终点坐标,以始点为标准计算其斜率并记在R11区。
由11代码串判定Lb续延,记“续延”代码。
L5:由11代码串判定Lb续延,记“续延”代码,由01代码串判定Lc前沿始终点坐标,并在R22区记录之。
L6:由第9种模式判定Lb和Lc合并,在R2区记下“合并”代码。
L7:由第10种模式判定线条分支,Lb为竖线穿过Lc,在R2区记“交”标记。
L8:由10代码串判定Lc后沿始终点,并记录之,计算Lc斜率,并与La比较,得出La为斜线,在R1区记下“斜线”代码。
L9:由11代码串判定Lb续延,在R21区记续延代码,由01代码串判定Ld前沿始终点坐标并在R21区记录之。
L10:由第九种模式判定Lb和Ld合并记下“合并”代码。
L11:由11代码串判定Ld续延,记“左斜”代码在R31区记录“续延”代码。在R3区记“中接”代码。
L12:由10代码串判定Ld后沿始终点坐标,在R3区记“横”标记代码。
最后,从R1区取出“斜”代码用函数式判定笔形码为S,从R3区取出“横”代码,用函数式判定代码为T,从R2区取出“交”代码用函数式判定笔形代码为J,得字符编码为STJ。
如为“任”字,最初出现的一根线条记在R11区,再出现一根时,就就须根据位置顺序重新调整,而分别记在R11和R12区。在偏旁斜笔下出现竖的前沿或接点时,其始终点坐标就记在R21区。右边斜笔记在R12区,“十”记在R22区,“一”记在R23区。
字符识别硬件的原理框图如图2所示。1表示纵(或横)坐标寄存器。2为横(或纵)坐标寄存器(计数器),3为输入扫描信号寄存器(简称输入寄存器),4为相邻行扫描信号比较器(简称行信号比较器),5为比较结果代码比较器(简称代码比较器)。
输入寄存器中有一个移位寄存器,和一个或多个缓冲寄存器,如为串行输入,就送入该移位寄存器,然后移入缓冲寄存器,如为横向并行输入,则送入缓冲寄存器。缓冲寄存器中每个单元(例如可以是一个双稳态触发器)寄存一个信号,并分别送入行信号比较器中,与其中的前行(或列)扫描信号寄存器的相应单元中的信号进行比较。实际上这个比较器是一个二位寄存器,前行信号存在第一位,输入信号送入第二位。二位寄存器中的结果就是一个二比特代码,而代码比较器就将相邻的二位寄存器中的结果进行比较,把第二位中的信号移入第一位,同时将第二位置“O”,把输入寄存器中的信号送入其中的第二位,再将输入寄存器置O,并接受下一行输入扫描信号。第一个二位寄存器中的信号永远连同相应的坐标寄存器里的坐标一起送入主机的或专门的存贮器,而以后仅当相邻的二位寄存器中的信号有变化时,才将有变化的那个二位寄存器里的代码连同相应的坐标寄存器里的坐标数据一起送入上述存贮器,以便用软件进行进一步处理。
识别程序可固化在主机的或专门的存贮器内,也可以录在磁盘或其他外存器件中供随时调入内存中使用。
另一个可供选择的识别方法是,用统计方法抽取变化代码进行编码。采用这一方法时,由代码比较器的数据按分区原则(或者按照坐标)依序记入代码存贮区的不同区域。抽样原则是:1)对于斜线而言,如果以单个01或10起始的“1”信号串多于以多个01或10起始的“1”信号串,则取两个01或10,横线条取两个11码,而竖线条只取一个11码。而“O”信号串只取1个00码,如果同一行(或列,代码相同就舍弃,按字符结构编码原则划成分区,每个分区一组代码。按编码规则依序在指定的分区取出该组代码,用函数式确定编码,而后组成字符码。例如“”字的第1组代码是0101,第2组(R3区)代码是1111,第3组代码是001100,1111,001100,它们分别经函数式处理得到STJ。而单体字“日”的整组代码是:
1111 110011 1111 110011 1111
上横线 竖间空白 中间横线 竖间空白 下横线
采用这一办法可以省去判断笔形特征的手续,但如要识别手写体,则函数式较长,抽样代码组数较多,每组代码较长。
音素编码输入方式
原来的26个汉语拼音字母中,V表示韵母on,w表示韵母ouy表示韵母in,g同时代表韵母ang。另外增加三个声母键和七个韵母键,用数字键表示,如下表:
1 2 3 4 5 6 7 8 9 0
ia ai an en un ao ch au zh sh
由于各个数字所表示的声母或韵母在声韵上颇为近似,故记忆快。
有两种输入方法:全拼音方式和音素编码输入方法。采用全拼音方式时,用软件把on译成v,把ou译成W,把应当用10个数字表示的声母或韵母译成相应的数字,当然,还应对用在前面的Y和W作相应的处理,变成音素码后,即可用音素码检索。在屏幕末行既显示全拼音码,也显示相应的音素码,以便逐步熟习音素码输入。
为了区别同码,可用10个基本笔形代码作为区别码而最好是用25至26个笔形代码或用音素码表示特定部位笔形读音作为区别码。按空键后,在屏幕末行按照用来代表各同码字首笔笔形字母的顺序显示最常用的同码字(每个字附上首笔笔形字母)。再键入所需要的字的末笔笔形字母,就会显示全部末笔笔形相同的同码字,同时显示代表各字末笔或右上角笔形的字母,选定哪个字,按哪个字的字母键,就输入该字。采用音素码输入方式时,屏幕末行显示全拼音字,按首笔笔形代码键,就显示首笔笔形相同的字,而如上所述输入所需要的字。
为了加快输入速度,可采用词码输入。二字词取两个字的声母,取第一个字的右上角(或首笔)笔形代码和第二个字的末笔笔形代码组成四码输入。三字词可取第一、三个字的声母。取第二个字的右上角(或首笔)笔形代码和第三个字的末笔笔形代码组成四码输入。
随机定义输入方式
一篇文章,尤其一段文字里重复出现的词或词串很多。为了加快输入,可以用软件或硬件建立一个移位存贮区。每键入一个字,存贮区里的字就移位一次,最前面的字就自动溢出。可以将移位存贮区里任意一个词或词串用功能键或转换键与字符键配合输入,同时将其存入随机定义存贮区,以后只需按同一功能键或字符键,加上定义好的输入键,就能随时输入该词或词串。为了加快存取,每输入一个词或词串,就按下一个定义好的词标记键,这时就会在相应的词上边或下边显示其在移位寄存区的顺序号,只需按某个功能键或换挡键与字符键配合,加上要取出的词或词串的标号,就能将该词或词串输入,以后碰到同样的词或词串,只需按相应的功能键或换挡键与字符键配合,即可输入。此词标记同时随文件存入内存,可用于语言的机器处理(如检索,机器翻译等)。
任何一个功能键或换挡键与字符键配合,可随时重新定义新的词或词串,原先存在随机定义存贮区里的词或词串就被新的取代。