原版地址: https://github.com/overtrue/pinyin

需下载原版,data词库放在同目录下 

<?php
/*
### 拼音数组```php
$pinyin = new Pinyin(); // 默认$pinyin->convert('带着希望去旅行,比到达终点更美好');
// ["dai", "zhe", "xi", "wang", "qu", "lv", "xing", "bi", "dao", "da", "zhong", "dian", "geng", "mei", "hao"]$pinyin->convert('带着希望去旅行,比到达终点更美好', PINYIN_UNICODE);
// ["dài","zhe","xī","wàng","qù","lǚ","xíng","bǐ","dào","dá","zhōng","diǎn","gèng","měi","hǎo"]$pinyin->convert('带着希望去旅行,比到达终点更美好', PINYIN_ASCII);
//["dai4","zhe","xi1","wang4","qu4","lv3","xing2","bi3","dao4","da2","zhong1","dian3","geng4","mei3","hao3"]
```选项:|      选项      | 描述                                                |
| -------------  | ---------------------------------------------------|
| `PINYIN_NONE`   | 不带音调输出: `mei hao`                           |
| `PINYIN_ASCII`  | 带数字式音调:  `mei3 hao3`                    |
| `PINYIN_UNICODE`  | UNICODE 式音调:`měi hǎo`                    |### 生成用于链接的拼音字符串```php
$pinyin->permalink('带着希望去旅行'); // dai-zhe-xi-wang-qu-lv-xing
$pinyin->permalink('带着希望去旅行', '.'); // dai.zhe.xi.wang.qu.lv.xing
```### 获取首字符字符串```php
$pinyin->abbr('带着希望去旅行'); // dzxwqlx
$pinyin->abbr('带着希望去旅行', '-'); // d-z-x-w-q-l-x
```### 翻译整段文字为拼音将会保留中文字符:`,。 ! ? : “ ” ‘ ’` 并替换为对应的英文符号。```php
$pinyin->sentence('带着希望去旅行,比到达终点更美好!');
// dai zhe xi wang qu lv xing, bi dao da zhong dian geng mei hao!$pinyin->sentence('带着希望去旅行,比到达终点更美好!', true);
// dài zhe xī wàng qù lǚ xíng, bǐ dào dá zhōng diǎn gèng měi hǎo!
```### 翻译姓名姓名的姓的读音有些与普通字不一样,比如 ‘单’ 常见的音为 `dan`,而作为姓的时候读 `shan`。```php
$pinyin->name('单某某'); // ['shan', 'mou', 'mou']
$pinyin->name('单某某', PINYIN_UNICODE); // ["shàn","mǒu","mǒu"]
```## 在 Laravel 中使用独立的包在这里:[overtrue/laravel-pinyin](https://github.com/overtrue/laravel-pinyin)## Contribution
欢迎提意见及完善补充词库 [`overtrue/pinyin-dictionary-maker`](https://github.com/overtrue/pinyin-dictionary-maker/tree/master/patches) :kiss:## 参考- [详细参考资料](https://github.com/overtrue/pinyin-resources)# License[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fovertrue%2Fpinyin.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fovertrue%2Fpinyin?ref=badge_large)
*/
class Pinyin
{const NONE = 'none';const ASCII = 'ascii';const UNICODE = 'unicode';protected $segmentName = 'words_%s';protected $path = '';/*** Punctuations map.** @var array*/protected $punctuations = array(',' => ',','。' => '.','!' => '!','?' => '?',':' => ':','“' => '"','”' => '"','‘' => "'",'’' => "'",);/*** Constructor.**/public function __construct(){$this->path = dirname(__FILE__).'/data';}/*** Convert string to pinyin.** @param string $string* @param string $option** @return array*/public function convert($string, $option = self::NONE){$pinyin = $this->romanize($string);return $this->splitWords($pinyin, $option);}/*** Convert string (person name) to pinyin.** @param string $stringName* @param string $option** @return array*/public function name($stringName, $option = self::NONE){$pinyin = $this->romanize($stringName, true);return $this->splitWords($pinyin, $option);}/*** Return a pinyin permalink from string.** @param string $string* @param string $delimiter** @return string*/public function permalink($string, $delimiter = '-'){return implode($delimiter, $this->convert($string, false));}/*** Return first letters.** @param string $string* @param string $delimiter** @return string*/public function abbr($string, $delimiter = ''){return implode($delimiter, array_map(function ($pinyin) {return $pinyin[0];}, $this->convert($string, false)));}/*** Chinese phrase to pinyin.** @param string $string* @param string $delimiter* @param string $option** @return string*/public function phrase($string, $delimiter = ' ', $option = self::NONE){return implode($delimiter, $this->convert($string, $option));}/*** Chinese to pinyin sentense.** @param string $sentence* @param bool   $withTone** @return string*/public function sentence($sentence, $withTone = false){$marks = array_keys($this->punctuations);$punctuationsRegex = preg_quote(implode(array_merge($marks, $this->punctuations)), '/');$regex = '/[^üāēīōūǖáéíóúǘǎěǐǒǔǚàèìòùǜɑa-z0-9'.$punctuationsRegex.'\s_]+/iu';$pinyin = preg_replace($regex, '', $this->romanize($sentence));$punctuations = array_merge($this->punctuations, array("\t" => ' ', '  ' => ' '));$pinyin = trim(str_replace(array_keys($punctuations), $punctuations, $pinyin));return $withTone ? $pinyin : $this->format($pinyin, false);}/*** Preprocess.** @param string $string** @return string*/protected function prepare($string){$string = preg_replace_callback('~[a-z0-9_-]+~i', function ($matches) {return "\t".$matches[0];}, $string);return preg_replace("~[^\p{Han}\p{P}\p{Z}\p{M}\p{N}\p{L}\t]~u", '', $string);}/*** Convert Chinese to pinyin.** @param string $string* @param bool   $isName** @return string*/protected function romanize($string, $isName = false){$string = $this->prepare($string);if ($isName) {$string = $this->convertSurname($string);}for ($i = 0; $i < 100; ++$i) {$segment = $this->path.'/'.sprintf($this->segmentName, $i);if (file_exists($segment)) {$dictionary = (array) include $segment;$string = strtr($string, $dictionary);}}return $string;}/*** Convert Chinese Surname to pinyin.** @param string                               $string** @return string*/protected function convertSurname($string){$surnames = $this->path.'/surnames';if (file_exists($surnames)) {$dictionary = (array) include $surnames;foreach ($dictionary as $surname => $pinyin) {if (0 === strpos($string, $surname)) {$string = $pinyin.mb_substr($string, mb_strlen($surname, 'UTF-8'), mb_strlen($string, 'UTF-8') - 1, 'UTF-8');break;}}}     return $string;}/*** Split pinyin string to words.** @param string $pinyin* @param string $option** @return array*/public function splitWords($pinyin, $option){$split = array_filter(preg_split('/[^üāēīōūǖáéíóúǘǎěǐǒǔǚàèìòùǜɑa-z\d]+/iu', $pinyin));if (self::UNICODE !== $option) {foreach ($split as $index => $pinyin) {$split[$index] = $this->format($pinyin, self::ASCII === $option);}}return array_values($split);}/*** Format.** @param string $pinyin* @param bool   $tone** @return string*/protected function format($pinyin, $tone = false){$replacements = array('üē' => array('ue', 1), 'üé' => array('ue', 2), 'üě' => array('ue', 3), 'üè' => array('ue', 4),'ā' => array('a', 1), 'ē' => array('e', 1), 'ī' => array('i', 1), 'ō' => array('o', 1), 'ū' => array('u', 1), 'ǖ' => array('v', 1),'á' => array('a', 2), 'é' => array('e', 2), 'í' => array('i', 2), 'ó' => array('o', 2), 'ú' => array('u', 2), 'ǘ' => array('v', 2),'ǎ' => array('a', 3), 'ě' => array('e', 3), 'ǐ' => array('i', 3), 'ǒ' => array('o', 3), 'ǔ' => array('u', 3), 'ǚ' => array('v', 3),'à' => array('a', 4), 'è' => array('e', 4), 'ì' => array('i', 4), 'ò' => array('o', 4), 'ù' => array('u', 4), 'ǜ' => array('v', 4),);foreach ($replacements as $unicde => $replacement) {if (false !== strpos($pinyin, $unicde)) {$pinyin = str_replace($unicde, $replacement[0], $pinyin).($tone ? $replacement[1] : '');}}return $pinyin;}
}

CN基于词库的中文转拼音优质解决方案,单类单文件版,支持低版本PHP相关推荐

  1. 已解决(Python cn2an库实现中文数字与阿拉伯数字互转)ValueError: mode 仅支持 [‘low‘, ‘up‘, ‘rmb‘, ‘direct‘]

    已解决(Python cn2an库实现中文数字与阿拉伯数字互转)ValueError: mode 仅支持 ['low', 'up', 'rmb', 'direct'] 文章目录 报错内容 报错翻译 报 ...

  2. 前端js实现中文转拼音 --- 完整解决方案

    资料: 使用到的库 :一个实现汉字与拼音互转的小巧web工具库 作者本人的博客园文章:[干货]JS版汉字与拼音互转终极方案,附简单的JS拼音输入法 作者本人的博客文章:[干货]JS版汉字与拼音互转终极 ...

  3. 基于GDAL库,读取海洋风场数据(.nc格式)c++版

    经过这一段时间的对海洋数据的处理,接触了大量的与海洋相关的数据,例如海洋地形.海洋表面温度.盐度.湿度.云场.风场等数据,除了地形数据是grd格式外,其他的都是nc格式的数据.本文将以海洋风场数据为例 ...

  4. 资源警告!有人收罗了40个中文NLP词库,放到了GitHub上

    乾明 编辑整理 量子位 出品 | 公众号 QbitAI 你还在为进行中文NLP找不到词库而发愁吗? 你还在为了从文本中抽取结构化信息而抓耳挠腮吗? 现在,这些症状可以得到缓解了. 最近,在GitHub ...

  5. 深蓝词库转换1.2版本发布——支持紫光拼音和拼音加加

    之前推出了深蓝词库转换工具,受到大家的欢迎,有朋友陆陆续续来信,希望增加一些实用的功能,于是乎今天深蓝词库转换1.2推出.该版本主要实现了3个新功能: 1.支持紫光拼音输入法的词库导入导出. 紫光拼音 ...

  6. 新浪出输入法了,深蓝词库转换更新到1.3.1——增加对新浪拼音输入法的支持

    新浪最近出了自己的输入法,具体介绍我就不说了,参见这里.由于之前一直做深蓝词库转换的工具,目前已经支持了大部分主流的输入法词库的转换,既然出了一个新的输入法,那么肯定要增加对这个输入法的词库的支持了. ...

  7. 新浪出输入法了,深蓝词库转换更新到1.3.1——增加对新浪拼音输入法的支持...

    新浪最近出了自己的输入法,具体介绍我就不说了,参见这里.由于之前一直做深蓝词库转换的工具,目前已经支持了大部分主流的输入法词库的转换,既然出了一个新的输入法,那么肯定要增加对这个输入法的词库的支持了. ...

  8. 紫光华宇拼音输入法使用技巧续——终极紫光词库合集

    接上一篇的<紫光华宇拼音输入法使用技巧> [url]http://netlin.blog.51cto.com/118225/48554[/url] 上一篇,我说到了--紫光华宇拼音输入法V ...

  9. Elasticsearch7.15.2 ik中文分词器 定制化分词器之扩展词库(远程)

    IK分词提供的两个分词器,并不支持一些新的词汇,有时候也不能满足实际业务需要,这时候,我们可以定义自定义词库来完成目标. 文章目录 一.静态web搭建 1. 安装nginx 2. 创建es目录 3. ...

最新文章

  1. python 读取配置文件config_python中读取配置文件ConfigParser
  2. 工厂方法源码解析(jdk+logback)
  3. 数据分析与挖掘实战-家用电器用户行为分析与事件识别
  4. 神奇!一行代码实现删除某集合下标20-30的元素
  5. Cocos2d-x 3.2:通过ClippingNode实现一个功能完善的跑马灯公告(1)
  6. 自旋锁:pthread_spinlock_t,互斥锁:pthread_mutex_t,条件变量:pthread_cond_t,读写锁:pthread_rwlock_t
  7. scala List入门到熟悉
  8. OpenCV 文字绘制——cv::putText详解
  9. 炫酷动态特效HTML实现源码【完整源码分享】
  10. cmd怎么查看当前静态路由_计算机cmd命令之route,查看路由表,或配置一个更有效的路由...
  11. 10月20日前!武汉市科技成果转化中试平台(基地)备案申报条件及流程梳理
  12. 计算机毕业生怎么参加清华暑校,上完清华暑校后,怎么才能进清华?
  13. 计算机系高考激励的句子,高考激励人心的句子
  14. 家具行业APP定制开发需具备哪些功能
  15. 【新知实验室】腾讯云TRTC实时音视频体验
  16. STM32智能开关窗设备
  17. setInterval 函数的使用例子
  18. TOOM网上舆情应急处置预案,怎么加强网上舆情监控?
  19. HTML+CSS+JAVASCRIPT简介
  20. 王利芬对话蒲易 ——花店如何成为高端电商?_北京_歇会儿网

热门文章

  1. import torch ModuleNotFoundError: No module named ‘torch‘
  2. hibernate学习之四——Query和Criteria接口
  3. office2016首要事项
  4. Kalman实际应用总结
  5. T1214 鸣人和佐助——dfs、bfs
  6. 鸿蒙分期靠谱吗,花呗借呗“陷阱”正式被确认,这两个禁忌不要触碰,别说没提醒你...
  7. linux screen 环境变量,Linux 下 screen 使用方法
  8. 洗地机怎么选?洗地机品牌排行榜
  9. MS Office 开发工具--VBA
  10. Layui数据表格的引用