中文进行繁简转换

标签: 程序开发 PHP Python | 发表时间:2016-09-19 19:34 | 作者:标点符
出处:http://www.biaodianfu.com

中文的简繁转换看起来是一个简单的工作,但是细想下还是有一些问题的,因为字符间并不是简单的一一对应,不仅存在一简对多繁,也存在多简对一繁。比如:

头发发展 -> 頭髮發展
萝卜卜卦 -> 蘿蔔卜卦
秒表表达 -> 秒錶表達
晾干乾坤 -> 晾乾乾坤

要正确完成这样的转换,就要在单字对应关系之外加上词组对应。可以常用的工具有:Office Word、Google翻译及ConvertZ,除了字形以外,不同地区有些名称对应的叫法也不一样,如中国大陆说的计算机「程序」,台湾就是「程式」。为了满足大陆、台湾、香港、新加坡和马来西亚等不同地区中文用户的需求,在ZhengZhu等维基人的努力下,维基百科自2004年底开始逐步发展出一套比较成熟的简繁转换方案。分别记录简繁字体的对应关系和不同地区的用词习惯。这个办法的实用性已在现有30万中文维基条目的应用中得到验证。其不同地区包括:「大陆简体」、「马新简体」、「港澳繁体」、「台湾正体」等

中文维基目前正在使用的内置简繁转换表地址在这里: https://doc.wikimedia.org/mediawiki-core/REL1_25/php/ZhConversion_8php_source.html或从 MediaWiki 源码包中的 includes/ZhConversion.php文件获取。

这个php文件包含了$zh2Hant、$zh2Hans、$zh2CN、$zh2HK、$zh2TW、$zh2SG这6个数组,分别对应中文->繁体、中文->简体、中文->大陆用词、中文->香港用词、中文->台湾用词和中文->新加坡用词的转换规则。例如从大陆简体到台灣正體的转换就是先将中文(允许简繁混用)转为繁体,再替换其中的台湾用词。如果不涉及复杂长句的简单应用,实现起来十分容易,将对应关系读入字典,用最大正向匹配算法查找词组替换就好。

PHP 实现

我们将Mediawiki上面的代码拷贝下来,然后保存为:ZhConversion.php,这仅仅是一些数组,我们还需要做进一步的处理,我们新建一个转换文件:convert.php,然后引入ZhConversion.php文件,自定义转换函数,通过strtr() 函数转换字符串中特定的字符。

global $zh2Hans, $zh2Hant, $zh2TW, $zh2CN, $zh2SG, $zh2HK;
require_once( dirname(__FILE__) . '/ZhConversion.php');

function zhconversion($str, $variant) {
    global $wpcc_langs;
    return $wpcc_langs[$variant][0]($str);
}

function zhconversion_hant($str) {
    global $zh2Hant;
    return strtr($str, $zh2Hant );
}

function zhconversion_hans($str) {
    global $zh2Hans;
    return strtr($str, $zh2Hans);
}

function zhconversion_cn($str) {
    global $zh2Hans, $zh2CN;
    return strtr(strtr($str, $zh2CN), $zh2Hans);
}

function zhconversion_tw($str) {
    global $zh2Hant, $zh2TW;
    return strtr(strtr($str, $zh2TW), $zh2Hant);
}

function zhconversion_sg($str) {
    global $zh2Hans, $zh2SG;
    return strtr(strtr($str, $zh2SG), $zh2Hans);
}

function zhconversion_hk($str) {
    global $zh2Hant, $zh2HK;
    return strtr(strtr($str, $zh2HK), $zh2Hant);
}

function zhconversion_zh($str) {
    return $str;
}

最后,在需要使用的页面调用函数即可。

Python 实现

zhconv 供基于 MediaWiki 词汇表的最大正向匹配简繁转换,支持地区词转换:zh-cn, zh-tw, zh-hk, zh-sg, zh-hans, zh-hant。Python 2、3通用。与其他Python中文简繁转换程序相比:

  • langconv太复杂,而且不支持地区词转换
  • Pyzh 简单,只支持字对字
  • OpenCCopencc-python是一个比较完整准确的解决方案,但不适合纯 Python 环境和对精确度要求不高的需要。

下载源码: https://github.com/gumblex/zhconv,解压后转到相应目录,执行:

python setup.py install

使用方法:

# -*- coding: utf-8 -*-

import zhconv
print zhconv.convert(u'大衛碧咸在寮國見到了布希','zh-cn')

注意:Python 2下必须是unicode字符串,python3下必须str

Ruby 实现

https://github.com/siuying/zhconv

目前的程序是基于最大正向匹配实现的,如果需要更高的要求,可以引入中文分词技术。

相关 [中文 繁简转换] 推荐:

中文进行繁简转换

- - 标点符
中文的简繁转换看起来是一个简单的工作,但是细想下还是有一些问题的,因为字符间并不是简单的一一对应,不仅存在一简对多繁,也存在多简对一繁. 头发发展 -> 頭髮發展 萝卜卜卦 -> 蘿蔔卜卦 秒表表达 -> 秒錶表達 晾干乾坤 -> 晾乾乾坤. 要正确完成这样的转换,就要在单字对应关系之外加上词组对应.

Twitter 中文版

- 幻幽 or A書 - Gea-Suan Lin's BLOG
前幾天 Twitter 推出了中文版 (包括繁體與簡體):「Five new languages」. 對岸的市場可能還是進不去,但在台灣會加速 Plurk 的死亡… 從 Google+ 的出現以後就愈來愈明顯了,現在 Microblogging 的大魔頭再加入戰局,應該會更快….

《Modern Perl》中文版

- Krevy - LinuxTOY
《Modern Perl》是由 chromatic 所著的一本 Perl 新书. 该书对 Perl 5 的特性进行了精彩的总结, 介绍 Perl 的惯用法,不错的 CPAN 模块,以及一些非常实用的建议. 总之,《Modern Perl》将教你使用 Modern 方法来进行 Perl 5 编程. 感谢 horus,现在我们可以读到《Modern Perl》的中文版.

老外学中文

- 俊超 - 爱胡扯

flyway中文教程

- - 研发管理 - ITeye博客
前言:最近工作上遇到个问题,项目开发过程中,开发代码可以通过svn来版本控制,但数据库又该如何来管理呢. 多个人接触数据库,当对表、字段或数据修改后,又怎么来同步呢. 经过苦寻,发现了个叫flyway的开源项目:http://flywaydb.org/,java编写,官方的介绍就是我的初衷,岂能不心动.

Twitter Bootstrap 中文帮助文档/中文手册/中文教程

- - 博客园_梦想天空
   Bootstrap 是基于 HTML,CSS,JavaScript 的简洁灵活的流行前端框架及交互组件集,由微博的先驱 Twitter 在2011年8月开源的整套前端解决解决方案. Bootstrap 有非常完备和详尽的使用帮助文档,热心的 @TV来客开发者 翻译成了中文,讨厌英文的朋友有福了.

ResearchBlogging中文版上线

- dwfeng - Solidot
致力于学术研究博客群的ResearchBlogging,现在正式开通中文频道,并接受中文博客的申请. 中文版取名为“研客”,旨在中文博客社区中收集那些有思想的、由相关学科的行内人认真撰写的讨论学术研究工作的博文. 一般媒体的科学报道往往挑选有公众效应和科普意义的研究工作进行浅显易懂的解释,有时甚至带有偏差或错误.

《Dive into Python 3》中文版

- hama - Wow! Ubuntu
Dive Into Python 是一份很知名的 Python 入门教程,由 Mark Pilgrim 编写,用户可以免费获取电子版本,而中文版则由啄木鸟社区翻译发布 [ 英文版 / 中文版 ]. 前阵子,Mark Pilgrim 又发布了 《Dive into Python 3》,此版本的内容涵盖了 Python 3 及其与 Python 2 的区别.

Long time no see,英式中文

- cow - 刁民公園
昨天「星期日檔案」探討港式英語. 節目中好幾個嘉賓包括楊鐵樑先生都說long time no see是港式英語. 楊官的英文程度不會令人懷疑,但long time no see有其背景,不能算作港式英語.

闲侃中文字体

- Yuheng Kuang - 比目鱼博客
1.在平面设计中,“字体”是一项重要的基本功. White 在《平面设计原理》一书中写道:“组成 typography(排印)这个词的词根是 typo (文字)和 graphy (绘画),因此,它的字面意思就是用文字绘画. ” 2.英文字体数量繁多,让人眼花缭乱. 相比之下中文字体的数量非常有限. 原因很容易理解:英文字母少,汉字字数多.