Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

morpher-ws3-client

morpher-ru264MIT1.0.8

JavaScript-клиент веб-сервиса "Морфер" 3.0

morpher, морфер, склонятель, склонение, ударение, склонятор, падеж, падежам, родительный, дательный, винительный, творительный, предложный, русском, украинском, казахском

readme

Склонение по падежам (Морфер)

Build Status npm version GitHub license npm

Библиотека реализует следующие функции

(с помощью веб-сервиса "Морфер 3.0")

На русском языке:

На украинском языке:

На казахском языке:

Общие:

Пользовательский словарь

Веб-сервис поддерживает исправление склонения по требованию пользователя. Для этого имеются 3 метода:

Веб-сервис "Морфер 3.0" предусматривает бесплатное (с ограничениями) и платное использование. Подробнее смотрите на сайте проекта.

Загрузка

Установка

Браузер


<script src="morpher.min.js"></script>

Node.js

При использовании npm:

npm i morpher-ws3-client

Примечание: добавьте --save, если вы используете npm < 5.0.0

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

const morpher = new Morpher({
  baseUrl: 'https://localhost', // по умолчанию https://ws3.morpher.ru
  token: 'YOUR_TOKEN',          // по умолчанию null
  timeoutMs: 1000,              // по умолчанию 3000
});

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

const morpher = new Morpher();

Склонение по падежам на русском языке

Для склонения слов и словосочетаний используется метод russian.declension(phrase, flags):

morpher.russian.declension('Программист').then(
    result => {
      console.log(result['родительный']);                  // Программиста
      console.log(result['множественное']['родительный']); // Программистов
      console.log(result.множественное.родительный);       // Программистов
      console.log(result.plural.genitive);                 // Программистов
    },
    error => {
      if (typeof error === 'MorpherError') {
        console.error(error.message + ' Код ошибки: ' + error.code);
      } else {
        console.error(error);
      }
    }
);

result — объект DeclensionResult со следующими свойствами:

  • именительный (nominative) — текст в именительном падеже;
  • родительный (genitive) — текст в родительном падеже;
  • дательный (dative) — текст в дательном падеже;
  • винительный (accusative) — текст в винительном падеже;
  • творительный (instrumental) — текст в творительном падеже;
  • предложный (prepositional) — текст в предложном падеже;
  • множественное (plural) — объект со свойствами-падежами для текста во множественном числе.

При использовании платного аккаунта на сервисе, определяются дополнительные свойства:

  • предложный_О (prepositional_O) — предложный падеж с предлогом О/ОБ/ОБО, предлог выбирается автоматически;
  • род (gender) — род (мужской, женский или средний);
  • где (gde, where, locative) — в местном падеже (локатив) с предлогом;
  • куда (kuda, where_to) — в направительном падеже (аллатив) с предлогом;
  • откуда (otkuda, where_from, whence) — в исходном падеже (аблатив) с предлогом.

Флаги для разрешения неоднозначностей

Есть слова, которые могут склоняться по-разному, например:

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

Для повышения качества склонения вы можете сообщить веб-сервису дополнительную информацию через флаги. Несколько флагов можно передать через запятую:

morpher.russian.declension('Слепов Сергей Николаевич', Morpher.FLAG_NAME, Morpher.FLAG_MASCULINE).then(
    result => {
      console.log(result['родительный']); // Слепова Сергея Николаевича
      console.log(result.fullName.name);  // Сергей
    }
);

Флаги поддерживаемые для russian.declension(phrase, flags):

  • Morpher.FLAG_FEMININE — Женский род;
  • Morpher.FLAG_MASCULINE — Мужской род;
  • Morpher.FLAG_ANIMATE — Одушевлённое;
  • Morpher.FLAG_INANIMATE — Неодушевлённое;
  • Morpher.FLAG_COMMON — Нарицательное;
  • Morpher.FLAG_NAME — ФИО.

Выделение в строке фамилии, имени и отчества

Если входная строка распознана как ФИО, то объект DeclensionResult будет содержать разбивку строки на фамилию, имя и отчество:

  • родительный (genitive) — ФИО в родительном падеже;
  • дательный (dative) — ФИО в дательном падеже;
  • винительный (accusative) — ФИО в винительном падеже;
  • творительный (instrumental) — ФИО в творительном падеже;
  • предложный (prepositional) — ФИО в предложном падеже;
  • имя (name);
  • фамилия (surname);
  • отчество (patronymic).

Пропись чисел и согласование с числом

Метод russian.spell(number, unit) решает задачу получения прописи числа (тысяча сто двадцать пять) и согласование единицы измерения с предшествующем числом (1 попугай, 2 попугая, 5 попугаев):

morpher.russian.spell(235, 'рубль').then(
    result => {
      console.log(result['n']['родительный']);    // двухсот тридцати пяти
      console.log(result.n.genitive);             // двухсот тридцати пяти

      console.log(result['unit']['родительный']); // рублей
      console.log(result.unit.genitive);          // рублей
    }
);

Комбинируя соответствующие падежные формы n и unit, можно получить вывод «суммы прописью» на любой вкус:

  • 235 рублей
  • Двести тридцать пять рублей
  • 235 (двести тридцать пять) рублей и т.п.

Пропись чисел в виде порядковых числительных

Метод russian.spellOrdinal(number, unit) похож на russian.spell(number, unit), но возвращает пропись числа в форме порядкового числительного:

morpher.russian.spellOrdinal(5, 'колесо').then(
    result => {
      console.log(result['n']['родительный']);    // пятого
      console.log(result['unit']['родительный']); // колеса

      console.log(result.n.genitive);             // пятого
      console.log(result.unit.genitive);          // колеса
    }
);

Пропись дат

Метод russian.spellDate(date) склоняет по падежам дату, заданную в формате ГГГГ-ММ-ДД:

morpher.russian.spellDate('2019-06-29').then(
    result => {
      console.log(result['родительный']);  // двадцать девятого июня две тысячи девятнадцатого года
      console.log(result.genitive);        // двадцать девятого июня две тысячи девятнадцатого года

      console.log(result['творительный']); // двадцать девятому июня две тысячи девятнадцатого года
      console.log(result.instrumental);    // двадцать девятому июня две тысячи девятнадцатого года
    }
);

Склонение прилагательных по родам

Метод russian.adjectiveGenders(adjective) склоняет данное ему прилагательное, преобразуя его из мужского рода в женский, средний и во множественное число:

morpher.russian.adjectiveGenders('уважаемый').then(
    result => {
      console.log(result['женский']);    // уважаемая
      console.log(result.feminine);      // уважаемая

      console.log(result.средний);       // уважаемое
      console.log(result.neuter);        // уважаемое

      console.log(result.множественное); // уважаемые
      console.log(result.plural);        // уважаемые
    }
);

Требования к входному прилагательному:

  • Оно должно быть в мужском роде, в единственном числе.
  • Оно должно быть полным, т.е. "полный", а не "полон".
  • Оно должно быть одним словом. Внутри слова допустимы дефис и апостроф: рабоче-крестьянский, Кот-д'Ивуарский. Вокруг слова допустимы пробелы, кавычки и другие знаки.

Образование прилагательных

Метод russian.adjectivize(lemma) образует прилагательные от названий городов и стран: Москва – московский, Ростов – ростовский, Швеция – шведский, Греция – греческий.

Пример:

morpher.russian.adjectivize('Москва').then(
    result => {
      console.log(result); // ['московский']
    }
);

Метод возвращает массив строк. Что они означают, описано здесь.

Расстановка ударений в текстах

Метод russian.addStressMarks(text) расставляет ударения в текстах на русском языке:

morpher.russian.addStressMarks('Три девицы под окном').then(
    result => {
      console.log(result); // Три деви́цы под окно́м
    }
);

Ударение отмечается символом с кодом U+0301, который вставляется сразу после ударной гласной. Односложные слова не получают знака ударения, за исключением случаев, когда предлог или частица несет на себе ударение: за́ руку, не́ за что. Варианты прочтения разделяются вертикальной чертой, например:

morpher.russian.addStressMarks('Белки питаются белками').then(
    result => {
      console.log(result); // Бе́лки|Белки́ пита́ются бе́лками|белка́ми
    }
);

Склонение по падежам на украинском языке

Украинский вариант склонения — метод ukrainian.declension(phrase, flags):

morpher.ukrainian.declension('Крутько Катерина Володимирiвна').then(
    result => {
      console.log(result['родовий']); // Крутько Катерини Володимирівни
      console.log(result.давальний);  // Крутько Катерині Володимирівні
      console.log(result.vocative);   // Крутько Катерино Володимирівно
    },
);

result — объект DeclensionResult со следующими свойствами:

  • називний (nominative) — текст в именительном падеже;
  • родовий (genitive) — текст в родительном падеже;
  • давальний (dative) — текст в дательном падеже;
  • знахідний (accusative) — текст в винительном падеже;
  • орудний (instrumental) — текст в творительном падеже;
  • місцевий (prepositional) — текст в местном падеже;
  • кличний (vocative) — текст в звательном падеже.

При использовании платного аккаунта на сервисе, определяются дополнительные свойства:

  • рід (gender) — род (чоловічий, жіночий);

Украинская версия пока обрабатывает только имена, фамилии и отчества.

Флаги для разрешения неоднозначностей

morpher.ukrainian.declension('Карен', Morpher.FLAG_FEMININE).then(
    result => {
      console.log(result['родовий']); // Карен (женское имя не склоняется)
    }
);

Флаги поддерживаемые для ukrainian.declension(phrase, flags):

  • Morpher.FLAG_FEMININE — Женский род;
  • Morpher.FLAG_MASCULINE — Мужской род;
  • Morpher.FLAG_NEUTER — Средний род;
  • Morpher.FLAG_PLURAL — Множественное число.

Пропись чисел и согласование с числом на украинском языке

Метод ukrainian.spell(number, unit) решает задачу получения прописи числа (одна тисяча сто двадцять п'ять) и согласование единицы измерения с предшествующем числом (один рубль, два рубля, п'ять рублів):

morpher.ukrainian.spell(235, 'рубль').then(
    result => {
      console.log(result['n']['родовий']);    // двохсот тридцяти п'яти
      console.log(result.n.genitive);         // двохсот тридцяти п'яти

      console.log(result['unit']['родовий']); // рублів
      console.log(result.unit.genitive);      // рублів
    }
);

Склонение по падежам, числам и лицам на казахском языке

Для склонения слов и словосочетаний используется метод qazaq.declension(phrase):

morpher.qazaq.declension('менеджер').then(
    result => {
      console.log(result['ілік']);          // менеджердің
      console.log(result.genitive);         // менеджердің

      console.log(result['көпше']['ілік']); // менеджерлердің
      console.log(result.plural.genitive);  // менеджерлердің

      console.log(result['көпше']['біздің']['ілік']); // менеджерлеріміздің
    }
);

result — объект DeclensionResult со следующими свойствами:

  • атау (nominative) — текст в именительном падеже;
  • ілік (genitive) — текст в родительном падеже;
  • барыс (dative) — текст в дательно-направительном падеже;
  • табыс (accusative) — текст в винительном падеже;
  • шығыс (ablative) — текст в исходном падеже;
  • жатыс (locative) — текст в местном падеже;
  • көмектес (instrumental) — текст в творительном падеже;
  • көпше (plural) — возвращает объект со свойствами-падежами для текста во множественном числе.

Остаток запросов

Метод getQueriesLeft() возвращает остаток запросов на данный момент. Лимит на запросы восстанавливается в 00:00 UTC.

morpher.getQueriesLeft().then(
    result => {
      console.log(result); // 100
    }
);

Получить список исправлений

Для того чтобы получить список всех исправлений, нужно использовать метод russian.userDict.getAll() или ukrainian.userDict.getAll():

morpher.russian.userDict.getAll().then(
    result => {
      console.log(result); // Массив с объектами СorrectionEntry
    }
);

Объект СorrectionEntry со следующими свойствами:

  • singular — объект CorrectionForms с формами в единственном числе;
  • plural — объект CorrectionForms с формами во множественном числе;
  • gender — род (мужской, женский или средний).

Объект CorrectionForms со следующими свойствами:

  • именительный (nominative) — текст в именительном падеже;
  • родительный (genitive) — текст в родительном падеже;
  • дательный (dative) — текст в дательном падеже;
  • винительный (accusative) — текст в винительном падеже;
  • творительный (instrumental) — текст в творительном падеже;
  • предложный (prepositional) — текст в предложном падеже;
  • местный (locative) — текст в местном падеже;

Для украинского языка:

Объект СorrectionEntry со следующими свойствами:

  • singular — объект CorrectionForms с формами в единственном числе;
  • gender — род (чоловічий, жіночий).

Объект CorrectionForms со следующими свойствами:

  • називний (nominative) — текст в именительном падеже;
  • родовий (genitive) — текст в родительном падеже;
  • давальний (dative) — текст в дательном падеже;
  • знахідний (accusative) — текст в винительном падеже;
  • орудний (instrumental) — текст в творительном падеже;
  • місцевий (prepositional) — текст в местном падеже;
  • кличний (vocative) — текст в звательном падеже.

Добавить или изменить исправление

Для добавления или изменения исправления использовать метод russian.userDict.addOrUpdate(entry).

const entry = {
  singular: {
    nominative: 'Кошка',
    dative: 'Пантере',
  },
  plural: {
    dative: 'Пантерам',
  },
};

morpher.russian.userDict.addOrUpdate(entry).then(
    result => {
      console.log(result); // true
    }
);

Для украинского языка:

const entry = {
  singular: {
    nominative: 'Кiшка',
    dative: 'Пантерi',
  },
};

morpher.ukrainian.userDict.addOrUpdate(entry).then(
    result => {
      console.log(result); // true
    }
);

Удаление исправления

Для того чтобы удалить исправление, достаточно передать строку в именительном падеже в метод russian.userDict.remove(nominativeForm):

morpher.russian.userDict.remove('Кошка').then(
    result => {
      console.log(result); // true
    }
);

Для украинского языка:

morpher.ukrainian.userDict.remove('Кiшка').then(
    result => {
      console.log(result); // true
    }
);

Разработка

Node: Убедитесь, что установлена версия Node.js не ниже ^12. Проверить это можно с помощью node -v.

Установка

Сделайте форк репозитория morpher-ws3-js-client.

Затем выполните:

$ git clone https://github.com/<your-github-username>/morpher-ws3-js-client
$ cd morpher-ws3-js-client

Запуск тестов

unit:

$ npm test

e2e:

$ npm run test:e2e

Сборка

$ npm build

Выпуск нового релиза

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

На странице настроек в Travis-CI должны быть указаны Environment Variables:

License

MIT