今天找资料,又一次发现了 'overtrue(安正超)' 的中文转拼音扩展。项目中,日后可能会涉及 '汉字转拼音',而让我想汉字转拼音,我居然没有想起这个扩展。想的是之前自己项目中是如何实现的!
为了加深下印象,特此做次笔记,且测试下:
github地址:
https://github.com/overtrue/pinyin
/*
这里得再跟大家提一个扩展,也是overtrue的 'easywechat',应该是将微信的所有接口全部封装了下,采用laravel类似的写法!我也是通过这个才知道了 'overtrue'
现在我项目中都是使用的它。
官网:
easywechat.org
github地址:
https://github.com/overtrue/wechat
*/
下面开始笔记:
安装:
composer require "overtrue/pinyin:~3.0"
使用:
1>几种方案,根据服务器性能和转换性能,自己权衡
内存型 - 适用于服务器内存空间较富余,优点:转换快
小内存型 - (默认),适用于内存比较紧张的环境,优点:占用内存小,转换不如内存型快
I/0型,适用于虚拟机,内存限制比较严格环境。优点:非常微小内存消耗。缺点:转换慢,不如内存型转换快,php >= 5.5
2>使用
use Overtrue\Pinyin\Pinyin;
// 1.3种方式
$pinyin = new Pinyin();
$pinyin = new Pinyin('Overtrue\Pinyin\MemoryFileDictLoader');
$pinyin = new Pinyin('Overtrue\Pinyin\GeneratorFileDictLoader');
// 2.生成拼音数组
$pinyin->convert('董学敏'); // ['dong', 'xue', 'min']
$pinyin->convert('董学敏', PINYIN_UNICODE); // ['dǒng', 'xué', 'mǐn']
$pinyin->convert('董学敏', PINYIN_ASCII); // ['dong3', 'xue2', 'min3']
// 3.生成拼音连接
$pinyin->permalink('董学敏'); // dong-xue-min(默认 '-' 连接)
$pinyin->permalink('董学敏', '.'); // dong.xue.min(使用 '.' 连接)
// 4.生成拼音首字母
$pinyin->abbr('董学敏'); // dxm(默认 '' 连接)
$pinyin->abbr('董学敏', '-'); // d-x-m(使用 '-' 连接)
// 5.翻译整段文字,将会保留 ',。!?:“”‘’' 中文标点为对应的英文标点
$pinyin->sentence('你好,世界!'); // ni hao, shi jie!
$pinyin->sentence('你好,世界!', true); // 第二个参数,表示生成 'UNICODE编码' 的拼音(有声调)
// 6.翻译姓名,姓名读音和普通字可能不同,例如:'单',普通是 'dan',作为姓是 'shan'
$pinyin->name('单某某'); // ['shan', 'mou', 'mou']
$pinyin->name('单某某', PINYIN_UNICODE); // 第二个参数,表示生成 'UNICODE编码' 的拼音(有声调)
源码:
data
surnames // 姓对应的拼音
words_0 // 汉字 <-> 拼音 字典
words_2 // 汉字 <-> 拼音 字典
...
src
DicLoaderInterface.php // 字典文件加载接口
FileDictLoader.php // 小内存型加载
GeneratorFileDictLoader.php // I/0型加载
MemoryFileDictLoader.php // 内存型加载
Pinyin.php // 中文转拼音核心类
类方法:
convert($string, $option = self::NONE)
name($stringName, $option = self::NONE)
permalink($string, $delimiter = '-') // $delimiter 限制为 '_', '-', '.', ''
abbr($string, $delimiter = '')
phrase($string, $delimiter = ' ', $option = self::NONE) // 和 permalink 相似,不过可以返回3种类型
sentence($sentence, $withTone = false) // withTone 表示否是返回 'UNICODE编码' 的声调
splitWords($pinyin, $option)
类常量:(转拼音的几个模式)
define('PINYIN_NONE', 'none'); // 不带音调: dong xue min
define('PINYIN_ASCII', 'ascii'); // 带数字式音调:dong3 xue2 min3
define('PINYIN_UNICODE', 'unicode'); // UNICODE式音调:dǒng xué mǐn
class Pinyin
{
const NONE = 'none';
const ASCII = 'ascii';
const UNICODE = 'unicode';
convert($string, $option = self::NONE)
...
}
$pinyin->convert('董学敏', PINYIN_UNICODE)
/*
注意:
上面为什么我把这个常量列出来?
在类内部使用 'self::NONE'
在类外部使用 PINYIN_NONE
(这应该是个什么设计模式,可惜我代码水平目前有点次,也没时间研究)
*/
考虑:
只针对姓名,进行了多音字处理!
不知道各种中文的多音字,能不能处理!
测试了2个:
和面,和平 --------> 正确!!
沉着,着急,拿着东西 --------> 正确!!
结语:
测试了下,发现真心不错!!很给力!!
想了下更高级的场景:
搜索!!!
我们可以通过它,实现 '拼音搜索' 和 '中文搜索'
这里再告诉大家一个应用:
'ElasticSearch' - 搜索引擎,全文搜索等各种,开源软件,等我有时间了,希望能运用到项目中,有各种插件,中文分词等
(拼音、拼音分词插件不知道有没有,没有的话,思考结合 此插件,自己能不能处理!!)
PHP汉字转拼音笔记.txt
最新推荐文章于 2023-09-29 12:49:10 发布