masterweber / morpher-ws3-php-client
PHP 3.0 "Морфер" 网络服务客户端
Requires
- php: >=7.4
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^7.2
Requires (Dev)
- codeception/assert-throws: ^1.1
- phpunit/phpunit: ^9
README
PHP 3.0 "Морфер" 网络服务客户端
该库实现以下功能
(通过网络服务 "Морфер 3.0")
俄语
- 格变;
- 姓名中的姓名、名字和姓氏突出显示;
- 数字的书写和单位格变 (3个新信件,10条评论);
- 数字以序数词的形式书写(“第一百个公里”);
- 任何格的日期书写(“二千年五月五日”);
- 形容词格变按性别;
- 从城市和国家的名称生成形容词;
- 文本中的重音设置.
乌克兰语
- 格变;
- 数字的书写和单位格变(3格里夫纳,10条评论)。
哈萨克语
通用
用户词典
网络服务支持根据用户要求进行格变修正。为此,有3种方法
网络服务 "Морфер 3.0" 提供了 免费(有限制) 和 付费 使用。详情请参阅 项目网站。
安装
composer require masterweber/morpher-ws3-php-client
使用
use Morpher\Morpher; $morpher = new Morpher( 'https://', // по умолчанию https://ws3.morpher.ru 'YOUR_TOKEN', // по умолчанию null 1.0 // по умолчанию 3.0 сек );
可以无参数调用构造函数,在这种情况下将使用默认参数。
use Morpher\Morpher; $morpher = new Morpher();
俄语格变
使用 russian->declension(string $phrase, string ...$flags) 方法对单词和短语进行格变
$result = $morpher->russian->declension('Программист'); echo $result->genitive; // Программиста echo $result->plural->genitive; // Программистов
$result 是具有以下属性的 DeclensionResult 对象
nominative— 名词格中的文本;genitive— 生成格中的文本;dative— 宾格中的文本;accusative— 主格中的文本;instrumental— 句子格中的文本;prepositional— 介词格中的文本;plural— 具有复数格属性的对象。
在付费账户上使用服务时,将确定额外的属性
prepositional_O— 带有介词 О/ОБ/ОБО 的介词格,介词自动选择;gender— 性别(男性、女性或中性);where,locative— 带有介词的局部格(局格);where_to— 带有介词的导向格(向格);where_from,whence— 带有介词的来源格(离格)。
用于解决歧义的标志
有些词可以以不同的方式变格,例如
- 姓氏 Resnick 对男性变格,对女性不变化;
- Ростов 在句子格中将是 Ростовым,如果是姓氏,或者如果是城市;
- 测试器在宾格中将是 тестера,如果是人,或者如果是仪器。
为了提高词形变化质量,您可以通过标志向Web服务提供额外信息。多个标志可以通过逗号分隔传递
use Morpher\Russian\RussianClient; $result = $morpher->russian->declension( 'Слепов Сергей Николаевич', RussianClient::FLAG_NAME, RussianClient::FLAG_MASCULINE ); echo $result->genitive; // Слепова Сергея Николаевича echo $result->fullName->name; // Сергей
支持以下标志的 russian->declension(string $phrase, string ...$flags)
- RussianClient::FLAG_FEMININE — 阳性;
- RussianClient::FLAG_MASCULINE — 阳性;
- RussianClient::FLAG_ANIMATE — 有生命的;
- RussianClient::FLAG_INANIMATE — 无生命的;
- RussianClient::FLAG_COMMON — 名词;
- RussianClient::FLAG_NAME — 姓名。
姓名中的姓名、名字和姓氏突出显示
如果输入字符串被识别为姓名,则 DeclensionResult 对象将包含姓氏、名字和中间名的拆分
genitive— 姓名在属格;dative— 姓名在宾格;accusative— 姓名在主格;instrumental— 姓名在工具格;prepositional— 姓名在前置格;name— 名字在主格;surname— 姓氏在主格;patronymic— 中间名在主格。
数字的写法及与数字的协调
方法 russian->spell(int $number, string $unit) 解决了获得数字的写法(一千二百二十五)和单位与先前数字的协调(1只鹦鹉,2只鹦鹉,5只鹦鹉)的问题
$result = $morpher->russian->spell(235, 'рубль'); echo $result->n->genitive; // двухсот тридцати пяти echo $result->unit->genitive; // рублей
通过组合相应的格形式 n 和 unit,可以获取各种“金额大写”的输出
- 235元
- 二百三十五元
- 235(二百三十五)元等。
以序数词形式写数字
方法 russian->spellOrdinal(int $number, string $unit) 与 russian->spell(int $number, string $unit) 类似,但返回序数词形式的数字写法
$result = $morpher->russian->spellOrdinal(5, 'колесо'); echo $result->n->genitive; // пятого echo $result->unit->genitive; // колеса
写日期
方法 russian->spellDate(DateTime $date) 根据格变位日期
$date = new DateTime(); $result = $morpher->russian->spellDate($date); echo $result->genitive; // двадцать девятого июня две тысячи девятнадцатого года echo $result->instrumental; // двадцать девятому июня две тысячи девятнадцатого года
形容词格变按性别
方法 russian->adjectiveGenders(string $adjective) 将给定的形容词变位,将其从阳性转换为阴性、中性以及复数
$result = $morpher->russian->adjectiveGenders('уважаемый'); echo $result->feminine; // уважаемая echo $result->neuter; // уважаемое echo $result->plural; // уважаемые
输入形容词的要求
- 它应该是阳性的,单数。
- 它应该是完整的,即“完整的”,而不是“完整”。
- 它应该是一个词。词内允许有连字符和撇号:工人-农民,科特迪瓦,而词周围允许有空格、引号和其他符号。
形容词的构成
方法 russian->adjectivize(string $lemma) 从城市和国家的名称中形成形容词:莫斯科 – 莫斯科的,罗斯托夫 – 罗斯托夫的,瑞典 – 瑞典的,希腊 – 希腊的。
示例
$result = $morpher->russian->adjectivize('Москва'); print_r($result); // ['московский']
方法返回一个字符串数组。它们的意义在本处描述。
文本中的重音设置
方法 russian->addStressMarks(string $text) 在俄语文本中添加重音
$result = $morpher->russian->addStressMarks('Три девицы под окном'); echo $result; // Три деви́цы под окно́м
重音用代码为 U+0301 的符号表示,该符号直接插入到重音元音之后。单音节词不获得重音符号,除非介词或小品词本身带有重音:за́ рука,не́ за что。变读形式由垂直线分隔,例如
$result = $morpher->russian->addStressMarks('Белки питаются белками'); echo $result; // Бе́лки|Белки́ пита́ются бе́лками|белка́ми
乌克兰语的格变位
乌克兰语变位版本 – 方法 ukrainian->declension(string $phrase, string ...$flags)
$result = $morpher->ukrainian->declension('Крутько Катерина Володимирiвна'); echo $result->genitive; // Крутько Катерини Володимирівни echo $result->dative; // Крутько Катерині Володимирівні echo $result->vocative; // Крутько Катерино Володимирівно
$result 是具有以下属性的 DeclensionResult 对象
nominative— 名词格中的文本;genitive— 生成格中的文本;dative— 宾格中的文本;accusative— 主格中的文本;instrumental— 句子格中的文本;prepositional— 文本在地方格;vocative— 文本在呼唤格。
在付费账户上使用服务时,将确定额外的属性
gender— 性别(мужской, женский);
乌克兰语版本目前仅处理名字、姓氏和中间名。
用于解决歧义的标志
use Morpher\Ukrainian\UkrainianClient; $result = $morpher->ukrainian->declension('Карен', UkrainianClient::FLAG_FEMININE); echo $result->genitive; // Карен (женское имя не склоняется)
支持以下标志的 ukrainian->declension(string $phrase, string ...$flags)
- UkrainianClient.FLAG_FEMININE — 阳性;
- UkrainianClient.FLAG_MASCULINE — 阳性;
- UkrainianClient.FLAG_NEUTER — 中性;
- UkrainianClient.FLAG_PLURAL — 复数。
乌克兰语中的数字写法及与数字的协调
方法 ukrainian->spell(int $number, string $unit) 解决了获得数字的写法(одна тисяча сто двадцять п'ять)和单位与先前数字的协调(один рубль,два рубля,п'ять рублів)的问题
$result = $morpher->ukrainian->spell(235, 'рубль'); echo $result->n->genitive; // двохсот тридцяти п'яти echo $result->unit->genitive; // рублів
哈萨克语的格变位、数和人称
用于变位单词和短语的方法是 qazaq->declension(string $phrase)
$result = $morpher->qazaq->declension('менеджер'); echo $result->genitive; // менеджердің echo $result->plural->genitive; // менеджерлердің echo $result->plural->firstPersonPlural->genitive; // менеджерлеріміздің
$result 是具有以下属性的 DeclensionResult 对象
nominative— 名词格中的文本;genitive— 生成格中的文本;dative— 文本在宾格。accusative— 主格中的文本;ablative— 原始格文本;locative— 地方格文本;instrumental— 句子格中的文本;plural— 返回包含复数格文本的属性的对象。
剩余请求
方法 getQueriesLeft() 返回当前剩余的请求数。请求限制将在 00:00 UTC 恢复。
$result = $morpher->getQueriesLeft(); echo $result; // 100
获取修正列表
要获取所有修正的列表,需要使用方法 russian->userDict->getAll() 或 ukrainian->userDict->getAll()
$result = $morpher->russian->userDict->getAll(); print_r($result); // Массив с объектами CorrectionEntry
具有以下属性的 CorrectionEntry 对象
singular— 单数形式的CorrectionForms对象;plural— 复数形式的CorrectionForms对象;gender— 性别(男性、女性或中性)。
具有以下属性的 CorrectionForms 对象
nominative— 名词格中的文本;genitive— 生成格中的文本;dative— 宾格中的文本;accusative— 主格中的文本;instrumental— 句子格中的文本;prepositional— 介词格中的文本;locative— 地方格文本;
针对乌克兰语
具有以下属性的 CorrectionEntry 对象
singular— 单数形式的CorrectionForms对象;gender— 性别(男、女)。
具有以下属性的 CorrectionForms 对象
nominative— 名词格中的文本;genitive— 生成格中的文本;dative— 宾格中的文本;accusative— 主格中的文本;instrumental— 句子格中的文本;prepositional— 文本在地方格;vocative— 文本在呼唤格。
添加或更改修正
要添加或修改修正,请使用方法 russian->userDict->addOrUpdate(CorrectionEntry $entry)。
use Morpher\Russian\CorrectionEntry; use Morpher\Russian\CorrectionForms; $singular = new CorrectionForms(); $singular->nominative = 'Кошка'; $singular->dative = 'Пантере'; $plural = new CorrectionForms(); $plural->dative = 'Пантерам'; $entry = new CorrectionEntry(); $morpher->russian->userDict->addOrUpdate($entry); // true
针对乌克兰语
use Morpher\Ukrainian\CorrectionEntry; use Morpher\Ukrainian\CorrectionForms; $singular = new CorrectionForms(); $singular->nominative = 'Кiшка'; $singular->dative = 'Пантерi'; $entry = new CorrectionEntry(); $morpher->ukrainian->userDict->addOrUpdate($entry); // true
删除修正
要删除修正,只需将名词格的字符串传递给方法 russian->userDict->remove(string $nominativeForm)
$morpher->russian->userDict->remove('Кошка'); // true
针对乌克兰语
$morpher->ukrainian->userDict->remove('Кiшка'); // true
开发
PHP:请确保已安装的 PHP 版本不低于 ^7.4。您可以通过 php -v 检查。
安装
为 morpher-ws3-php-client 仓库创建分支。
然后执行
$ git clone git@github.com:<your-github-username>/morpher-ws3-php-client.git $ cd morpher-ws3-php-client $ composer install
运行测试
$ composer test
发布新版本
大约一分钟后,新包应该出现在 packagist.org 上。