Library to decline people & city names in Russian, and to detect gender by name
npm install lvovich




!TypeScript compatible
0 сторонних зависимостей, может работать как на сервере, так и в браузере.
Этот пакет для:
- склонения названий городов (работает для большинства составных названий: Санкт-Петербург, Ростов-на-Дону и пр.)
- определения пола по имени фамилии и отчеству
- склонения падежей русских имен, фамилий и отчеств
Может использоваться как в браузере, так и на сервере. Нет никаких зависимостей и работает в оффлайне. Самое то:
- для генерации красивых писем с mjml
- для генерации PDF c @react-pdf
- для генерации SEO-заголовков c головой на плечах
- чтоб по максимуму избавиться от Уважаемый(-ая), когда есть ФИО но нет пола
Минифицированный размер пакета 20KB, gzipped 6KB. Бедные, бедные иностранцы - им надо загрузить в голову 20 килобайт правил и уметь быстро ими пользоваться в разговорной речи. Ужос!
PS. Если вдруг вы ищете список всех городов и сел с гео-координатами России, Белоруси и Украины - их можно найти в формате csv на сайте https://maps.vlasenko.net/.
``js`
import { cityIn, cityFrom, cityTo } from 'lvovich';
`jsСанкт-Петербурге
cityIn('Санкт-Петербург'); // вернет `
`jsСанкт-Петербурга
cityFrom('Санкт-Петербург'); // вернет `
`jsСанкт-Петербург
cityTo('Санкт-Петербург'); // вернет Москву
cityTo('Москва'); // вернет `
`js`
import { getGender, getFirstnameGender, getLastnameGender, getMiddlenameGender } from 'lvovich';
Методы определения пола возвращают тип GenderStrT:
- male - мужской,female
- - женский,androgynous
- - может быть и мальчиком и девочкойnull
- - не удалось определить пол
Входящий аргумент fio являеется объектов со следующими необязательными полями:
`js`
type FioT = {
first?: ?string,
last?: ?string,
middle?: ?string,
}
`jsmale
getGender({ last: 'Друзь', first: 'Саша', middle: 'Петрович' }); // вернет androgynous
getGender({ first: 'Саша' }); // вернет , т.к. может быть мальчик или девочкаfemale
getGender({ first: 'Саша', middle: 'Петровна' }); // вернет null
getGender({ last: 'Абуова', first: 'Андрей' }); // вернет , ну нафиг гадать т.к. вроде фамилия женская и имя мужское.`
`jsmale
getFirstnameGender('Павел'); // вернет female
getFirstnameGender('Анна'); // вернет androgynous
getFirstnameGender('Саша'); // вернет null
getFirstnameGender('аааа'); // вернет `
`jsmale
getLastnameGender('Градский'); // вернет female
getLastnameGender('Таптыгина'); // вернет androgynous
getLastnameGender('Борейко'); // вернет null
getLastnameGender('аааа'); // вернет `
`jsmale
getMiddlenameGender('Павлович'); // вернет female
getMiddlenameGender('Петрова'); // вернет null
getMiddlenameGender('иваново'); // вернет null
getMiddlenameGender('аааа'); // вернет `
`js`
import { incline, inclineFirstname, inclineLastname, inclineMiddlename } from 'lvovich';
Падежи (тип DeclentionStrT):
- nominative - именительный (кто? что?)genitive
- - родительный (кого? чего?)dative
- - дательный (кому? чему?)accusative
- - винительный (кого? что?)instrumental
- - творительный (кем? чем?)prepositional
- - предложный (о ком? о чем?)
Если не указан declension, то будет использован винительный падеж.
`js
incline({ first: 'Саша', last: 'Иванов' }, 'dative');
// вернет { first: 'Саше', last: 'Иванову', gender: 'male' }
incline({ first: 'Паша' }, 'instrumental');
// вернет { first: 'Пашей', gender: 'male' })
`
Тип LvovichPersonT для incline(person: LvovichPersonT) является объектом с необязательными полями:
`js`
{
first?: ?string,
last?: ?string,
middle?: ?string,
gender?: ?GenderStrT,
}
Если пол gender не указан, то будет запущено автоопределение, если не указано склонение declension то будет применен винительный падеж.
`js`
inclineFirstname('Павел', 'genitive'); // вернет 'Павла'
inclineFirstname('Женя', 'instrumental'); // вернет 'Женя'
inclineFirstname('Женя', 'instrumental', 'male'); // вернет 'Женей'
inclineFirstname('Женя', 'instrumental', 'female'); // вернет 'Женей'
`js`
inclineLastname('Иванова', 'genitive'); // вернет 'Ивановой'
inclineLastname('Петросян', 'instrumental'); // вернет 'Петросян'
inclineLastname('Петросян', 'instrumental', 'male'); // вернет 'Петросяном'
`js`
inclineMiddlename('Львович', 'genitive'); // вернет 'Львовича'
Через npm:
`bash`
npm install lvovich
Или в браузере:
`html`
Сборка новой версии пакета происходит автоматически через semantic-release и Travis. Ваши изменения я могу опубликовать хоть с телефона.
От вас просто необходимо склонировать репозиторий, внести изменения в код и открыть Pull Request.
Клонирование репозитория и установка модулей:
`bash`
git clone https://github.com/nodkz/lvovich.git
cd lvovich
yarn install
Тесты находятся в директории `src/__tests__`. Запуск тестов:
`bash`
yarn test
В основу этого пакета лег код и правила из petrovich-js. Код был переписан и оптимизирован, часть правил была расширена. API полностью был изменен, и стал использовать camelCase`.