ChineseUtilPHP 中文工具類庫
ChineseUtil
PHP 中文工具類,支持漢字轉(zhuǎn)拼音、拼音分詞、簡繁互轉(zhuǎn)。
PHP Chinese Tool class, support Chinese pinyin, pinyin participle, simplified and traditional conversion
目前本類庫擁有的三個功能,都是在實際開發(fā)過程中整理出來的。這次使用的數(shù)據(jù)不同于以前我開源過漢字轉(zhuǎn)拼音和簡繁互轉(zhuǎn),數(shù)據(jù)都是從字典網(wǎng)站采集下來的,比以前的數(shù)據(jù)更加準確。
由于中文的博大精深,字有多音字,簡體字和繁體字也有多種對應(yīng)。并且本類庫返回的所有結(jié)果,均為包含所有組合的數(shù)組。
本類庫字典數(shù)據(jù)總共收錄 73925 個漢字,包括:3955 個簡體字,1761 個繁體字,68209 個其它漢字。
內(nèi)存占用
類庫第一個版本發(fā)布開始,群里朋友就展開了激烈的討論,最大的問題就在于內(nèi)存占用以及性能問題上。經(jīng)過我不斷嘗試幾種方案,最終決定設(shè)置三種模式,來適應(yīng)不同用戶之間的需求。
我已經(jīng)嘗試過 Redis,速度比 SQLite 慢 3 倍,沒有必要加入支持。所以目前來看,SQLite 模式性價比最高!
性能模式 (Memory)
使用 SQLite 作為數(shù)據(jù)載體,一次性加載所有數(shù)據(jù)到變量,內(nèi)存占用高(80 MB),性能最佳。
適合用于運行 Cli 任務(wù)。
需要 PDO 和 PDO_SQLITE 擴展支持。
通用模式 (SQLite)
使用 SQLite 作為數(shù)據(jù)載體,每次查詢都通過 SQL 查詢,內(nèi)存占用低(600+ KB),性能中等。
適合用于大部分場景。
需要 PDO 和 PDO_SQLITE 擴展支持。
兼容模式 (JSON)
使用精簡過的 JSON 數(shù)據(jù)作為數(shù)據(jù)載體,一次性加載所有數(shù)據(jù)到變量,內(nèi)存占用中(28 MB),性能差。
內(nèi)存占用量以實際為準,根據(jù)版本、擴展等環(huán)境的不同,占用的內(nèi)存容量不一樣,上述值為我電腦上的情況,僅供參考。
適合無法使用 PDO 的場景。
由于精簡了數(shù)據(jù),一些拼音結(jié)果需要經(jīng)過代碼計算處理才可以得出,所以性能較差。
默認情況下,優(yōu)先使用通用模式,如果環(huán)境不支持 PDO 將采用兼容模式。
你可以在未執(zhí)行任何初始化或者轉(zhuǎn)換處理之前,設(shè)置使用何種模式運行。
// 設(shè)為性能模式
Chinese::setMode('Memory');
// 設(shè)為通用模式
Chinese::setMode('SQLite');
// 設(shè)為兼容模式
Chinese::setMode('JSON');
無論何種模式,拼音分詞所需數(shù)據(jù)總是從 JSON 數(shù)據(jù)中加載。
使用說明
Composer 直接安裝
composer require yurunsoft/chinese-util
Composer 項目配置引入
"require": {
"yurunsoft/chinese-util" : "~1.0"
}
功能
漢字轉(zhuǎn)拼音
use \Yurun\Util\Chinese;
use \Yurun\Util\Chinese\Pinyin;
$string = '恭喜發(fā)財!';
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 '讀音數(shù)字:', 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 '所有結(jié)果:', PHP_EOL;
var_dump(Chinese::toPinyin($string));
/**
所有結(jié)果:
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) "!"
}
}
}
讀音數(shù)字:
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, '"的分詞結(jié)果:', PHP_EOL;
var_dump(Chinese::splitPinyin($string2));
/**
輸出結(jié)果:
"xianggang"的分詞結(jié)果:
array(2) {
[0]=>
string(12) "xi ang gang "
[1]=>
string(11) "xiang gang "
}
* /
簡繁互轉(zhuǎn)
use \Yurun\Util\Chinese;
$string3 = '中華人民共和國!恭喜發(fā)財!';
echo '"', $string3, '"的簡體轉(zhuǎn)換:', PHP_EOL;
var_dump(Chinese::toSimplified($string3));
echo '"', $string3, '"的繁體轉(zhuǎn)換:', PHP_EOL;
var_dump(Chinese::toTraditional($string3));
/**
輸出結(jié)果:
"中華人民共和國!恭喜發(fā)財!"的簡體轉(zhuǎn)換:
array(1) {
[0]=>
string(39) "中華人民共和國!恭喜發(fā)財!"
}
"中華人民共和國!恭喜發(fā)財!"的繁體轉(zhuǎn)換:
array(1) {
[0]=>
string(39) "中華人民共和國!恭喜發(fā)財!"
}
* /