本文简化字版由OpenCC转换
Open Chinese Convert(OpenCC)是一个中文简繁转换开源项目,提供简繁转换词库和可供程序调用的程序库(libopencc)。现托管于Google Code。
关于简繁转换
由于种种历史问题,汉字系统被割裂为「简化字」和「繁体字」,然而「简化字」并不能完全取代原有的繁体字,一方面是由于古籍、书法、文字学的研究需要,另一方面则是港澳台日韩越及其他海外地区「简化字」并不通行。随着信息技术的发展,这方面的需求不断突出,因此简繁转换便成了一个信息技术界和中文研究界需要共同解决的问题。
精确的简繁转换一直以来是一个难题,其原因主要是简体和繁体互有一对多的现象,而具体用字对应规则需要联系上下文分析语义才能确定。而广义的「简繁转换」,还包括了不同地域习惯用字和用词差异的转换(如「软件」「软体」等),甚至词和词之间也有「一对多」的关系,因而使转换更加复杂。目前现有的简繁转换软件,即使是专业的(收费),也不能完全解决这些问题,在开源界能接近其水平的更是寥寥无几。因此OpenCC的诞生,就是为了尽可能地解决这个难题。
一些概念
汉字(据不完全统计)有十万之众,「简化字」非但没有减少汉字数量,反而使汉字数量更加庞大。虽然日常用到的字祇有数千,且有着复杂的关系。要做好简繁转换,必须理解这之中的许多关系与微妙的差别。
「异体字」
由于汉字造字年代久远,且非一人一时之所造,通行时间又为世界之最,流变众多,许多字并非祇有一种写法,如「为为」「朵朶」「画画」「污汚污」等等。这些字祇是写法不同,而没有任何表意的区别,因此被称为「异体字」。狭义的异体字是没有任何表意的区别的一组字,而广义的异体字还包含了表意范围有交叉或所属关系的字以及「通假字」。下文中的异体字全部是狭义的异体字。
需要注意的是「通假字」祇是同音假借,本字和被假借字可能意义完全不同,因而不是异体字。而「讹字」和「俗字」(绝大多数)则属于异体字。例如「系」字在传抄的时候,左上角被写成了「车」,然后以讹传讹,就产生了讹字「繋」。「俗字」或称「俗体字」是民间通行的一种变体,许多俗字就是笔画较为减省的异体字,也有很多来自讹字。
「繁体字」「简体字」「简化字」
严格地说,「繁体字」和「简体字」是异体字关系,「繁体字」是相对「简体字」而创造的概念。「简体字」这一名称,始见于1935年民国教育部总结的一批「古已有之」、「历代通行」的「笔划较少的」异体字。这批简体字主要搜集自民间话本「述而不作」地整理出,没有类推造字。
「简化字」,顾名思义则是人工简化的字,这个概念的产生与近代「汉字改革」思潮有关,最早见于钱玄同的文中。1964年,中国文字改革委员会出版了《简化字总表》(不是「简体字总表」),简化字开始在中国大陆流行开来。1977年,中央又发布《第二次汉字简化方案》,1986年被废除,史称「二简字」。慢慢「简化字」这一概念就被固定下来,专指中国大陆推行的简化字。
可见「简体字」并不等于「简化字」,前者强调异体关系,后者强调简化关系。而现在这两个概念趋于混淆,乃至用「简体字」表达「简化字」的意义更常见,其主要原因是由于另一个词汇「简体中文」的出现。比起中文的混淆,英文解释更加清楚:「简化字」的英文翻译是「simplified Chinese characters」(简化过的汉字),simplified源自动词simplify简化。「简体字」由于概念不常见,没有公认的正式翻译,有一种译 作「simpler variants of Chinese characters」(较简单的汉字变体)。
由于「简体字」和「繁体字」本身存在对立关系,繁体字也就慢慢变成专指港澳台用字了。事实上港澳台用字也不尽相同,如「里」「里」等,于是又有了「港澳繁体」「台湾正体」等名字。
已有项目的缺陷
OpenCC的的诞生并不是轮子的重复发明,而是为了实现一个更好的简繁转 换计划,因为目前已有的各种项目,或多或少地有着各种缺陷。
Wikipedia
毫无疑问最广为人知的简繁转换项目莫过于Wikipedia提供的简繁转换表。Wikipedia有效地利用了分散的人力,整理出了一个数量不小的表格,其优点在于*详细地区分了简繁转换和地域转换。但是也有许多不足:
- 异体字处理混乱,「一简对多异」被当作「一简对多繁」处理。如「为」对应「为为」。
- 一简对多繁有众多争议,处理不统一,时分时不分。如「卷烟」「烟卷」分别用了「烟」和「烟」。
- 有大量不成词的「词」,祇为正向最大转换优化,不兼容别的分词算法。如「们斗了胆」「们斗了胆」。
- 专为Wikipedia设计,依赖编辑的人工干预。
- 一般非地域转换中「着」被并入「著」,不符合香港、海外等地用字习惯。
cconv
cconv是另一个简繁转换的项目,较早开发,有一定的用户。缺陷很明显:
- 简繁转换和地域转换混同一谈。
- 完全没有处理异体字。
- 功能杂糅了编码转换和简繁转换,不易剥离。
- 简繁转换数据被编译到库中,无法修改和扩展(除非重新编译)。
- GPL协议发布,对开发者限制较大。
- 目前长期无人维护。
OpenCC 的特点和方法
OpenCC特点
- 严格区分「一简对多繁」和「一简对多异」。
- 完全兼容异体字,可以实现动态替换。
- 严格审校一简对多繁词条,原则为「能分则不合」。
- 使用歧义分割+最少分词算法,尽可能从技术上优化转换效果。
- 词库和程序库完全分离,可以自由修改、导入、扩展。
- 以Apache开源协议发布,使开发者真正可以自由使用。
- 已经用于ibus-pinyin的繁体模式输入,由ibus开发组长期协助维护。
- 支持 C,C++,Python,PHP等多种语言调用,命令行直接调用,以及图形界面(开发中)。
解释
OpenCC有独立的「一简对多繁」表、「一繁对多简」表和异体字表,保证没有混杂着异体字。而且可以方便地自定义地区习惯使用的异体字,兼容台湾、香港和海外地区不同的习惯。
简繁转换词库中数万词汇经过校对,最大可能地保证转换准确性,用字原则为「能分则不合」。举例如「台」「台」「台」,在台湾习惯中,有合流为「台」的现象,但其意义界限明显,故OpenCC从分,(具体见此列表)。根据不同的习惯,也可以设定为合流。
简繁转换功能的核心算法为歧义分割+最少分词,简单解释为首先扫描待转换字符串,分割成若干个有歧义的区间(即每个区间内可以有多种分词方案),然后对每个区间的字内构造图论模型,使用最短路径算法求出最优分割方案,然后对分词的结果每部分进行转换。这种算法不仅准确性高于直接正向扫描转换,而且速度也很快,测试中每秒可以转换8.4MB文本(UTF8编码,内容为小说,速度仅供参考)。
OpenCC把词库和程序库完全分离,程序库可以读取两种格式的词库,一种为Tab分割的平面文本,一种为OpenCC专门优化过的数据结构,ocd格式。平面文本数据库格式方便阅读和修改,ocd格式是OpenCC构造出的Double Array Trie数据结构,使用其可以大大提供转换速度。OpenCC还提供了词库转换程序,可以自由在两种格式之间转换。
OpenCC程序库提供了C,C++,Python,PHP等语言的接口,便于在任何环境下使用,此外还提供了命令行直接调用的模式,图形界面也在开发当中。
词库来源
OpenCC的繁体到简体转换的词库是由单字对应人工校对后生成的,单字对应数据来自Unicode数据库以及人工的核对和修改。简体到繁体的词库由大量的繁体语料自动转换到简体然后校对而成。
参考资料
- http://www.pkucn.com/forumdisplay.php?fid=144&page=1
- http://input.foruto.com/ccc/data/proof/02.htm
- http://www.mdbg.net/chindict/chindict.php
- http://zh.wikipedia.org/wiki/
欢迎试用和加入
开源非一人之力,有众人的支持才能做得更好。欢迎有意者加入开发,欢迎中文专业者和爱好者加入词库审校工作。
如有任何问题或建议,请到 http://code.google.com/p/open-chinese-convert/issues/entry 报告。或者可以直接与BYVoid取得联系。
上次修改时间 2017-02-03