基於mozillazg/pinyin-data 字典的中文轉拼音工具,更精確的支援多音字的漢字轉拼音解。
喜歡我的項目?點這裡支持我
使用Composer 安裝:
composer require overtrue/pinyin:^5.0
除了取得首字母的方法外,所有方法都支援第二個參數,用於指定拼音的格式,可選值為:
symbol
(預設)聲調符號,例如pīn yīn
none
不輸出拼音,例如pin yin
number
末尾數字模式的拼音,例如pin1 yin1
除了permalink
傳回字串外,其它方法都會傳回集合類型OvertruePinyinCollection
:
use Overtrue Pinyin Pinyin ;
$ pinyin = Pinyin:: sentence ( '你好,世界' );
你可以透過以下方式存取集合內容:
echo $ pinyin ; // nǐ hǎo shì jiè
// 直接将对象转成字符串
$ string = ( string ) $ pinyin ; // nǐ hǎo shì jiè
$ pinyin -> toArray (); // ['nǐ', 'hǎo', 'shì', 'jiè']
// 直接使用索引访问
$ pinyin [ 0 ]; // 'nǐ'
// 使用函数遍历
$ pinyin -> map ( ' ucfirst ' ); // ['Nǐ', 'Hǎo', 'Shì', 'Jiè']
// 拼接为字符串
$ pinyin -> join ( ' ' ); // 'nǐ hǎo shì jiè'
$ pinyin -> join ( ' - ' ); // 'nǐ-hǎo-shì-jiè'
// 转成 json
$ pinyin -> toJson (); // '["nǐ","hǎo","shì","jiè"]'
json_encode ( $ pinyin ); // '["nǐ","hǎo","shì","jiè"]'
use Overtrue Pinyin Pinyin ;
echo Pinyin:: sentence ( '带着希望去旅行,比到达终点更美好' );
// dài zhe xī wàng qù lǚ xíng , bǐ dào dá zhōng diǎn gèng měi hǎo
// 去除声调
echo Pinyin:: sentence ( '带着希望去旅行,比到达终点更美好' , ' none ' );
// dai zhe xi wang qu lv xing , bi dao da zhong dian geng mei hao
// 保留所有非汉字字符
echo Pinyin:: fullSentence ( 'ル是片假名,π是希腊字母' , ' none ' );
// ル shi pian jia ming ,π shi xi la zi mu
通常用於文章連結等,可以使用permalink
方法來取得拼音字串:
echo Pinyin:: permalink ( '带着希望去旅行' ); // dai-zhe-xi-wang-qu-lyu-xing
echo Pinyin:: permalink ( '带着希望去旅行' , ' . ' ); // dai.zhe.xi.wang.qu.lyu.xing
通常用於建立搜尋用的索引,可以使用abbr
方法轉換:
Pinyin:: abbr ( '带着希望去旅行' ); // ['d', 'z', 'x', 'w', 'q', 'l', 'x']
echo Pinyin:: abbr ( '带着希望去旅行' )-> join ( ' - ' ); // d-z-x-w-q-l-x
echo Pinyin:: abbr ( '你好2018! ' )-> join ( '' ); // nh2018
echo Pinyin:: abbr ( ' Happy New Year! 2018! ' )-> join ( '' ); // HNY2018
// 保留原字符串的英文单词
echo Pinyin:: abbr ( ' CGV电影院' , false , true )-> join ( '' ); // CGVdyy
姓名首字母
將首字作為姓氏轉換,其餘將轉換為普通詞語:
Pinyin:: nameAbbr ( '欧阳' ); // ['o', 'y']
echo Pinyin:: nameAbbr ( '单单单' )-> join ( ' - ' ); // s-d-d
姓名的姓的讀音有些與普通字不一樣,例如'單' 常見的音為dan
,而作為姓的時候讀shan
。
Pinyin:: name ( '单某某' ); // ['shàn', 'mǒu', 'mǒu']
Pinyin:: name ( '单某某' , ' none ' ); // ['shan', 'mou', 'mou']
Pinyin:: name ( '单某某' , ' none ' )-> join ( ' - ' ); // shan-mou-mou
根據國家規定關於中國護照旅行證上姓名拼音ü(呂、律、閩、綠、女等)統一拼寫為YU 的提醒的規則,將ü
轉換為yu
:
Pinyin:: passportName ( '吕小布' ); // ['lyu', 'xiao', 'bu']
Pinyin:: passportName ( '女小花' ); // ['nyu', 'xiao', 'hua']
Pinyin:: passportName ( '律师' ); // ['lyu', 'shi']
多音字的回傳值為關聯數組的集合,預設回傳去重後的所有讀音:
$ pinyin = Pinyin:: polyphones ( '重庆' );
$ pinyin [ '重' ]; // ["zhòng", "chóng", "tóng"]
$ pinyin [ '庆' ]; // ["qìng"]
$ pinyin -> toArray ();
// [
// "重": ["zhòng", "chóng", "tóng"],
// "庆": ["qìng"]
// ]
如果不想要去重,可以數組形式回傳:
$ pinyin = Pinyin:: polyphones ( '重庆重庆' , Converter:: TONE_STYLE_SYMBOL , true );
// or
$ pinyin = Pinyin:: polyphonesAsArray ( '重庆重庆' , Converter:: TONE_STYLE_SYMBOL );
$ pinyin -> toArray ();
// [
// ["重" => ["zhòng", "chóng", "tóng"]],
// ["庆" => ["qìng"]],
// ["重" => ["zhòng", "chóng", "tóng"]],
// ["庆" => ["qìng"]]
// ]
和多音字類似,單字的回傳值為字串,多音字將根據該字頻調整得到常用音:
$ pinyin = Pinyin:: chars ( '重庆' );
echo $ pinyin [ '重' ]; // "zhòng"
echo $ pinyin [ '庆' ]; // "qìng"
$ pinyin -> toArray ();
// [
// "重": "zhòng",
// "庆": "qìng"
// ]
Warning
當單字處理時由於多音字來自詞頻表中取得常用音,所以在詞語環境下可能出現不正確的情況,建議使用多音字處理。
更多使用請參考測試用例。
根據國家語言文字工作委員會的規定, lv
、 lyu
、 lǚ
都是正確的,但是lv
是最常用的,所以默認使用lv
,如果你需要使用其他的,可以在初始化時傳入:
echo Pinyin:: sentence ( '旅行' );
// lǚ xíng
echo Pinyin:: sentence ( '旅行' , ' none ' );
// lv xing
echo Pinyin:: yuToYu ()-> sentence ( '旅行' , ' none ' );
// lyu xing
echo Pinyin:: yuToU ()-> sentence ( '旅行' , ' none ' );
// lu xing
echo Pinyin:: yuToV ()-> sentence ( '旅行' , ' none ' );
// lv xing
Warning
僅在拼音風格為非
none
模式下有效。
你可以使用命令列來實現拼音的轉換:
php ./bin/pinyin 带着希望去旅行 --method=sentence --tone-style=symbol
# dài zhe xī wàng qù lǚ xíng
更多使用方法,可以查看幫助文件:
php ./bin/pinyin --help
# Usage:
# ./pinyin [chinese] [method] [options]
# Options:
# -j, --json 输出 JSON 格式.
# -c, --compact 不格式化输出 JSON.
# -m, --method=[method] 转换方式,可选:sentence/sentenceFull/permalink/abbr/nameAbbr/name/passportName/phrase/polyphones/chars.
# --no-tone 不使用音调.
# --tone-style=[style] 音调风格,可选值:symbol/none/number, default: none.
# -h, --help 显示帮助.
獨立的套件在這裡:overtrue/laravel-pinyin
如何你有這個需求,也可以了解我的另一個套件:overtrue/php-opencc
歡迎提意見及完善補充詞庫:
如果你喜歡我的專案並想支持它,請點擊這裡
Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.
想知道如何從零開始建立PHP 擴充包?
請關注我的實戰課程,我會在此課程中分享一些擴展開發經驗—— 《PHP 擴展包實戰教程- 從入門到發布》
MIT