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 склоняет словосочетание в именительном падеже (первый аргумент) в любой падеж (второй аргумент). Падеж может принимать следующие значения:

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

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

Соответствующая функция для украинского языка называется morpher_ukr_inflect. Она работает пока только с фамилиями, именами и отчествами и отличается от русской названиями падежей:

Нилиnazименительный падеж (називний відмінок)
Рилиrodродительный падеж (родовий відмінок)
Дилиdavдательный падеж (давальний відмінок)
Зилиznaвинительный падеж (знахідний відмінок)
Оилиoruтворительный падеж (орудний відмінок)
Милиmisпредложный падеж (місцевий відмінок) без предлога
Килиklyзвательный падеж (кличний відмінок)

Перевод во множественное число в украинской версии пока не реализован.

Функия разбития ФИО на состовляющие

Функция morpher_split_fio разбивает входную строку на массив из фамилии, имя, отчества

<?php list($f,$i,$o) = morpher_split_fio("Пупкин Василий"); echo "Ф: $f\n"; echo "И: $i\n"; echo "О: $o\n";?>
Ф: Пупкин И: Василий О:

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

Если ко второму параметру добавить строку "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_ukr_get_gender. Она возвращает только "m" (мужской) или "f" (женский).

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

Функция 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, build-essential и 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

Возможные ошибки при сборке и пути их устранения

Ошибка: /usr/bin/ld: cannot find -lm

Причина: у вас не установлен пакет glibc-static.

Установка модуля на Windows

Morpher php для windows поставляется в виде .dll. Для каждой версии php поставляется отдельная версия .dll, пожалуйста, при покупке указывайте полную версию php. Все DLL делятся на две версии: TS и NTS. Какую версию выбрать? OpenServer использует TS версии php для всех конфигураций. В иных случаях

  • Apache + LoadModule: TS версия
  • Apache + FastCGI: NTS версия
  • IIS: TS версия
  • IIS + FastCGI: NTS версия
  • Nginx (OpenServer): TS версия

Еще один из способ узнать какая версия вам нужно, открыть папку с php и найти один из файлов, если найдете php5ts.dll это TS версия, php5.dll - NTS версия.

Установка на OpenServer

  • Открываем директорию с openserver
  • Переходим в \modules\php\PHP-{версия}*\ext
  • Распаковываем .dll в эту директорию
  • Открываем php.ini
  • Добавляем строку extension=morpher_php_{версия}*.dll
  • Перезапускаем OpenServer
  • Введите команды:
    chcp 1251
    php -r "echo morpher_inflect('морфер','dat');"

* {версия} - заменить на версию из названия .dll

Различие с Linux модулем

Единственным различием Windows и Linux версией является кодировка. В Linux модуль использует UTF-8, в Windows - Win-1251.

Ввод из PHP как правило происходит в UTF8, поэтому для кроссплатформенного решения вы можете использовать подобный код:

If (defined('PHP_WINDOWS_VERSION_MAJOR')) { echo iconv(‘windows-1251, ‘utf-8, morpher_inflect(iconv(‘utf-8, ‘windows-1251, ‘морфер’), ‘dat’); } else { echo morpher_inflect(‘морфер’, dat’); }

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

Поддерживаемые версии 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.

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

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

Дата Версия  
15.09.2017 1.2.9 Исправлена сборка на GCC 4.7.X
29.06.2017 1.2.8 Исправлено склонение с сокращением: ООО "Рога и Копыта"
7.06.2017 1.2.7 Добавлена функция morpher_split_fio
17.01.2017 1.2.4 В функции morpher_spell исправлена ошибка «ноль годов». Добавлены копейки к белорусскому рублю в связи с его деноминацией. Старый (до июня 2016 г.) белорусский рубль имеет обозначение BYR, новый — BYN. Пропись BYR не содержит копеек, а BYN содержит.
13.01.2017 1.2.3 Исправлено склонение некоторых слов с дефисом, например: Нью-Йорк, Лос-Анджелес. Ранее неправильно выдавался винительный падеж: Нью-Йорка, Лос-Анджелеса вместо правильных Нью-Йорк, Лос-Анджелес.
9.09.2016 1.2.2 Внутреннее имя модуля morpher.so изменено с hello на morpher. "Неправильное" имя никак не сказывалось на работоспособности модуля, просто приводило к путанице, т.к. в выводе команды php -m модуль фигурировал как hello. Теперь выдается morpher.
7.09.2016 1.2.1 Исправлена ошибка компиляции, проявлявшаяся на некоторых версиях gcc. Ошибка была внесена в предыдущей версии.
2.09.2016 1.2.0 Добавлены функции склонения и определения рода для украинского языка.
30.08.2016 1.1.0
  • Добавлена функция прописи чисел и денежных сумм.
  • Исправлены ошибки, внесенные в предыдущей версии:
    • для параметра "падеж", равного predl-o, выдавалась форма без предлога, как для predl;
    • для параметра "падеж", равного im, выдавалась форма родительного падежа, как для rod.
07.08.2016 1.0.10 Добавлена функция перевода из единственного числа во множественное.
25.04.2016 1.0.9 Поддержка PHP 7.
24.04.2016 1.0.8 Улучшена совмесимость с ОС CentOS.
9.11.2014 1.0.4 Процедура установки изменена таким образом, что модуль теперь настраивается на вашу версию PHP во время установки. В предыдущих версиях под каждую версию PHP (5.3, 5.4, 5.5...) поставлялась отдельная версия модуля.
20.06.2014 1.0.3 Исправлен дефект, при котором функции morpher_inflect и morpher_get_gender могли выдавать #ERROR: Parameter 1 'text' is not Russian. при корректных входных данных, если в веб-сервере установлена нестандартная локаль. Теперь работа этих функций не зависит от выбранной локали.
10.06.2014 1.0.2 Исправлен дефект, при котором функция morpher_inflect могла выдавать #ERROR: Parameter 1 'text' is not Russian. при корректных входных данных, при этом поведение функции могло меняться от запуска к запуску.
29.05.2014 1.0.1 Функция sklon переименована в morpher_inflect. Добавлена функция morpher_get_gender.

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

«Бизнес» «Компания» «Корпорация»
Неограниченная лицензия на использование продукта Да Да Да
Поддержка,1 гарантия 2 и обновления 3 6 месяцев 6 месяцев 1 год
Помощь со сборкой под вашу платформу 4 Под одну платформу Под одну платформу Под три платформы
Windows версия Да Да
Заключение договора, пересылка по почте Да Да
Цена 5 900 р. 15 000 р. 29 000 р.
Купить Заключить договор Заключить договор

Примечания:

  1. Поддержка включает в себя консультации по использованию модуля по телефону и электронной почте. Наши контакты.
  2. Гарантия работоспособности и отсутствия дефектов. Если вы обнаружите в модуле дефекты, такие как зависание, аварийное завершение работы или несоответствие документации, мы обязуемся устранить эти дефекты. Неправильное склонение или определение рода не признается дефектом.
  3. Обновления. При выходе новой версии вы сможете скачать ее бесплатно по той же самой ссылке (ссылка будет выслана вам в письме).
  4. Модуль поставляется в виде исходных кодов на C++ и для сборки требует настроенного и работающего набора инструментов компилятора gcc версии 4.7 и выше. По нашему опыту примерно 20% пользователей требуется помощь с настройкой gcc. Помощь обычно предоставляется через ssh-соединение к вашему терминалу. Заказать сборку под (еще) одну платформу можно у нас за 3000 р. Мы не предоставляем готовых сборок, т.к. PHP требует пересборки для каждой своей минорной версии (5.3, 5.4, 5.5...) Таким образом, каждую версию Морфера нам пришлось бы выпускать в количестве сборок, равном количеству поддерживаемых ОС, умноженному на количество поддерживаемых версий PHP и на количество поддерживаемых архитектур процессоров.

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

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



 

Библиотеки

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

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