Uma ferramenta de conversão de chinês para Pinyin baseada no dicionário mozillazg/pinyin-data, uma solução mais precisa para converter caracteres chineses em Pinyin que suporta caracteres multifonéticos.
Gostou do meu projeto? Clique aqui para me apoiar
Instale usando o Composer:
composer require overtrue/pinyin:^5.0
Exceto o método de obtenção da primeira letra, todos os métodos suportam um segundo parâmetro, que é usado para especificar o formato pinyin. Os valores opcionais são:
symbol
(padrão) símbolo de tom, como pīn yīn
none
não produz pinyin, como pin yin
number
, como pin1 yin1
Exceto o permalink
que retorna uma string, todos os outros métodos retornam o tipo de coleção OvertruePinyinCollection
:
use Overtrue Pinyin Pinyin ;
$ pinyin = Pinyin:: sentence ( '你好,世界' );
Você pode acessar o conteúdo da coleção por meio de:
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
Normalmente usado para links de artigos, etc., você pode usar o método permalink
para obter a string pinyin:
echo Pinyin:: permalink ( '带着希望去旅行' ); // dai-zhe-xi-wang-qu-lyu-xing
echo Pinyin:: permalink ( '带着希望去旅行' , ' . ' ); // dai.zhe.xi.wang.qu.lyu.xing
Normalmente usado para criar índices para pesquisa, você pode usar o método abbr
para converter:
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
iniciais
Converta a primeira letra como sobrenome e o restante como palavras normais:
Pinyin:: nameAbbr ( '欧阳' ); // ['o', 'y']
echo Pinyin:: nameAbbr ( '单单单' )-> join ( ' - ' ); // s-d-d
A pronúncia do sobrenome de um nome é um pouco diferente da dos caracteres comuns. Por exemplo, a pronúncia comum de 'dan' é dan
, mas quando usado como sobrenome, é pronunciado shan
.
Pinyin:: name ( '单某某' ); // ['shàn', 'mǒu', 'mǒu']
Pinyin:: name ( '单某某' , ' none ' ); // ['shan', 'mou', 'mou']
Pinyin:: name ( '单某某' , ' none ' )-> join ( ' - ' ); // shan-mou-mou
De acordo com os regulamentos nacionais relativos ao lembrete de que o pinyin ü (Lu, Lu, Lu, Lu, Nv, etc.) do nome no documento de viagem do passaporte chinês é escrito uniformemente como YU, converta ü
para yu
:
Pinyin:: passportName ( '吕小布' ); // ['lyu', 'xiao', 'bu']
Pinyin:: passportName ( '女小花' ); // ['nyu', 'xiao', 'hua']
Pinyin:: passportName ( '律师' ); // ['lyu', 'shi']
O valor de retorno dos caracteres polifonéticos é uma coleção de matrizes associativas. Por padrão, todas as pronúncias após a desduplicação são retornadas:
$ pinyin = Pinyin:: polyphones ( '重庆' );
$ pinyin [ '重' ]; // ["zhòng", "chóng", "tóng"]
$ pinyin [ '庆' ]; // ["qìng"]
$ pinyin -> toArray ();
// [
// "重": ["zhòng", "chóng", "tóng"],
// "庆": ["qìng"]
// ]
Se não quiser remover duplicatas, você pode retorná-las em formato de array:
$ 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"]]
// ]
Semelhante aos caracteres polifônicos, o valor de retorno de um único caractere é uma string. Os caracteres polifônicos serão ajustados para obter pronúncias comuns de acordo com a frequência do caractere:
$ pinyin = Pinyin:: chars ( '重庆' );
echo $ pinyin [ '重' ]; // "zhòng"
echo $ pinyin [ '庆' ]; // "qìng"
$ pinyin -> toArray ();
// [
// "重": "zhòng",
// "庆": "qìng"
// ]
Aviso
Ao processar palavras isoladas, como as palavras polifônicas obtêm sons comuns da tabela de frequência de palavras, podem ocorrer situações incorretas em ambientes de palavras. Recomenda-se o uso de processamento de palavras polifônicos.
Consulte os casos de teste para obter mais uso.
De acordo com os regulamentos do Comitê Nacional de Trabalho de Língua e Caráter, lv
, lyu
e lǚ
estão todos corretos, mas lv
é o mais comumente usado, então lv
é usado por padrão. Se precisar usar outros, você pode passá-los. durante a inicialização:
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
Aviso
Válido apenas quando o estilo Pinyin é o modo não-
none
.
Você pode usar a linha de comando para converter Pinyin:
php ./bin/pinyin 带着希望去旅行 --method=sentence --tone-style=symbol
# dài zhe xī wàng qù lǚ xíng
Para mais métodos de uso, você pode visualizar a documentação de ajuda:
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 显示帮助.
O pacote independente está aqui: overtrue/laravel-pinyin
Se você tiver essa necessidade, você também pode conhecer meu outro pacote: overtrue/php-opencc
Bem-vindo para fornecer comentários e melhorar o vocabulário:
Se você gosta do meu projeto e quer apoiá-lo, clique aqui
Muito obrigado à Jetbrains por gentilmente fornecer uma licença para eu trabalhar neste e em outros projetos de código aberto.
Quer saber como construir um pacote de extensão PHP do zero?
Por favor, preste atenção ao meu curso prático, onde compartilharei algumas experiências de desenvolvimento de extensões - "Tutorial prático do pacote de extensões PHP - do início ao lançamento"
MIT