支持汉转拼和拼音分词的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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
PHP学习笔记 (1) 环境配置与代码调试
Jun 19 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php中 $$str 中 "$$" 的详解
Jul 06 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
php测试kafka项目示例
Feb 06 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
BBS(php & mysql)完整版(二)
2006/10/09 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
JS hashMap实例详解
2016/05/26 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
Python计算回文数的方法
2015/03/11 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
建筑班组长岗位职责
2014/01/02 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript