Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/georgy7/russiannounsjs
Склонение существительных по падежам. Обычно требуются только форма в именительном падеже, одушевлённость и род.
https://github.com/georgy7/russiannounsjs
declension declination inflection inflector no-dependencies pluralization russian russian-language russian-morphology russian-specific zero-dependency
Last synced: 14 days ago
JSON representation
Склонение существительных по падежам. Обычно требуются только форма в именительном падеже, одушевлённость и род.
- Host: GitHub
- URL: https://github.com/georgy7/russiannounsjs
- Owner: georgy7
- License: mit
- Created: 2016-07-27T19:56:36.000Z (over 8 years ago)
- Default Branch: release
- Last Pushed: 2022-02-23T22:27:15.000Z (over 2 years ago)
- Last Synced: 2024-10-14T00:50:54.956Z (about 1 month ago)
- Topics: declension, declination, inflection, inflector, no-dependencies, pluralization, russian, russian-language, russian-morphology, russian-specific, zero-dependency
- Language: JavaScript
- Homepage:
- Size: 13.1 MB
- Stars: 47
- Watchers: 3
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.RU.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[![npm version][npm-shield]][npm-url]
[![MIT License][license-shield]][license-url]
RussianNounsJS
A JavaScript library that declines nouns.
View Demo
·
Run Tests
·
Report Bug
·
Wiki
Table of Contents
## Installation
### Frontend
```html
```
or (without [AMD](https://en.wikipedia.org/wiki/Asynchronous_module_definition))
```html
```
```js
import 'RussianNouns.js';
```or (in a Web Worker)
```js
importScripts('RussianNouns.js');
```### Backend
```
npm i --save russian-nouns-js
``````js
const RussianNouns = require('russian-nouns-js');
```For TypeScript, there are
[type definitions](https://www.npmjs.com/package/@types/russian-nouns-js)
[written by Alexander Semin](https://github.com/RusAnonym/DefinitelyTyped/tree/master/types/russian-nouns-js).## Usage
### The basics
```js
RussianNouns.CASES;
// [
// "именительный",
// "родительный",
// "дательный",
// "винительный",
// "творительный",
// "предложный",
// "местный"
// ]// Grammatical gender is a noun class system in Russian.
RussianNouns.Gender;
// {
// FEMININE: "женский",
// MASCULINE: "мужской",
// NEUTER: "средний",
// COMMON: "общий"
// }const rne = new RussianNouns.Engine();
rne.decline({text: 'имя', gender: 'средний'}, 'родительный');
// [ "имени" ]rne.decline({text: 'имя', gender: 'средний'}, 'творительный');
// [ "именем" ]const Gender = RussianNouns.Gender;
const Case = RussianNouns.Case;let coat = RussianNouns.createLemma({
text: 'пальто',
gender: Gender.NEUTER,
indeclinable: true
});rne.decline(coat, Case.GENITIVE);
// [ "пальто" ]RussianNouns.getDeclension(coat);
// -1let mountain = RussianNouns.createLemma({
text: 'гора',
gender: Gender.FEMININE
});RussianNouns.CASES.map(c => {
return rne.decline(mountain, c);
});
// [
// ["гора"]
// ["горы"]
// ["горе"]
// ["гору"]
// ["горой", "горою"]
// ["горе"],
// ["горе"]
// ]rne.pluralize(mountain);
// [ "горы" ]RussianNouns.CASES.map(c => {
return rne.decline(mountain, c, 'горы');
});// [
// [ 'горы' ]
// [ 'гор' ]
// [ 'горам' ]
// [ 'горы' ]
// [ 'горами' ]
// [ 'горах' ]
// [ 'горах' ]
// ]RussianNouns.getDeclension(mountain);
// 2RussianNouns.getSchoolDeclension(mountain);
// 1let way = RussianNouns.createLemma({
text: 'путь',
gender: Gender.MASCULINE
});RussianNouns.getDeclension(way);
// 0let scissors = RussianNouns.createLemma({
text: 'ножницы',
pluraleTantum: true
});rne.pluralize(scissors);
// [ 'ножницы' ]RussianNouns.CASES.map(c => {
return rne.decline(scissors, c);
});
// [
// [ 'ножницы' ]
// [ 'ножниц' ]
// [ 'ножницам' ]
// [ 'ножницы' ]
// [ 'ножницами' ]
// [ 'ножницах' ]
// [ 'ножницах' ]
// ]
```### Stress dictionary tuning
```js
let кринж = RussianNouns.createLemma({
text: 'кринж',
gender: Gender.MASCULINE
});const rne = new RussianNouns.Engine();
rne.decline(кринж, Case.INSTRUMENTAL); // [ "кринжем" ]
// Change of stresses.
// Before the hyphen, there are singular settings.
// After the hyphen are the plural settings.
// The letter number in the settings is the case number in CASES.
// S — Stress is on the stem only.
// s — Stress is more often on the stem.
// b — Stress can be both on the stem and the ending equally.
// e — Stress is more often on the ending.
// E — Stress is on the ending only.
rne.sd.put(кринж, 'SEESESE-EEEEEE');rne.decline(кринж, Case.INSTRUMENTAL); // [ "кринжом" ]
rne.sd.put(кринж, 'SEESbSE-EEEEEE');
rne.decline(кринж, Case.INSTRUMENTAL); // [ "кринжем", "кринжом" ]rne.sd.put(кринж, 'SEESsSE-EEEEEE');
rne.decline(кринж, Case.INSTRUMENTAL); // [ "кринжем", "кринжом" ]rne.sd.put(кринж, 'SEESeSE-EEEEEE');
rne.decline(кринж, Case.INSTRUMENTAL); // [ "кринжом", "кринжем" ]
```### A complex example
```js
const rne = new RussianNouns.Engine();const Ⰳ = (word, caseNumber) => {
const c = RussianNouns.CASES[caseNumber - 1];
return rne.decline(word, c)[0];
};const Ⰴ = (word, caseNumber) => {
const c = RussianNouns.CASES[caseNumber - 1];
const result = rne.decline(word, c);
return result[result.length - 1];
};const ⰃⰃ = (word, caseNumber) => {
const c = RussianNouns.CASES[caseNumber - 1];
const pluralForm = rne.pluralize(word)[0];
return rne.decline(word, c, pluralForm)[0];
};const L = RussianNouns.createLemma;
const Gender = RussianNouns.Gender;
const cap = (str) => str[0].toUpperCase() + str.substring(1);// -----------------------------------------------
// Александр Сергеевич Пушкин
// Зимний вечер (фрагмент)const буря = L({text: 'буря', gender: Gender.FEMININE});
const мгла = L({text: 'мгла', gender: Gender.FEMININE});
const небо = L({text: 'небо', gender: Gender.NEUTER});
const вихрь = L({text: 'вихрь', gender: Gender.MASCULINE});const зверь = L({text: 'зверь', gender: Gender.MASCULINE, animate: true});
const дитя = L({text: 'дитя', gender: Gender.NEUTER, animate: true});const кровля = L({text: 'кровля', gender: Gender.FEMININE});
const солома = L({text: 'солома', gender: Gender.FEMININE});const путник = L({text: 'путник', gender: Gender.MASCULINE, animate: true});
const окошко = L({text: 'окошко', gender: Gender.NEUTER});console.log(`${cap(Ⰳ(буря, 1))} ${Ⰴ(мгла, 5)} ${Ⰳ(небо, 4)} кроет,
${cap(ⰃⰃ(вихрь, 4))} снежные крутя;
То, как ${Ⰳ(зверь, 1)}, она завоет,
То заплачет, как ${Ⰳ(дитя, 1)},
То по ${Ⰳ(кровля, 3)} обветшалой
Вдруг ${Ⰳ(солома, 5)} зашумит,
То, как ${Ⰳ(путник, 1)} запоздалый,
К нам в ${Ⰳ(окошко, 4)} застучит.`);// Буря мглою небо кроет,
// Вихри снежные крутя;
// То, как зверь, она завоет,
// То заплачет, как дитя,
// То по кровле обветшалой
// Вдруг соломой зашумит,
// То, как путник запоздалый,
// К нам в окошко застучит.// -----------------------------------------------
// Николай Степанович Гумилев
// Рассказ девушки (фрагмент)const ворота = L({text: 'ворота', pluraleTantum: true});
const тень = L({text: 'тень', gender: Gender.FEMININE});
const ель = L({text: 'ель', gender: Gender.FEMININE});
const снег = L({text: 'снег', gender: Gender.MASCULINE});
const высота = L({text: 'высота', gender: Gender.FEMININE});console.log(`* * *
Я отдыхала у ${ⰃⰃ(ворота, 2)}
Под ${Ⰳ(тень, 5)} милой, старой ${Ⰳ(ель, 2)},
А надо мною пламенели
${cap(ⰃⰃ(снег, 1))} неведомых ${ⰃⰃ(высота, 2)}.`);// * * *
// Я отдыхала у ворот
// Под тенью милой, старой ели,
// А надо мною пламенели
// Снега неведомых высот.
```## Limitations
This library does not prevent you from misusing the [singularia tantum](https://en.wikipedia.org/wiki/Plurale_tantum#Singulare_tantum).
## References
- Современный русский язык. Морфология - Камынина А.А., Уч. пос. 1999 - 240 с.
- [Russian grammar (English Wikipedia)](http://en.wikipedia.org/wiki/Russian_grammar)
- [OpenCorpora (Russian text corpus)](http://opencorpora.org/)
- К семантике русского локатива ("второго предложного" падежа) - Плунгян В. А., Семиотика и информатика. - Вып. 37. - М., 2002. - С. 229-254Please [take the survey](https://docs.google.com/forms/d/e/1FAIpQLSeZgtDuRFQhl7bX-i_6E5hJRhyzdxhPmf3ZVBNJh3tUD6cBVg/viewform?usp=sf_link)
to make this library better.[npm-shield]: https://img.shields.io/npm/v/russian-nouns-js.svg?style=for-the-badge
[npm-url]: https://www.npmjs.com/package/russian-nouns-js
[license-shield]: https://img.shields.io/github/license/georgy7/RussianNounsJS.svg?style=for-the-badge
[license-url]: https://github.com/georgy7/RussianNounsJS/blob/release/LICENSE.txt