中文进行繁简转换
中文的简繁转换看起来是一个简单的工作,但是细想下还是有一些问题的,因为字符间并不是简单的一一对应,不仅存在一简对多繁,也存在多简对一繁。比如:
头发发展 -> 頭髮發展 萝卜卜卦 -> 蘿蔔卜卦 秒表表达 -> 秒錶表達 晾干乾坤 -> 晾乾乾坤
要正确完成这样的转换,就要在单字对应关系之外加上词组对应。可以常用的工具有: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 简单,只支持字对字
- OpenCC和 opencc-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
目前的程序是基于最大正向匹配实现的,如果需要更高的要求,可以引入中文分词技术。
Related posts: