JavaScript бібліотека з відкритим кодом для відмінювання українських антропонімів
Граматичний відмінок | Результат відмінювання | |
---|---|---|
Називний (хто?) | Шевченко Тарас Григорович | |
Родовий (кого?) | Шевченка Тараса Григоровича | |
Давальний (кому?) | Шевченку Тарасу Григоровичу | |
Знахідний (кого?) | Шевченка Тараса Григоровича | |
Орудний (ким?) | Шевченком Тарасом Григоровичем | |
Місцевий (при кому?) | Шевченкові Тарасові Григоровичу | |
Кличний | Шевченку Тарасе Григоровичу |
Бібліотека містить понад вісімдесят граматичних правил для відмінювання прізвищ, імен по батькові. Належне правило обирається за граматичним відмінком, родом, закінченням слова, частиною мови, сферою застосування та пріоритетом.
При відмінюванні жіночих прізвищ із закінченнями на -а, -я та чоловічих прізвищ із закінченнями на -ой, -ій, -ий, -их для класифікації прізвищ іменникового та прикметникового походження використовується модель машинного навчання, навчена на більш як сорока тисячах прізвищ. Тому прізвища іменникового та прикметникового походжень відмінюються як іменники та прикметники відповідно: Диня (називний) → Дині (родовий), Синя (називний) → Синьої (родовий), Рий (називний) → Рия (родовий), Бурий (називний) → Бурого (родовий).
При відмінюванні відбуваються зміни голосних та приголосних звуків згідно з правилами української мови: Сивокінь (називний) → Сивоконя (родовий), Гичка (називний) → Гичці (давальний).
Складні імена та прізвища, утворені поєднанням двох самостійних частин відмінюються за правилами відмінювання кожної складової частини: Анна-Марія (називний) → Анни-Марії (родовий), Нечуй-Левицький (називний) → Нечуя-Левицького (родовий). Але коли перша частина прізвища — односкладове слово, то відмінюється, як правило, лише друга частина: Драй-Хмара (називний) → Драй-Хмари (родовий).
npm install --save shevchenko
const shevchenko = require("shevchenko");
<script type="text/javascript" src="https://unpkg.com/shevchenko"></script>
const shevchenko = require('shevchenko');
async function main() {
const input = {
gender: 'masculine',
givenName: 'Тарас',
patronymicName: 'Григорович',
familyName: 'Шевченко'
};
const output = await shevchenko.inVocative(input);
console.log(output); // { givenName: "Тарасе", patronymicName: "Григоровичу", familyName: "Шевченку" }
}
main().catch((error) => console.error(error));