ChineseUtil

下载地址:https://github.com/Yurunsoft/ChineseUtil

另外一个中文转拼音工具:https://github.com/overtrue/pinyin

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

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

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

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

本类库字典数据总共收录 73925 个汉字,包括:3955 个简体字,1761 个繁体字,68209 个其它汉字。

内存占用

类库第一个版本发布开始,群里朋友就展开了激烈的讨论,最大的问题就在于内存占用以及性能问题上。经过我不断尝试几种方案,最终决定设置三种模式,来适应不同用户之间的需求。

  • 性能模式 (Memory),使用 SQLite 作为数据载体,一次性加载所有数据到变量,内存占用高(80 MB),性能最佳。
  • 通用模式 (SQLite),使用 SQLite 作为数据载体,每次查询都通过 SQL 查询,内存占用低(600+ KB),性能中等。
  • 兼容模式 (JSON),使用精简过的 JSON 数据作为数据载体,一次性加载所有数据到变量,内存占用中(28 MB),性能差。

内存占用量以实际为准,根据版本、扩展等环境的不同,占用的内存容量不一样,上述值为我电脑上的情况,仅供参考。

性能模式适合运行于持久性服务,推荐使用 Swoole 开发服务程序,只加载一次数据,无需重复加载。当然,你服务器内存足够大,或者并发访问不高也可以使用这种模式。

性能模式和通用模式需要 PDO 和 PDO_SQLITE 扩展支持。

兼容模式无扩展依赖,由于精简了数据,一些拼音结果需要经过代码计算处理才可以得出,所以性能较差。

默认情况下,优先使用通用模式,如果环境不支持 PDO 将采用兼容模式。

你可以在未执行任何初始化或者转换处理之前,设置使用何种模式运行。

// 设为性能模式
Chinese::setMode('Memory');
// 设为通用模式
Chinese::setMode('SQLite');
// 设为兼容模式
Chinese::setMode('JSON');

无论何种模式,拼音分词所需数据总是从 JSON 数据中加载。

使用说明

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, 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, ' ')); echo '所有结果:', PHP_EOL;
var_dump(Chinese::toPinyin($string));
/**
所有结果:
array(4) {
["pinyin"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(4) "gong"
[1]=>
string(2) "xi"
[2]=>
string(2) "fa"
[3]=>
string(3) "cai"
[4]=>
string(3) "!"
}
}
["pinyinSoundNumber"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(5) "gong1"
[1]=>
string(3) "xi3"
[2]=>
string(3) "fa1"
[3]=>
string(4) "cai2"
[4]=>
string(3) "!"
}
}
["pinyinFirst"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(1) "g"
[1]=>
string(1) "x"
[2]=>
string(1) "f"
[3]=>
string(1) "c"
[4]=>
string(3) "!"
}
}
["pinyinSound"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(5) "gōng"
[1]=>
string(3) "xǐ"
[2]=>
string(3) "fā"
[3]=>
string(4) "cái"
[4]=>
string(3) "!"
}
}
}
全拼:
array(1) {
["pinyin"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(4) "gong"
[1]=>
string(2) "xi"
[2]=>
string(2) "fa"
[3]=>
string(3) "cai"
[4]=>
string(3) "!"
}
}
}
首字母:
array(1) {
["pinyinFirst"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(1) "g"
[1]=>
string(1) "x"
[2]=>
string(1) "f"
[3]=>
string(1) "c"
[4]=>
string(3) "!"
}
}
}
读音:
array(1) {
["pinyinSound"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(5) "gōng"
[1]=>
string(3) "xǐ"
[2]=>
string(3) "fā"
[3]=>
string(4) "cái"
[4]=>
string(3) "!"
}
}
}
读音数字:
array(1) {
["pinyinSoundNumber"]=>
array(1) {
[0]=>
array(5) {
[0]=>
string(5) "gong1"
[1]=>
string(3) "xi3"
[2]=>
string(3) "fa1"
[3]=>
string(4) "cai2"
[4]=>
string(3) "!"
}
}
}
自选返回格式 + 以文本格式返回 + 自定义分隔符:
array(2) {
["pinyin"]=>
array(1) {
[0]=>
string(18) "gong xi fa cai !"
}
["pinyinSoundNumber"]=>
array(1) {
[0]=>
string(22) "gong1 xi3 fa1 cai2 !"
}
}
* /

拼音分词

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) "中華人民共和國!恭喜發財!"
}
* /

PHP 中文工具类,支持汉字转拼音、拼音分词、简繁互转的更多相关文章

  1. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  2. springboot配置ehcache2.X缓存(@Cacheable等注解和手动操作缓存的工具类 支持element粒度的时间设置)

    本文只写出一些注意事项和源码,请善用官方文档~ 注解实现 @Cacheable @CachePut @CacheEvit 启动类上加@EnableCaching就可以开启缓存 由文档可知,自动检测缓存 ...

  3. Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】

    对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...

  4. Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)

    一.先摆需求: 1.中文搜索.英文搜索.中英混搜   如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜   如 ...

  5. java工具类(五)之日期格式字符串与日期实现互转

    JAVA字符串转日期或日期转字符串 项目开发过程中需要实现日期格式的字符串与日期进行互转,并进行日期的加减操作. Demo如下: package weiming.lmapp.utils; import ...

  6. html便民查询各个工具类实例代码分享(支持pc和移动端)

    1.手机号码查询 <iframe id="api_iframe_51240" name="api_iframe_51240" src="&quo ...

  7. 转:轻松把玩HttpClient之封装HttpClient工具类(一)(现有网上分享中的最强大的工具类)

    搜了一下网络上别人封装的HttpClient,大部分特别简单,有一些看起来比较高级,但是用起来都不怎么好用.调用关系不清楚,结构有点混乱.所以也就萌生了自己封装HttpClient工具类的想法.要做就 ...

  8. Java汉字转成汉语拼音工具类

    Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

  9. java PinYinUtils 拼音工具类

    package com.sicdt.library.core.utils; import java.util.HashSet; import java.util.Set; import net.sou ...

随机推荐

  1. Python的Matplotlib库简述

    Matplotlib 库是 python 的数据可视化库import matplotlib.pyplot as plt 1.字符串转化为日期 unrate = pd.read_csv("un ...

  2. win7 x64安装TensorFlow

    在windows下安装的TensorFlow做学习研究之用,如果要进行技术,请看相关博文:CentOS7安装TensorFlow 1.安装Pytho3.5 首先到Anaconda网站去下载Window ...

  3. 深入理解Java虚拟机2-chap3-斗之气9段

    一.GC需要完成三件事 哪些内存需要回收:找出不需要使用的对象 什么时候回收:JVM空闲/堆内存紧张 如何回收:回收垃圾的策略 二.寻找已死对象:第一件事 判断对象是否存活算法 1.引用计数算法 原理 ...

  4. time_t time()

    time_t  atime,  btime; time(&atime); btime = time(0); 两种方式效果一样.

  5. BCB Access violateion at Address 0000 0003. Read of address 0000 0003

    来自网页:(我的电脑做不到) 运行一个程序,莫名出现一个对话框:access violation at address 0000.. read of address000试了几次问题依旧,网上搜了下解 ...

  6. springboot整合webSocket的使用

    引入jar包 <dependency><!-- 5.引入websocket--> <groupId>org.springframework.boot</gro ...

  7. [IDE] ECLIPSE取消自动更新

    eclipse自动更新的取消方法: window --> preferences --> General --> Startup and Shutdown --> 在列表中找到 ...

  8. kali linux wmtools安装

    1,选择挂载盘时选择自动检测 2,点击安裝vmware tools安裝 3.tar -xzf 壓縮包名 4../vmware-install.pl 5,reboot

  9. jQuery工具--$.each()和$.merge()

       jQuery.each(object, [callback])或者jQuery(object).each([callback]) 概述 通用遍历方法,可用于遍历对象和数组. 不同于遍历 jQue ...

  10. skynet对Windows环境支持的版本:Windows版skynet

    https://github.com/sanikoyes/skynet.git Skynet Skynet is a lightweight online game framework, and it ...