1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yurunsoft-ChineseUtil

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 9.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 20:49 8d2a116

Китайский Утилита (ChineseUtil)

PHP китайский инструментарий, поддерживает преобразование китайских иероглифов в пиньинь, сегментацию пиньинь, взаимное преобразование упрощённых и традиционных иероглифов, преобразование чисел, преобразование денежных сумм.

Из-за обширности китайского языка у иероглифов может быть несколько вариантов произношения, как у упрощённых иероглифов, так и у традиционных. Кроме того, все результаты, возвращаемые этой библиотекой, представляют собой массив, содержащий все комбинации.

В словаре библиотеки ChineseUtil содержится 73925 китайских иероглифа, включая: 3955 упрощённых иероглифа, 1761 традиционный иероглиф и 68209 других китайских иероглифов.

Режимы

  • Режим производительности (Memory)

    • Используется SQLite в качестве носителя данных, загружает все данные в переменные за один раз, занимая большой объём памяти (80+ МБ), обеспечивает наилучшую производительность.
    • Подходит для выполнения задач Cli.
    • Требуется поддержка расширений PDO и PDO_SQLITE.
  • Общий режим (SQLite)

    • Использует SQLite в качестве носителя данных, выполняет запросы SQL каждый раз при запросе, занимает небольшой объём памяти (100–200 КБ), имеет среднюю производительность.
    • Подходит для большинства сценариев использования.
    • Требует поддержки расширений PDO и PDO_SQLITE.
  • Совместимый режим (JSON)

    • Используются упрощённые данные JSON в качестве носителя, загружая все данные в переменную за один раз и занимая средний объём памяти (30+ МБ). Производительность низкая.
    • Не подходит для использования PDO.
    • Из-за упрощения данных некоторые результаты пиньинь требуют обработки кодом для получения результата, поэтому производительность ниже.
  • FFI режим (FFI)

    • Необходим PHP версии 7.4 или выше, а также расширение FFI. Код полностью написан на C++. Производительность и использование памяти лучше, чем у реализации на PHP.
    • Динамическая библиотека кода C++: https://github.com/Yurunsoft/chinese-util-cpp
  • Swoole FFI режим (SwooleFFI)

    • Необходим PHP версии 7.4 или выше, а также расширения FFI и Swoole. Код полностью написан на C++, производительность и использование памяти лучше, чем у PHP-реализации.
    • Не блокирует поток PHP-кода.

По умолчанию используется общий режим, если среда не поддерживает PDO, будет использоваться совместимый режим.

Можно установить режим работы до выполнения любой инициализации или преобразования.

// Установить режим производительности
Chinese::setMode('Memory');
// Установить общий режим
Chinese::setMode('SQLite');
// Установить совместимый режим
Chinese::setMode('JSON');
// Установить FFI режим
Chinese::setMode('FFI');
// Установить Swoole FFI режим
Chinese::setMode('SwooleFFI');

Независимо от режима, данные, необходимые для сегментации пиньинь, всегда загружаются из данных JSON.

Параметры FFI (обычно используются для собственной компиляции):

use Yurun\Util\Chinese\FFIDriver;

FFIDriver::$library = '.so файл пути';
FFIDriver::$characterDataPath = 'путь к файлу данных символов';
FFIDriver::$pinyinDataPath = 'путь к файлу данных пиньинь';

Использование

  • Установка через Composer

    • composer require yurunsoft/chinese-util
  • Настройка проекта с помощью Composer

    "require": {
        "yurunsoft/chinese-util" : "~2.0"
    }

Функции

  • Преобразование китайских иероглифов в пиньинь
use \Yurun\Util\Chinese;
use \Yurun\Util\Chinese\Pinyin;
$string = '恭喜发财!123';
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));

echo 'Без разделения без пиньинь символов:', PHP_EOL;
var_dump(Chinese::toPinyin($string, Pinyin::CONVERT_MODE_PINYIN, ' ', false));
  • Сегментация пиньинь Результат — строка:
use \Yurun\Util\Chinese;
$string2 = 'xianggang';
echo '"', $string2, '"Результаты сегментации:', PHP_EOL;
var_dump(Chinese::splitPinyin($string2));

Вывод:

"xianggang"Результаты сегментации:
array(2) {
  [0]=>
  string(11) "xiang gang"
  [1]=>
  string(12) "xi ang gang"
}

Результат — массив:

use \Yurun\Util\Chinese;
$string2 = 'xianggang';
echo '"', $string2, '"Результаты сегментации:', PHP_EOL;
var_dump(Chinese::splitPinyinArray($string2));

Вывод:

"xianggang"Результаты сегментации:
array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(5) "xiang"
    [1]=>
    string(4) "gang"
  }
  [1]=>
  array(3) {
    [0]=>
    string(2) "xi"
    [1]=>
    string(3) "ang"
    [2]=>
    string(4) "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) "中華人民共和國!恭喜發財!"
}
  • Преобразование чисел
use Yurun\Util\Chinese\Number;
function test($number)
{
    $chinese = Number::toChinese($number, [
        'tenMin'    =>  true, // “一十二” => “十二”
    ]);
    $afterNumber = Number::toNumber($chinese);
    echo $number, '=>', $chinese, '=>', $afterNumber, '=>', 0 === bccomp($number, $afterNumber, 20) ? 'true' : 'false', PHP_EOL;
}

test(1.234);
test(-1234567890.666);
test(pi());

Вывод:

1.234=>一点二三四=>1.234=>true
-1234567890.666=>负十二亿三千四百五十六万七千八百九十点六六六=>-1234567890.666=>true
3.1415926535898=>三点一四一五九二六五三五八九八=>3.1415926535898=>true
  • Преобразование денежных сумм
use
``` ```
function test($number)
{
    $chinese = Money::toChinese($number, [
        'tenMin'    =>  true, // “一十二” => “十二”
    ]);
    $afterMoney = Money::toNumber($chinese);
    echo $number, '=>', $chinese, '=>', $afterMoney, '=>', 0 === bccomp($number, $afterMoney) ? 'true' : 'false', PHP_EOL;
}

test(1.234);
test(-1234567890.666);

Вывод:

1.234 => и эр сань фэнь сы ли => 1.234 => true -1234567890.666 => фу и эр сань цянь сы бай у шань лу вань ци чжан ба цзю шань юань лан фэнь лан вэнь => -1234567890.666 => true

1
https://api.gitlife.ru/oschina-mirror/yurunsoft-ChineseUtil.git
git@api.gitlife.ru:oschina-mirror/yurunsoft-ChineseUtil.git
oschina-mirror
yurunsoft-ChineseUtil
yurunsoft-ChineseUtil
master