支持汉转拼和拼音分词的PHP中文工具类ChineseUtil


Posted in PHP onFebruary 23, 2018

PHP 中文工具类,支持汉字转拼音、拼音分词、简繁互转。

PHP Chinese Tool class, support Chinese pinyin, pinyin participle, simplified and traditional conversion

目前本类库拥有的三个功能,都是在实际开发过程中整理出来的。这次使用的数据不同于以前我开源过汉字转拼音和简繁互转,数据都是从字典网站采集下来的,比以前的数据更加准确。

由于中文的博大精深,字有多音字,简体字和繁体字也有多种对应。并且本类库返回的所有结果,均为包含所有组合的数组。

本类库字典数据加载后会占用 40+ MB 内存,在访问量大的接口要使用此类汉字转拼音、繁简转换功能时,推荐用 Swoole 开发一个异步服务程序,只需加载一次数据,就可以持续高效地为你提供服务。

使用说明

Composer 直接安装

composer require yurunsoft/chinese-util

Composer 项目配置引入

"require": {
  "yurunsoft/chinese-util" : "~1.0"
}

功能

汉字转拼音

use \Yurun\Util\Chinese;
$string = '恭喜??!把我翻译成拼音看下?';
echo $string, PHP_EOL;

echo '所有结果:', PHP_EOL;
var_dump(Chinese::toPinyin($string));

echo '全拼:', PHP_EOL;
var_dump(Chinese::toPinyin($string, Pinyin::CONVERT_MODE_PINYIN));

echo '首字母:', PHP_EOL;
var_dump(Chinese::toPinyin($string, Pinyin::CONVERT_MODE_PINYIN_FIRST));

echo '读音:', PHP_EOL;
var_dump(Chinese::toPinyin($string, Pinyin::CONVERT_MODE_PINYIN_SOUND));

echo '读音数字:', PHP_EOL;
var_dump(Chinese::toPinyin($string, Pinyin::CONVERT_MODE_PINYIN_SOUND_NUMBER));

echo '自选 + 自定义分隔符:', PHP_EOL;
var_dump(Chinese::toPinyin($string, Pinyin::CONVERT_MODE_PINYIN | Pinyin::CONVERT_MODE_PINYIN_SOUND_NUMBER, '/'));
/**
输出结果:
array(4) {
 ["pinyin"]=>
 array(1) {
  [0]=>
  string(58) "gong xi fa cai ! ba wo fan yi cheng pin yin kan xia ? "
 }
 ["pinyinSound"]=>
 array(4) {
  [0]=>
  string(63) "gōng xǐ fā cái bǎ wǒ fān yì chéng pīn yīn kàn xià "
  [1]=>
  string(63) "gōng xǐ fā cái bà wǒ fān yì chéng pīn yīn kàn xià "
  [2]=>
  string(63) "gōng xǐ fā cái bǎ wǒ fān yì chéng pīn yīn kān xià "
  [3]=>
  string(63) "gōng xǐ fā cái bà wǒ fān yì chéng pīn yīn kān xià "
 }
 ["pinyinSoundNumber"]=>
 array(4) {
  [0]=>
  string(63) "gong1 xi3 fa1 cai2 ba3 wo3 fan1 yi4 cheng2 pin1 yin1 kan4 xia4 "
  [1]=>
  string(63) "gong1 xi3 fa1 cai2 ba4 wo3 fan1 yi4 cheng2 pin1 yin1 kan4 xia4 "
  [2]=>
  string(63) "gong1 xi3 fa1 cai2 ba3 wo3 fan1 yi4 cheng2 pin1 yin1 kan1 xia4 "
  [3]=>
  string(63) "gong1 xi3 fa1 cai2 ba4 wo3 fan1 yi4 cheng2 pin1 yin1 kan1 xia4 "
 }
 ["pinyinFirst"]=>
 array(1) {
  [0]=>
  string(34) "g x f c ! b w f y c p y k x ? "
 }
}
全拼:
array(1) {
 ["pinyin"]=>
 array(1) {
  [0]=>
  string(58) "gong xi fa cai ! ba wo fan yi cheng pin yin kan xia ? "
 }
}
首字母:
array(1) {
 ["pinyinFirst"]=>
 array(1) {
  [0]=>
  string(34) "g x f c ! b w f y c p y k x ? "
 }
}
读音:
array(1) {
 ["pinyinSound"]=>
 array(4) {
  [0]=>
  string(63) "gōng xǐ fā cái bǎ wǒ fān yì chéng pīn yīn kàn xià "
  [1]=>
  string(63) "gōng xǐ fā cái bà wǒ fān yì chéng pīn yīn kàn xià "
  [2]=>
  string(63) "gōng xǐ fā cái bǎ wǒ fān yì chéng pīn yīn kān xià "
  [3]=>
  string(63) "gōng xǐ fā cái bà wǒ fān yì chéng pīn yīn kān xià "
 }
}
读音数字:
array(1) {
 ["pinyinSoundNumber"]=>
 array(4) {
  [0]=>
  string(63) "gong1 xi3 fa1 cai2 ba3 wo3 fan1 yi4 cheng2 pin1 yin1 kan4 xia4 "
  [1]=>
  string(63) "gong1 xi3 fa1 cai2 ba4 wo3 fan1 yi4 cheng2 pin1 yin1 kan4 xia4 "
  [2]=>
  string(63) "gong1 xi3 fa1 cai2 ba3 wo3 fan1 yi4 cheng2 pin1 yin1 kan1 xia4 "
  [3]=>
  string(63) "gong1 xi3 fa1 cai2 ba4 wo3 fan1 yi4 cheng2 pin1 yin1 kan1 xia4 "
 }
}
自选 + 自定义分隔符:
array(2) {
 ["pinyin"]=>
 array(1) {
  [0]=>
  string(58) "gong/xi/fa/cai/!/ba/wo/fan/yi/cheng/pin/yin/kan/xia/?/"
 }
 ["pinyinSoundNumber"]=>
 array(4) {
  [0]=>
  string(63) "gong1/xi3/fa1/cai2/ba3/wo3/fan1/yi4/cheng2/pin1/yin1/kan4/xia4/"
  [1]=>
  string(63) "gong1/xi3/fa1/cai2/ba4/wo3/fan1/yi4/cheng2/pin1/yin1/kan4/xia4/"
  [2]=>
  string(63) "gong1/xi3/fa1/cai2/ba3/wo3/fan1/yi4/cheng2/pin1/yin1/kan1/xia4/"
  [3]=>
  string(63) "gong1/xi3/fa1/cai2/ba4/wo3/fan1/yi4/cheng2/pin1/yin1/kan1/xia4/"
 }
}
 * /

拼音分词

use \Yurun\Util\Chinese;
$string2 = 'xianggang';
echo '"', $string2, '"的分词结果:', PHP_EOL;
var_dump(Chinese::splitPinyin($string2));
/**
输出结果:
"xianggang"的分词结果:
array(2) {
 [0]=>
 string(12) "xi ang gang "
 [1]=>
 string(11) "xiang gang "
}
 * /

简繁互转

use \Yurun\Util\Chinese;
$string3 = '中华人民共和国!恭喜??!';
echo '"', $string3, '"的简体转换:', PHP_EOL;
var_dump(Chinese::toSimplified($string3));
echo '"', $string3, '"的繁体转换:', PHP_EOL;
var_dump(Chinese::toTraditional($string3));
/**
输出结果:
"中华人民共和国!恭喜??!"的简体转换:
array(1) {
 [0]=>
 string(39) "中华人民共和国!恭喜发财!"
}
"中华人民共和国!恭喜??!"的繁体转换:
array(1) {
 [0]=>
 string(39) "中?人民共和??」?舶l?!"
}
 * /
PHP 相关文章推荐
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
thinkPHP多语言切换设置方法详解
Nov 11 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 #PHP
php 广告点击统计代码(php+mysql)
Feb 21 #PHP
详细解读php的命名空间(二)
Feb 21 #PHP
详细解读php的命名空间(一)
Feb 21 #PHP
thinkphp5 migrate数据库迁移工具
Feb 20 #PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 #PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 #PHP
You might like
如何让CI框架支持service层
2014/10/29 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
Python实现比较两个列表(list)范围
2015/06/12 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
历史学专业推荐信
2013/11/06 职场文书
代理人委托书
2014/08/01 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
实习单位推荐信
2015/03/27 职场文书
员工手册董事长致辞
2015/07/29 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis