emagedev/morpher

This package is abandoned and no longer maintained. No replacement package was suggested.

Magento extension to inflect russian word with API of website morpher.ru

Installs: 198

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:magento-module

1.1.4 2018-04-19 16:06 UTC

This package is not auto-updated.

Last update: 2021-04-13 20:56:05 UTC


README

Склонятор для Magento

Этот модуль позволит склонять слова в зависимости от контекста с помощью онлайн сервиса morpher.ru. Первый запрос осуществляется через REST API, дальнейшие - из кэша в базе данных, что позволяет не нагружать сервис лишними запросами (они ограничены по бесплатной и платной подпискам).

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

Все передаваемые в модуль слова и фразы должны быть в именительном падеже

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

# Mage::helper('morpher')->inflectWordByNumber($number, $phrase [, $keepNumber = false [, $translate = false ]])

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

  • $number определяет число, относительно которого нужно склонить слово
  • $phrase определяет фразу или слово для склонения
  • $keepNumber определяет, стоит ли оставлять число перед словом или фразой
  • $translate определяет, необходимо ли переводить слово или фразу перед склонением, и каким модулем (может быть строкой, например yourmoule, или логическим значением)

Пример:

Mage::helper('morpher')->inflectWordByNumber(5, 'item', true, 'catalog');

Вернет:

5 товаров

Mage::helper('morpher')->inflectWordByNumber(1, 'piece', false, 'yourmodule');

Вернет:

1 штука

В вашем модуле thing должно быть переведено как штука

Склонение имён

# Mage::helper('morpher')->inflectName($name, $inflection [, $flags = array()])

Функция поможет склонять имена ваших пользователей.

  • $name имя пользователя
  • $inflection склонение
  • $flags определяет дополнительные флаги для более точного склонения

API неплохо различает имена, но если есть возможность, следует указать род в флагах или использовать следующие методы:

  • inflectMaleName($name, $inflection [, $flags = array()]) для мужских
  • inflectFemaleName($name, $inflection [, $flags = array()]) для женских

Пример:

Mage::helper('morpher')->inflectMaleName('Ломоносов, Михаил Васильевич', Emagedev_Morpher_Helper_Data::DATIVE);

Вернет:

Ломоносову, Михаилу Васильевичу

Mage::helper('morpher')->inflectFemaleName('Любовь Эдуардовна Соболь', Emagedev_Morpher_Helper_Data::GENITIVE);

Вернет:

Любови Эдуардовны Соболь

Общий случай

# Mage::helper('morpher')->inflectWord($phrase, $inflection [, $multi = false [, $flags = array() [, $translate = false ]]])

Функция склоняет слово с заданными параметрами.

  • $phrase фраза или слово для склонения
  • $inflection склонение
  • $multi определяет множественное ли число
  • $flags определяет дополнительные флаги для более точного склонения
  • $translate определяет, необходимо ли переводить слово или фразу перед склонением, и каким модулем (может быть строкой, например yourmoule, или логическим значением)

Авторизация на morpher.ru

Авторизация необходима для расширения лимита на склонение слов. Ваш логин и пароль вы можете ввести в панели управления в конфигурации. Настройки расположены в группе API (в стандартном переводе СЕРВИСЫ) во вкладке API сайта morpher.ru.

Шпаргалка

# Склонения

Если ваш кодстайл не позволяет напрямую использовать кириллицу в коде, для склонений есть алиасы, записанные как константы в хелпере Emagedev_Morpher_Helper_Data.

Падеж Символ Алиас
Именительный И Emagedev_Morpher_Helper_Data::NOMINATIVE
Родительный Р Emagedev_Morpher_Helper_Data::GENITIVE
Дательный Д Emagedev_Morpher_Helper_Data::ACCUSATIVE
Винительный В Emagedev_Morpher_Helper_Data::DATIVE
Творительный Т Emagedev_Morpher_Helper_Data::INSTRUMENTAL
Предложный П Emagedev_Morpher_Helper_Data::PREPOSITIONAL
Предложный (о) П Emagedev_Morpher_Helper_Data::PREPOSITIONAL_WITH_PREFIX
Местный (см. API) М Emagedev_Morpher_Helper_Data::LOCATION

# Флаги

Нужны для повышения качества склонения. Есть слова, которые могут склоняться по-разному, например:

  • Фамилия Резник склоняется у мужчин и не склоняется у женщин;
  • Ростов в творительном падеже будет Ростовым, если это фамилия, и Ростовом, если это город;
  • тестер в винительном падеже будет тестера, если это человек, и тестер, если имеется в виду прибор.

Методы inflectName, inflectMaleName, inflectFemaleName используют необходимые флаги по умолчанию

Флаг Описание Алиас
Feminine И Emagedev_Morpher_Helper_Data::FLAG_FEMININE
Masculine Р Emagedev_Morpher_Helper_Data::FLAG_MASCULINE
Animate Д Emagedev_Morpher_Helper_Data::FLAG_ANIMATE
Inanimate В Emagedev_Morpher_Helper_Data::FLAG_INANIMATE
Common Т Emagedev_Morpher_Helper_Data::FLAG_COMMON
Name П Emagedev_Morpher_Helper_Data::FLAG_NAME

Юнит тесты

Основная логика покрыта, для запуска нужен модуль EcomDev_PHPUnit

To Do:

  • Покрыть тестами логику имен
  • Добавить кейс для предложно-падежных форм для мест (теги <где>, <куда> и <откуда>)
  • Добавить кейс для прилагательных

N.B. Не забывайте модифицировать ключи кэша для корректной работы с числами.

N.B. Так как функции модуля - косметические, модуль как правило не поднимает ошибок. Если что-то работает некорректно, стоит посмотреть в логи.

Описание API тут: http://morpher.ru/ws3/

Все совпадения с реальными лицами в примере случайны.