morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 

Модуль склонения по падежам для PHP

Модуль morpher.so предназначен для склонения по падежам слов и словосочетаний, например, фамилий, имен и отчеств, названий городов и товаров. Словосочетания могут состоять из существительных, прилагательных и других частей речи.

Функция склонения по падежам

Один миллион долларов достается <?php echo morpher_inflect('Пупкин Василий', 'dat');?> из <?php echo morpher_inflect('Набережные Челны', 'rod');?>!

В результате получаем:

 Один миллион долларов достается Пупкину Василию из Набережных Челнов! 

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

Рилиrodродительный падеж
Дилиdatдательный падеж
Вилиvinвинительный падеж
Тилиtvorтворительный падеж
Пилиpredlпредложный падеж без предлога
П_оилиpredl-oпредложный падеж с предлогом о/об/обо
Милиgdeместный падеж (отвечает на вопрос где?)

Все строки, передаваемые в библиотеку, должны быть в кодировке UTF-8. Результат также возвращается в UTF-8.

Функция перевода во множественное число

Если ко второму параметру добавить строку "mn", то результат будет во множественном числе:

На складе осталось 238 <?php echo morpher_inflect('кочерга', 'rod mn');?>.
 На складе осталось 238 кочерёг. 

Если первый параметр уже во множественном числе, то будет выдано:

#ERROR: Parameter 1 'text' is plural.

Функция определения рода

<?php $endings = array ( "m" => "ый", "f" => "ая", "n" => "ое", "p" => "ые" ); $name = "знатоки"; $rod = morpher_get_gender ($name); echo "Уважаем" . $endings [$rod] . " " . $name. "!\n";?>

Функция прописи чисел и денежных сумм

Функция morpher_spell формирует пропись числа и ставит данную единицу измерения в нужный падеж:

<?php morpher_spell (28, "календарный день"); // 28 (Двадцать восемь) календарных дней morpher_spell ("1,2", "процент"); // 1,2 (Одна целая две десятых) процента morpher_spell (2, "сутки"); // 2 (Двое) суток ?>

Если пропись нужно вставить в текст в определенном падеже, укажите падеж третьим параметром:

В течение <?php echo morpher_spell (28, "календарный день", "Р"); ?>.

В результате получим "В течение 28 (Двадцати восьми) календарных дней."

Допустимые значения падежей: И, Р, Д, В, Т, П и их аналоги, записанные латиницей, см. таблицу выше. Формы с предлогами (predl-o и gde) в этой функции не поддерживаются.

Для названий некоторых денежных единиц функция morpher_spell выдает пропись такого вида:

<?php morpher_spell (123.45, "рубль"); // Сто двадцать три рубля 45 копеек morpher_spell (123.45, "доллар США"); // Сто двадцать три доллара США 45 центов morpher_spell (123.45, "евро"); // Сто двадцать три евро 45 центов ?>

При желании можно использовать сокращенные наименования денежных единиц, с точкой или без:

<?php morpher_spell (123.45, "руб."); // Сто двадцать три руб. 45 коп. morpher_spell (123.45, "долл. США"); // Сто двадцать три долл. США 45 центов morpher_spell (123.45, "грн."); // Сто двадцать три грн. 45 коп. ?>

Или трехбуквенные коды валют международного стандарта ISO 4217, таких как RUB, USD, EUR и др. При этом в название денежной единицы автоматически включается название страны:

<?php morpher_spell (123.45, "RUB"); // Сто двадцать три российских рубля 45 копеек morpher_spell (123.45, "UAH"); // Сто двадцать три украинских гривны 45 копеек morpher_spell (123.45, "KZT"); // Сто двадцать три казахских тенге 45 тиынов ?>

Полный список обозначений валют

Обработка ошибок

При возникновении ошибки все функции библиотеки возвращают строку, начинающуюся с "#ERROR: ".

#ERROR: Parameter 1 'text' should not be empty.
#ERROR: Parameter 2 'case' should not be empty.
#ERROR: Parameter 1 'text' is not Russian.
#ERROR: Parameter 2 'case' is invalid.
#ERROR: Parameter 1 'text' is plural.

Если вы не хотите, чтобы пользователь увидел эти сообщения, проверяйте на наличие начальной подстроки "#ERROR: ".

Функция morpher_inflect ожидает 2 параметра, а morpher_get_gender – один. При вызове с неправильным количеством параметров интерпретатор PHP выдает предупреждение и продолжает выполнение программы.

Установка

Для установки нам понадобятся пакеты php5-dev, gcc (не ниже версии 4.7), glibc-static и bzip2:

# apt-get install php5-dev, gcc, bzip2

Распакуйте дистрибутив в любой каталог, например, morpher:

# mkdir morpher
# cd morpher
# tar xf ../morpher-x86.tar
# cd php

Постройте расширение morpher.so командой:

# bash build.sh

Готовый файл будет в каталоге morpher/php/modules. Его необходимо поместить в каталог расширений PHP:

# php-config --extension-dir
/usr/lib/php5/20121212
# mv modules/morpher.so /usr/lib/php5/20121212/

В вашей системе каталог расширений может быть другой.

Далее необходимо указать имя расширения в файле php.ini. Сначала найдем, где находится файл php.ini:

# find / -name php.ini
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini

Как видим, таких файлов два. Один используется веб-сервером Apache, а другой – при вызове интерпретатора PHP из командной строки. В вашей системе пути могут быть другие. Добавим расширение к обоим файлам:

# echo 'extension=morpher.so' >> /etc/php5/apache2/php.ini
# echo 'extension=morpher.so' >> /etc/php5/cli/php.ini

Для завершения установки Apache необходимо перезапустить.

Проверим работоспособность расширения из командной строки:

# php -f test.php
Running tests...
... done.

Ваш модуль готов к использованию. Каталог теперь можно удалить:

# rm -r morpher

Технические характеристики

PHP-расширение morpher.so работает под управлением ОС Linux 32- и 64-битных версий.

Поддерживаемые версии PHP: 5.2, 5.3, 5.4, 5.5, 5.6, 7.0.

Работа расширения была успешно протестирована на следующих конфигурациях:

ОС (cat /etc/issue) Разрядность ОС PHP
Debian 7 x86_64 5.4.4-14
Debian 6 x86_64 5.3.3-7
CentOS x86_64 5.3.3-7
CentOS x86 5.3.3-7
FreeBSD 10.0 x86_64 5.5.14
CentOS x86_64 5.2

Работа модуля была проверена на веб-серверах Apache и lighttpd.

Модуль не требует для своей работы подключения к Интернету и не передает никакие данные в Интернет.

История изменений

Дата Версия  
29.05.2014 1.0.1 Функция sklon переименована в morpher_inflect. Добавлена функция morpher_get_gender.
10.06.2014 1.0.2 Исправлен дефект, при котором функция morpher_inflect могла выдавать #ERROR: Parameter 1 'text' is not Russian. при корректных входных данных, при этом поведение функции могло меняться от запуска к запуску.
20.06.2014 1.0.3 Исправлен дефект, при котором функции morpher_inflect и morpher_get_gender могли выдавать #ERROR: Parameter 1 'text' is not Russian. при корректных входных данных, если в веб-сервере установлена нестандартная локаль. Теперь работа этих функций не зависит от выбранной локали.
9.11.2014 1.0.4 Процедура установки изменена таким образом, что модуль теперь настраивается на вашу версию PHP во время установки. В предыдущих версиях под каждую версию PHP (5.3, 5.4, 5.5...) поставлялась отдельная версия модуля.
24.04.2016 1.0.8 Улучшена совмесимость с ОС CentOS.
25.04.2016 1.0.9 Поддержка PHP 7.
07.09.2016 1.0.10 Добавлена функция перевода из единственного числа во множественное.
30.09.2016 1.1.0
  • Добавлена функция прописи чисел и денежных сумм.
  • Исправлены ошибки, внесенные в предыдущей версии:
    • для параметра "падеж", равного predl-o, выдавалась форма без предлога, как для predl;
    • для параметра "падеж", равного im, выдавалась форма родительного падежа, как для rod.

Комментарии

Добавить комментарий
Максим 26.05.2014 07:00 UTC

Сергей большое спасибо за саму библиотеку, и не меньшее спасибо за терпение при её настройке.



(аноним) 18.02.2015 09:46 UTC

Спасибо автору за PHP-расширение, работает отлично (пока ошибок нет), очень помогает в работе по генерации разнообразных seo-текстов. Хотелось бы попросить развивать данный модуль и добавить в него функционал, который уже есть в работе веб-сервиса. Особенно не хватает возможности получить результат во множественном числе (просто удобнее когда все эти функции имеются в одной библиотеке и нет необходимости подключать дополнительные библиотеки или скрипты).



(аноним) 15.05.2015 10:09 UTC

Добрый день, подскажите пожалуйста результат вызова morpher_get_gender на следующих примерах:
var_dump(morpher_get_gender('Иван'));
var_dump(morpher_get_gender('Ольга'));
var_dump(morpher_get_gender('ольга'));
var_dump(morpher_get_gender('Армен'));
var_dump(morpher_get_gender('andrej'));
var_dump(morpher_get_gender('jklqwjkqwljdlqk'));
var_dump(morpher_get_gender('ыолукдаоцулга'));



Сергей Слепов 16.05.2015 17:15 UTC

string(1) "m"
string(1) "f"
string(1) "f"
string(1) "m"
string(42) "#ERROR: Parameter 1 'text' is not Russian."
string(42) "#ERROR: Parameter 1 'text' is not Russian."
string(1) "f"



AlxD 16.06.2015 06:04 UTC

Недавно купил модуль morpher. Установил успешно. Все работает как и обещано, но несколько удивился, что в нем нет функции создания "суммы прописью". Почему-то считал, что она в нем должна быть, ведь в веб-сервисе есть! Или я чего-то не понял? :)



Сергей Слепов 16.06.2015 21:56 UTC

Да, функции "сумма прописью" в модуле пока нет. Следите за новостями: facebook.com/morpherru.



Ivan 07.08.2015 10:03 UTC

Обновляем версию php на сервере, есть ли версия morpher под PHP 5.6.11?



Сергей Слепов 07.08.2015 11:30 UTC

Ivan, имеющаяся у вас версия Морфера должна собираться под любую версию PHP. Установите соответствующий пакет php5-dev, версия берется из него. Если что, пишите в поддержку: Контакты



Иван 30.01.2016 16:17 UTC

Вопрос следующий. При покупке я получаю dll, которая будет работать локально? Или она будет так же, как в случае с бесплатным аккаунтом, лезть через интернет к веб-сервису и выдавать ответ? Если мне необходимо использование библиотеки в условиях отсутствия выхода в интернет, как быть? Или если вы вдруг прекратите обслуживание сервиса?
Спасибо.



Сергей Слепов 30.01.2016 21:30 UTC

Иван, библиотека полностью автономна и не требует доступа в Интернет.



Константин 19.02.2016 04:12 UTC

М или gde местный падеж (отвечает на вопрос где?)

Местный падеж не отвечает на запрос никаким образом. Все остальные падежи нормально. Тест был сегодня утром.



Константин 19.02.2016 05:40 UTC

П_о или predl-o предложный падеж с предлогом о/об/обо

Не отвечает тоже.



Андрей 23.02.2016 06:49 UTC

Как можно установить ваш модуль на FreeBSD? В ней нет программы apt-get. Как быть?



Добавить комментарий

Купить модуль morpher.so для PHP

Цена модуля 7000 р. В цену входят:

  • Поддержка. Если у вас возникнут вопросы по установке или использованию модуля, мы с радостью на них ответим. Наши контакты
  • Гарантия работоспособности и отсутствия дефектов. Если у вас возникнут проблемы с установкой модуля, либо вы обнаружите в модуле дефекты, такие как зависание, аварийное завершение работы или несоответствие документации, мы приложим все усилия, чтобы решить эти проблемы. Если устранить проблему не удастся, мы вернем вам деньги в полном объеме. Неправильное склонение или определение рода не признается дефектом.
  • Обновления. При выходе новой версии вы сможете скачать ее бесплатно по той же самой ссылке (ссылка будет выслана вам в письме).

Все услуги предоставляются в течение 1 года с даты покупки. Ограничений на срок работы модуля нет.

Процесс покупки займет всего несколько минут.


 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2016. Перепечатка материалов сайта только с разрешения автора.