nodkz / lvovich
- среда, 3 октября 2018 г. в 00:19:24
JavaScript
Склонение названий городов, определения пола по ФИО, склонения имен по падежам
Этот пакет для:
Может использоваться как в браузере, так и на сервере. Нет никаких зависимостей и работает в оффлайне. Самое то:
Минифицированный размер пакета 20KB, gzipped 6KB. Бедные, бедные иностранцы - им надо загрузить в голову 20 килобайт правил и уметь быстро ими пользоваться в разговорной речи. Ужос!
PS. Если вдруг вы ищете список всех городов и сел с гео-координатами России, Белоруси и Украины - их можно найти в формате csv на сайте https://maps.vlasenko.net/.
import { cityIn, cityFrom, cityTo } from 'lvovich';
cityIn(name: string, gender?: GenderStrT): string
- в каком городе живете/находитесь? (предложный падеж) cityIn('Санкт-Петербург'); // вернет `Санкт-Петербурге`
cityFrom(name: string, gender?: GenderStrT): string
- из какого города приехали? (родительный падеж) cityFrom('Санкт-Петербург'); // вернет `Санкт-Петербурга`
cityTo(name: string): string
- в какой город направляетесь? (направительный или посылательный падеж :) cityTo('Санкт-Петербург'); // вернет `Санкт-Петербург`
cityTo('Москва'); // вернет `Москву`
import { getGender, getFirstnameGender, getLastnameGender, getMiddlenameGender } from 'lvovich';
Методы определения пола возвращают тип GenderStrT
:
male
- мужской,female
- женский,androgynous
- может быть и мальчиком и девочкойnull
- не удалось определить полgetGender(fio: FioT): ?GenderStrT
- передаете ФИО, получаете полВходящий аргумент fio
являеется объектов со следующими необязательными полями:
type FioT = {
first?: ?string,
last?: ?string,
middle?: ?string,
}
getGender({ last: 'Друзь', first: 'Саша', middle: 'Петрович' }); // вернет `male`
getGender({ first: 'Саша' }); // вернет `androgynous`, т.к. может быть мальчик или девочка
getGender({ first: 'Саша', middle: 'Петровна' }); // вернет `female`
getGender({ last: 'Абуова', first: 'Андрей' }); // вернет `null`, ну нафиг гадать т.к. вроде фамилия женская и имя мужское.
getFirstnameGender(str: string): ?GenderStrT
- вернет пол для Имени getFirstnameGender('Павел'); // вернет `male`
getFirstnameGender('Анна'); // вернет `female`
getFirstnameGender('Саша'); // вернет `androgynous`
getFirstnameGender('аааа'); // вернет `null`
getLastnameGender(str: string): ?GenderStrT
- вернет пол для Фамилии getLastnameGender('Градский'); // вернет `male`
getLastnameGender('Таптыгина'); // вернет `female`
getLastnameGender('Борейко'); // вернет `androgynous`
getLastnameGender('аааа'); // вернет `null`
getMiddlenameGender(str: string): ?GenderStrT
- вернет пол для Отчества getMiddlenameGender('Павлович'); // вернет `male`
getMiddlenameGender('Петрова'); // вернет `female`
getMiddlenameGender('иваново'); // вернет `null`
getMiddlenameGender('аааа'); // вернет `null`
import { incline, inclineFirstname, inclineLastname, inclineMiddlename } from 'lvovich';
Падежи (тип DeclentionStrT
):
nominative
- именительный (кто? что?)genitive
- родительный (кого? чего?)dative
- дательный (кому? чему?)accusative
- винительный (кого? что?)instrumental
- творительный (кем? чем?)prepositional
- предложный (о ком? о чем?)incline(person: LvovichPersonT, declension?: DeclentionStrT): LvovichPersonT
- просклонять по падежамЕсли не указан declension
, то будет использован винительный падеж.
incline({ first: 'Саша', last: 'Иванов' }, 'dative');
// вернет { first: 'Саше', last: 'Иванову', gender: 'male' }
incline({ first: 'Паша' }, 'instrumental');
// вернет { first: 'Пашей', gender: 'male' })
Тип LvovichPersonT
для incline(person: LvovichPersonT)
является объектом с необязательными полями:
{
first?: ?string,
last?: ?string,
middle?: ?string,
gender?: ?GenderStrT,
}
inclineFirstname(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string
- просклонять Имя по падежамЕсли пол gender
не указан, то будет запущено автоопределение, если не указано склонение declension
то будет применен винительный падеж.
inclineFirstname('Павел', 'genitive'); // вернет 'Павла'
inclineFirstname('Женя', 'instrumental'); // вернет 'Женя'
inclineFirstname('Женя', 'instrumental', 'male'); // вернет 'Женей'
inclineFirstname('Женя', 'instrumental', 'female'); // вернет 'Женей'
inclineLastname(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string
- просклонять Фамилию по падежам inclineLastname('Иванова', 'genitive'); // вернет 'Ивановой'
inclineLastname('Петросян', 'instrumental'); // вернет 'Петросян'
inclineLastname('Петросян', 'instrumental', 'male'); // вернет 'Петросяном'
inclineMiddlename(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string
- просклонять Отчество по падежам inclineMiddlename('Львович', 'genitive'); // вернет 'Львовича'
Через npm:
npm install lvovich
Или в браузере:
<script src="https://cdn.jsdelivr.net/npm/lvovich/dist/lvovich.min.js"></script>
<script>
var city = 'Москва';
document.writeln('Найдено в ' + lvovich.cityIn(city) + '<br/>');
document.writeln('Из ' + lvovich.cityFrom(city) + '<br/>');
document.writeln('Еду в ' + lvovich.cityTo(city) + '<br/>');
</script>
Сборка новой версии пакета происходит автоматически через semantic-release и Travis. Ваши изменения я могу опубликовать хоть с телефона.
От вас просто необходимо склонировать репозиторий, внести изменения в код и открыть Pull Request.
Клонирование репозитория и установка модулей:
git clone https://github.com/nodkz/lvovich.git
cd lvovich
yarn install
Тесты находятся в директории src/__tests__
. Запуск тестов:
yarn test
В основу этого пакета лег код и правила из petrovich-js. Код был переписан и оптимизирован, часть правил была расширена. API полностью был изменен, и стал использовать camelCase
.