专利名称:无字库技术的制作方法
技术领域:
本发明是用在计算机的文字技术。自二十世纪中叶发明了计算机以后,很快普及 并加速社会发展,使其进入信息社会。作为计算工具而发明的计算机,已主要用于文字信息 处理,因而称为电脑。实际上计算符号也是文字,都是思维工具,本技术是文字工具的工具。
背景技术:
文字发展到工业化印刷术时代,其存贮和传播,无论在量及速度上,都翻了不知几 翻。跃入更高的电脑文字后,开始时自然因袭印刷技术,用电脑字库去对应铅字库,中文 因字形繁多,只得用大字库。但几十年来的经验告诉我们,大字库收不完所有字形,十万、 十三万的汉字库也会有缺字,且错乱时有发生。更致命的是输入法的困难,即使勉强开发出 来了,也难学习掌握,所谓万“码”奔腾,恐怕很少能在特大字库上跑的。世界上,Unicode 却循着这条路,设计出4字节的内码,容量达40亿,想容纳世界上所有文字字形。人们很快 也发现它仍有问题,又提出CDL (字符描述语言)和IDL (象形文字描述序列)等组字方法 作补充。当电脑内存容量已扩大而CPU速度仍较低时,我们只能采用大字库。这时的中文 打字机仍与笨重的机械打字机差不了多少,主要用来打腊纸,不像英文打字机,一键一个字 母,已是写字机了,可以写信写便条。现在CPU的速度大大提高了,达到了允许用笔画来组 字。虽然不可能一键一个汉字,但能一键一个笔画或一个字根。因为每个笔画和字根都有一 定的组字特性,据此可研究出一个算法,由笔画和字根序列,组成平面的汉字。本发明的汉 字笔画组字算法(理论),已可组出所有汉字,试验程序甚至把英文字符也由圆弧和直线组 出。所以,为了有效地处理、在网页上同时显示、特别是能容易地输入世界上所有文字的所 有字形,在中国更为了有效地处理所有历史上出现过的、以及随时可能创造出来的汉字,不 能走无限扩充字库容量的大字库道路,只能走笔画组字的无字库或小字库道路。我们应该 及早改弦更张,研究和完善这一方法,以免因字库不适应而产生的缺字、乱码等种种问题, 在汉字圈内,这种问题已出现多次了。
发明内容
无字库技术,就是没有字库,显示所有汉字时,都是由笔画临时组出来的。这就需 要笔画库,汉字是以其笔画字根串存贮的。由笔画的数据自动组出汉字的技术理论,是本发 明的基础。1、笔画及其参数我们取汉字笔画25对,如图1所示(每行5对),右边用字母作对应的代码。小写 代表该对的主笔画,大写则为副笔画,一般主副笔画相互代替,汉字基本仍可以辨认。每个 笔画规定两个参数,即横向线数X和竖向线数1,分别表示两个方向的延展程度,在组字时 用来计算笔画的相对大小。它的绝对值大小关系不大,为了运算简单,尽量采用最小的数, 故最大值取3,最小值取1。例如笔画横b的X值为3,短横B的X值为2,它们的y值都为 1。每个笔画还规定两条曲线,图2左上是其示意图。在笔画两端点及转折处,都设一个骨干点。骨干点组成的骨干线是折线(红),在不同汉字中是要随笔画所占的空间的不同而变 形的,即可能拉长或压扁。真正的笔画轮廓线是平滑曲线(黑),用贝式尔内插法,从轮廓线 的关键点和两关键点间的控制点计算出来的(绿线连着控制点)。因为这些点是用与它最 近的骨干点的距离(χ,y)规定的,所以不论笔画因所处位置不同而引起拉长或压缩(如左 下和右上所示),都能保证笔画的粗细和转角形态完全不变,只要提供不同的笔画字体,就 可以组出标准的宋、楷、隶、黑等字形来。2、笔画层积组字因为汉字横多于竖,所以我们认为由笔画串组出独体字根时,笔画是按笔顺由上 向下叠加的,一个笔画构成一个“层”,层高等于其线数y。如果某笔画与前一笔画相交,就 把它看成是从下层延伸到上面的层,要向上延伸η线数,在该笔画后面加上一个数字η。例 如,短横B、长横b加上长竖c再加数字1 bcl),就会组成“干”字。这整个字的纵向线数, 是两个横的1,加上一个竖的3,共计5,程序按这总线数分配空间,两个横只占上部2/5弱, 而竖笔的纵向线度3则在横笔下面,另在长横之上延伸线度1。这样的字形显得有点头重脚 轻。为此在长短横间插入2个空笔ζ2 (ζ后的数字表示有几个空笔或该空笔占多少线数), 变成Bz2bc3,则竖在长横上下都一样长,就好看了。如果数字η前加一个*号,则表示它占据的是从上一层笔画的底部向上延η个线 数,即它自己没有独立的层,整个字也不增加线数(y),完全是重叠的笔画。如Bzc*lb,它是 个“工”字。竖笔c虽然原有纵向线数3,但它没有自己的空间,只在空笔ζ的空间里延伸1 个线度。笔画组成左右结构的情况很少,这时必须放在方括号[]之内,它们只形成一个 层。方括号后面可加数字n,表示整个层内所有笔画,都要向上延伸η线数,如果加+η,则向 左延伸η线数。如果在该层第一个笔画后加*η,则都是从上一层底部开始向上延伸η,没有 自己独立的空间,完全是一个重叠的层。笔画没有向上延伸不同高度时的左右结构层(包 括重叠层),其中的笔画将有同一个高度,即有相同的y线数,数字等于其中y线数最大者, 线数较小的笔画自动伸长。同样,同一个字根或子字中,所有层的横向线数也是相同的。如果有一个层是左右 结构的,随着该层中笔画的增加,横向线数必然增加,那么其他所有层的横向线数都增加到 相同的数值。例如zbz[c*3c]是的笔画序列,横向线数是横b的3,因为竖c的横向线 数是1,层[c*3c]的横向线数本为2,也增为3 了。而ZbZ[C*3CCC]是汉字“冊”,横向线数 等于层[c*3CCC]的4,横b的线数也增为4。但是线数只用来安排笔画的相对位置的,所以 上面举的两个字的横b,虽然有不同的横向线数,但有同一个长度,它们都占一个字的宽度。3、字根的结构参数字根也被称作部件、字元等。注意在汉字的不同的位置,某些字根里有些笔画要变 异,如“木”作左偏旁时,第四笔捺要变为点。在组字时,笔画有变异的是要算不同字根的。 字根的参数,除了笔画数和x、y总线数(分别为各笔画的χ和y线数之和)外,还有一个结 构码用一个三位数来规定与其他字根的相互关系(1)左右结构类结构码为000。(2)上下结构类一般为100。有些字根底部中空,如“ 然夹”等,希望后续字根 能升高写入其中空部分,末位数用来规定后续笔画升到该字根内部的y线数。
(3)嵌套结构类结构码百位数L大于1,其后续笔画写入其内部。十位N和个位 M是该字根包围笔画的x、y线数。一般来说,如果上下两端或左右两边都有包围的话,两边 的线数是相等的。百位数L指明嵌套种类时,也就指明了到底那几个方向有包围的线数1.左上包围(L = 2)如“厥”之字根“厂”,结构码为221,“扇”之字根“户”,上部 包围的线数大,结构码为223。2.右上包围(L = 3)如“匍”之字根“勹”,结构码为323,“司”之字根“ ”,结构 码为321。3.上三包围(L = 4)如“问”之字根“门”结构码为422,、“同”之字根“门”,结构 码为421。4.左三包围(L = 5)5.下三包围(L = 6)6.左下包围(L = 7)如“医”之字根“匚”,结构码为511。 如“函”之字根“U”和“幽”之字根“山”,结构码为611。 如“毯”之字根“毛”,结构码为732,“翅”之字根“支”,结构
码为731。7.走之包围(L = 8)如“连”之字根“1_”,结构码为821,“建”之字根“乙”,结构 码为831。它是从左下包围独立出来的,只不过嵌套字根是最后写的,以便符合笔顺要求吧 了。8.全包围(L = 9)如“国”之左下包围“口”,结构码为911,“周”之左下包围“门”, 结构码为921。4、汉字的组织个别笔画也可以成字,如“一、乙”等为单笔字。许多字根可以独立成字,称为独体 字。一般情况,先由笔画组成字根,再由字根组成汉字称为合体字。合体字与独体字或字根 一样,也可成为更复杂的汉字之组成部分,可称为“子字”,作用与字根一样。汉字中可以有 没参与字根组织的孤立笔画,也可看作是“子字”或字根。同样,复杂的字根中可含有别的 字根(可称为“子字根”)以至合体汉字,其作用也可被看作与单一的笔画一样。这样,笔画序列是表示一个字根的,但该序列中也可以包含、即调用别的字根以至 汉字。被调用的字根可称为子字根,可当作一个普通笔画来看待的,这个特殊笔画具有的线 数,就是子字根的总线数。子字根按自己的笔画序列组成字形,不过它按其x、y线数在母字 总线数中的比例被压缩了。母字中的子字根可在大括号{}下展开,而圆括号0则表示有 一点特殊作用子字根,这个子字根要写到前一笔画(例如折弯钩、弯钩)的左下方,而且前 一笔画的线数会随子字线数的增加而增加。圆括号的这一作用不仅使弯钩包容的东西可多 可少,也保证了弯钩先写的笔顺。同样为了使“小”字的竖钩先写,可把左边的点用圆括号 括起来放在竖钩后面。合体字作为字根用时,要有结构码,规定缺省的结构码是左右结构。如果要改为上 下结构,非上下结构的字根要改为上下结构时也一样,可在后面加结构符“”。而强迫字根
改为左右结构的结构符是‘
ι这时不需要任何包围结构符,但需要一个叠加结构符“=”,
如果要在某汉字上叠加对号V、错号X、或加圈〇时,就要用到这种结构符。
综上所述,只要按笔顺列出其组成字根(孤立的笔画也被看作字根),就可以自动 组出汉字,各组分会安排在适当的位置,占有合理的空间,需要额外的括号、数字和结构码 的情况较少。
图1:25对笔画图2 笔画结构示意图左上示笔画的3条线,红色为干线,绿色为轮廓控制线,黑色为实际轮廓线右上笔画被纵向压缩左下笔画被横向压缩右下笔画没有被压缩图3 :936个字根图4 根母字根表表一、各根母类的特征表二、各根母类的所有字根及其排序
具体实施例方式1、真正的汉字电脑现在的电脑,虽然都能处理汉字,但都不是真正的汉字电脑。运行出错,最后总 显示英文信息,如果不能阅读时,就傻眼了。全国都学英文,但能阅读者少至又少,百分之 九十九以上的国人不会,也就难完全掌握电脑。这个问题应易解决,为什么能造出中国芯, 却不去研发自己的基础软件呢?基础软件还是微软一统天下,在互联网普及的今天,也难 以确保国家安全。研发软件不唯不能用以前的汉化方法,还应抛弃大字库,采用无字库技 术。把笔画数据和组字软件固化到芯片里,最好固化到CPU里。现在的仪器和工具都装CPU, 要显示汉字信息,原来是用到几个汉字就装几个字形的数据,如果有一套能组出所有汉字 的芯片,到处可以用,多么方便。2、小字库技术在还没有生产出汉字电脑之前,要便于输入生僻字、要显示字库里没有的汉字 (这在处理古旧文献、古怪的人名、地名时常会遇到的),可以用小字库技术。小字库应包含 所有笔画、字根和两三千常用字。我曾试编一种WORD,可以同时使用字库字和合成字。所谓 合成字是直接调用字库字来组成的。按上述组字理论,参与组字的成分是必须有各种参数 的,字库字显然都没有。没有结构参数,可取缺省的左右结构,个别需要上下结构的则加冒 号。没有笔画数和线数,就不能计算出组成部分适当的占有空间。不过大部分合成字,其组 成部分大小相近,可等量分配,效果还不错。对于各部分差异大的,各子字后面就要加附加 一个数,以便按比例分配空间。3、输入法使用无字库技术是不要输入法的,直接键入笔画字根串就可以了。虽然字根可以 还原为笔画串,但纯粹的笔画串太长了,字根还是不可省的一级,甚至把单笔画也看成字 根,统称字根串。我在组字时采用936个字根,如下图3所示,每100个一组,左上角注明组 号,加上在组中的序号00-99,就是引用它们的字根号。如果把所有字根(加上笔画)归并为沈个类,每类用一个字母表示,那么,组出汉 字的字根串,就可以作为字库字的输入码。我的张码输入法,就是按字根的首两笔画,分成25个类(笔画只分横竖撇捺折5类,5 X 5 = 25),用25个英文字母a_y为代码,且只取首3码。4、自然序汉字字典与张码输入法机械地按字根首两笔分成25类不同,按字根特征分为观个有序的 类,图4表一列出了各类的特征,表二则列出了各类的所有字根(因为许多字根,字库里没 有收录,不能显示,只能选用含有它的汉字,后附该字根的起止笔画来表示),每类选用一个 汉字作代表,称为根母,根母的排序是一二三四五十千东西南北中心线广大人民生子女口目与手山土田这样,把每个汉字的字根串转换为根母串,按这有序的根母串来定位,所有汉字就 变成有序的了,这种次序称为自然序,是有树状分叉的字典序。汉字字典按此序排列字头, 称为自然序字典。因为通常用作部首的字根,会被分到同一根母类里,被参混在一起了。为 了让通常属于同一部首的汉字仍在一起,第一个字根还要按根母表中排列的次序排列。已 试编两万字的自然序字典,查字容易,字典里有的任何汉字都一定能容易地查到。
权利要求
1.一种不用电脑字库或只用少于3000个常用字字库,其他字形随时由笔画、字根或常 用字合成,因而可以显示和处理所有汉字的方法。
2.根据权利要求1所述,组字需要的笔画库,每个笔画规定一组特性,组字时可据此自 动计算出在字中占据的空间位置,可依位置改变具体形状而能保持该字体特征。
3.根据权利要求1所述,组字需要的字根库,每个字根也被赋予一组组字特性,组字时 可据此自动计算它在字中占据的空间位置和留给后继部分的空间。
4.根据权利要求1所述,组字如果调用常用字库字,也可由其笔画数规定组字特性,以 便计算在全字中占据的空间位置。
5.按笔画组成字根、字根组成汉字的关系,每个汉字由唯一的字根串表示,字根按特征 分为20-30个类,称为根母。由这根母串形成自然的字典序,可供汉字排序和检索。
全文摘要
本发明公布了无字库技术,即不用电脑字库而可以显示、处理所有汉字,允许自己创造可以流通的新字形。笔画和字根被赋予一定的特性后,只要按笔顺列出笔画字根串,就可以正确计算安排笔画和字根的空间位置,且按笔画的字体,组出标准的各体汉字。它可以徹底解决信息时代电脑缺字(尤其在古文献中)、乱码、万“码”奔腾而仍输入困难、汉字殭化不能发展等等问题,使汉字获得自然的字典排序,方便字典查字。
文档编号G06F17/20GK102110080SQ20091031219
公开日2011年6月29日 申请日期2009年12月24日 优先权日2009年12月24日
发明者张时钊 申请人:张时钊