PHP汉字转拼音笔记.txt

今天找资料,又一次发现了 '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' - 搜索引擎,全文搜索等各种,开源软件,等我有时间了,希望能运用到项目中,有各种插件,中文分词等
		(拼音、拼音分词插件不知道有没有,没有的话,思考结合 此插件,自己能不能处理!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值