贵乃花爱宫泽理惠么:无字库汉字电脑的可行性

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 21:37:22

张时钊(高级工程师)
现在的电脑,处理文字时都离不开字库。在文本文件中,存贮的是一串内码,一个内码对应着字库里唯一的一个字形每个字形虽然形状不同,但都呈大小一致的矩形,文本或文字串就是由它们线性排列形成的。对这种形式的文章,电脑技术可以进行快速高效的编辑:删除、插入、查找、 置换、朗读、校对和排版,进一步还能从大量文章中检索、提取,甚至能理解文意。所有这一切都是继承印刷技术后,再发展而成的。

在活字印刷里,不同的字必须有不同的铅字字模,而且每种字模都必须是大量的,以备排版之需要在电脑里,由于字形字模的拷贝是很容易的,一个字只要一个字模就足够了,不过要给它一个独一无二的内码,以便取到这个字形。这些字形的集合就形成字库,对应于活字印刷里大量铅字库。虽然电脑字库比铅字库简小而方便,但在每次阅读时都必须带着,如果字库里的一个字形有了变化,整篇文章里的这个字的字形都会改变,如果缺了一个字,就成为空白。没有了字库或安装错了,就不能正确显示,成了无意义的乱码。

  
电脑是西方发明的,开始只使用英文,安装了ASCII码字库。它们不到100个,可以一键对应一个字符,不要另外的输入法。内码安排在32127之间, 只要一个字节。因为这第一个字库很小,用当时简单的点阵字形,字库大小不到1K,就直接放在BIOS中,一启动就可显示了。它们的显示程序也特别简单,只 用几句汇编语言,每个字母只要把8字节的点阵数据复制到表示屏幕的内存(显存)里就可以了。

  
汉字数量比字母多几百到上千倍,1980年的第一个国标码字库取了6763个汉字,其内码至少要两个字节。因为必须保证ASCII字符能正常使用,不发生 冲突,所以只使用字节高位为1161254的值,即每字节只有94个,这就是区位码的来历,高字节表示区,低字节表示位。每个汉字字模的数据,又比每个字母多4倍,所以这个字库大小达240K左右。在上世纪80年代,这个字库是太大了,更主要的还可能是软件的版权问题,它一直没有进入BIOS。于是, 汉卡就应运而生,固化在汉卡里的字库数据,读写(指写到显存,显示字形)都快,且一启动就可使用。后来因为硬件的快速进步,计算机的内存由几百K增加到几 M以后,软字库可以一次读入内存,硬字库汉卡才退出历史舞台。

  
我是在1985年提出无字库技术的,而且是在内存只有18K的袖珍计算机上实现的。当时,这个技术对微机应该也是有用的。记得比IBM微机低档的苹果机, 只能用台湾朱邦复先生的汉字系统,他应用字形复用技术,字库大小降低为四分之一。字形复用,就是用其他笔画较少的汉字组成新汉字。这种组字技术也是无字库 技术的核心,不过它是直接由笔画来组字,或者先组成字根,再由字根来组字,因而可以不要任何字库字。

当内存增加到连汉卡也失去意义后,用无字库技术来降低内存的开消,在一般微机里就没啥意义了。不过,在较小的嵌入式系统中,例如目前大多数仪器用的的液晶显示及手机等,为了节省存贮空间,还是有作用的。另外,随着用电脑处理汉字的飞速发展,仍存在并突显以下五个方面的问题,需要用无字库技术才能解决。

   1
、随着文字工作的发展,要用的汉字愈来愈多,虽然字库也不断增大,现在已达7-8万了,还是有缺字,使一些人的名字打不出来,甚至办不成第二代身份证

   2
、汉字输入都要使用某种输入法,字库不断扩大,研制输入法愈来愈困难,以致现在万码奔腾,还是没有公认的好方法:既好学又能输入所有冷僻字。因为汉字 多,键盘小,显然不能一键一字,必须连按数个键的组合才能输入一个汉字的内码。又因为汉字至今没有科学的自然排序方法,内码是人为规定的流水码,输入法要建立键的组合与汉字内码的一一对应关系,几乎不可能,所有输入法都要辅以从提示栏选择。形码选择量少(即重码率低),但难学难记;对于年轻人,音码几乎都会,但输入速度慢,碰到不会读的字就没办法了。无论用现在的那种输入法,长期打字不熟识汉字结构,许多汉字都不会写了。

   3
、能使用的汉字必须是字库里有的,虽然电脑也能够造字,但新造的字只能在你的机子上用,不能流通。这样一来,汉字再也不能发展了,而任何事物一旦僵化,最后必然导至死亡。

   4
字库太大,容易出错,现在已有网友发现所谓的电脑错字。按现在的硬件技术,内存里装多大的字库都没问题,但是,万一某个字模的数据错了一点,这个字就不能正确显示了。常常碰到这样的情况,一篇文章在一种字体下,显示是正常的,但换了另一种字体,有些字,甚至不是冷僻字,也会成为空白,因为这种字体里没 有它的数据。

   5
、二十多年前,我就提出研制真正的汉字电脑,认为现在的电脑虽然能够处理汉字,但都不是汉字电脑。这首先影响到中国人的学习使用。因为电脑出了深层问题 时,最后都要显示大量英文信息,不精通英语的人看不懂,要掌握高深的电脑技术是不可能的。现在虽然大部分人都学过或正在学习英文,但能够看懂这些英文提示 的人可能只有百分之一,甚或千分之一。西文电脑还影响国家的安全。因为大部分软件,尤其是基础软件,都是微软一统天下,它可以隐含窃听程序,收集我们的资料。我们虽然也研制了中文操作系统以至中文CPU(但是底层似乎还仍是英文的),至今还没有得到推广。
  
以上所有这些问题,采用无字库技术,都可得到解决。

不要汉字字库,只需要几十个(我现在用50个)笔画数据。如果键入的都是笔画码,可以一键一码,且直接作为汉字内码。因为汉字笔画太多,这种直接方式,输入慢,内码太长,不实用。所以要先组成字根和少量汉字供调用,这就是说要一个小字库。小字库内的汉字当然只选用高频字,大小取20003000个。因为2000个高频字的使用频率合计达98%以上,研制这几个汉字的符合汉字组字原理的输入法,不困难,可优化固定。而另外百分之一的汉字,称为合成字,其内码由笔画字根串组成,码长长一些也关系不大。作为试验或过渡,我现在编研的小字库WORD 2.0版,干脆可使用所有字库字,也可用字库字进行组字。这样,只有字库里没有的汉字,或者实在输不进去的汉字,才使用合成字。

由合成字的“内码”(实际是字符串)来显示汉字,需要一个显示子程序,它要按该字符串(内码)调用相应的笔画、字根或字库字的数据。当然,所有合成轮廓线后,还要进行填充。这些显示子程序都是优化的高效的汇编程序,放在基础软件(BIOS或操作系统)里。但是,我现在只能把它放在我的试验软件里,而且是用高级语言VB编成的,没有优化,速度较慢。

一些讨论

1、作者并非没有字库,而是字库不再存储字体的外观,而是存放笔画顺序,然后用算法来即时合成字体外观

2我在想,如果是中国人发明的电子计算机,那现在的电脑会是什么样子?纯属想象,不含任何讽刺,侮辱,大家先想想看键盘会是什么样子?——或者就根本没键盘这回事了. 为什么一定要用手输入? 你的思维到底还是被局限了

3这种思路是可行的,但汉字博大精深,仅仅记录少量的矢量笔画数据,合成出的字肯定会有些不够美观,在极端情况下使用者可能可以理解,但普通情况下呢?也许靠外挂的汉字库所营造的效果更能吸引人。

4、就没有键盘了,直接是手写的。

5、似乎有过用这种方法做字体的 除了常用字其它的用笔划顺序代替

61。就字库来说 我赞同把本地语言固化到硬件ROM或者将全球语言统一起来 做成一个统一的字库 如果容量可以接受 固化到BIOS/EFI 2。就输入法而言 我还是习惯拼音输入 如果是笔画输入 我没有心情去背诵一个输入法的字根。

7、我期待一款能把我名字打出来的输入法,不管你是什么电脑有没有字库! 因为你们没法用电脑打出传统中文,我已经隐姓埋名整整10年了!

8、估计这样的系统比vista都要吃资源实时渲染啊而且优点实在有限——传统字库,如果大一点,都是矢量的,矢量字库的运行效率也不高。

9、有点矢量汉字的意思,想法不错.不过如果在美术体上会碰到问题.同样的一个""比划,不同的字有不同的写法,不是简单的缩放可以解决. 不过作为BIOS级别汉字或者超微型设备的折衷方案,这还是可行的。

10、既然在研究这种字根组合的算法,或者去研究如何写字的矢量算法或许更为妥当,我觉得矢量字体也算是个趋势吧。把字符全部描绘成一系列矢量图形的组合,看是否有办法做出既美观,又有速度的电脑计算字体。

11、按笔划的话,土和士怎么分?己、已、巳又怎么分?

12、先指出一点,嵌入式设备字库一般放在rom中,不占用ram空间。既然作者知道一些嵌入式设备的ram很小,那么就不知道,这些ram很小的嵌入式设备, 速度也只有几M到几十M么?组合笔画再填充需要多少时钟周期考虑了么?该功能需要消耗多少堆栈空间考虑了么?用汇编造成的可移植性差考虑了么?而且这些 mcu一般只运行专用的前后台系统而不是linux或者wince。如果是指arm9以上的处理器,那么flash的空间一般不至于连个传统字库或 turetype字体都放不下的。而sdram一般也是几M到几十M

13、这种拼写式汉字库已经有人尝试做出来过,但是效果不好。因为汉字笔画分布不均匀,如果按照统一算法来排列,出来的汉字不好看。

14、如果电脑是国人发明的,那么我估计键盘就是一个八卦(按键估计不超过16,不过还是有可能国际化后演变成现有的E文键盘)。现在的电脑键盘是使用洋人的打字机的键盘(先于电子计算机出来的)。

15、因为中文尤其是繁简编码都有的,可能得十几兆大小,这样对硬件成本和设计成本要求太高

16、我这么认为:对于目前的字库,是否美观全看字库的设计者。而这个文章作者说的,可能是靠“印象”算法来决定美观。比如,笔画挤到一起肯定不好看,于是就是当调整……

171.缺字补上就是了; 2.没觉得研制输入法越来越困难,拼音输入法的搜狗一出来也广受欢迎;3.你活不到汉字;死的那天;4.字库出错是字库商违约,和大小没关系;5.20年 之后您对电脑的认知还停留在处理汉字上,您可以洗洗睡了。综上所述:How awful a learned fool———1. 谁来补缺字?2. 输入法很困难,你对比英文就知道了。只不过“身在此山中”,你习惯罢了。3. 汉字永远不会死,汉字是寿命最长的文字了。4. 不是字库出错,而是早期字库基于 gb2312,没有那么多字而已。

18、建议考虑其他方面的应用, 如手写识别,教学等

19、“无字库”如何实现丰富多样的汉字字体?——算法实现。就像目前的字库一样,一个字库一个字体,而不会用一个字库实现所有字体。到时候,每个字体其实就是一种字体算法而已。——注意美观问题……不明白的话到英文Linux下走一圈就知道了嵌入式系统内存宝贵,计算能力就不宝贵了?合成笔画不需要资源来计算?现在的 TrueType字体的渲染都存储的有合成后的bitmap作为缓冲,更不要说笔画合成这更困难的了。另:你以为文泉驿黑体是怎么弄出来的?还不是拆笔 划?

20、我有这样的想法,不管中文英文,都能表达语言使用者的意思,所以从基本的语言完备性来说,两种语言都是满足的。但是英文只需要26个基础字符,中文却需要 上千个,这值得去考虑。我觉得中文单字多的优越性在于每个字都能独立表达意思,这使得很多时候生造一个词,即使你完全不理解这个词的意思,但知道每个字的 意思,也能大致猜出来。英文在这种时候就就显得有些无力了。 但是我们也知道英文中有词根词缀。大多数情况下这又能帮助他们去理解生词。所以其实在这上面中文占不到很大的优势。 我认为中文的这种单字特性决定了中华文化崇尚“虚”的特点。这也是古文中单字表意占主要成分的原因。

21、作者的理论不错。原字模的方法仅仅是消耗内存,显示汉字时只需查表,如果是向量表,那就是O(1)的复杂度。“组字”的方法虽然节省了大量内存,正如作者 所说,显示汉字时需要大量的CPU运算。如今内存越来越便宜也越来越大,相对而言CPU仍然是需要竞争的资源。譬如跑一个能要求较高的应用如3D游戏、多 媒体处理等,若在汉字显示上就花费了相当的CPU而导致程序性能严重下降,那么对这些应用而言,这是一个倒退。 同样在嵌入式系统中,CPU比内存也更昂贵。

22、在嵌入系统上,内存是很宝贵的资源,一个GB18030字库就占用10M,要是用完全的unicode的话,占用就更多了。但如果能实现作者所述,那么这样的字库将大大缩小,当然是有价值的事情。
至于计算能力,当然是也是个问题,但有理由相信能顺利解析TrueType字库,这样的计算能力也能顺利解析作者所述汉字字型方案。用曲线表示时,其计算能力要求是差不多的。
可以看到,作者现在还是停留在技术研讨的阶段,远没有做到实用的程度。要是真如作者所述的有那么多优势,当然也有现实意义。但无论如何,这样的研究还是有其意义所在的。

 

我对此文的看法说个切身体会,不知道楼上诸位有没用过linux,用过就知道字体是个大问题! ! ! ! 为了字体,我都搞了n多天了,结果还是因为字库问题,搞的头大,我需要装4g的字库用于工作设计用的…………所以对我来说,我非常期待! ! ! ! ! ps:“八卦“状键盘,这想法太棒了! ! ! 恰好解决了笔画的八方和内外位置问题啊! ! !