lvovich

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

Stats

StarsIssuesVersionUpdatedCreatedSize
lvovich
622201.0.162 years ago3 years agoMinified + gzip package size for lvovich in KB

Readme

Lvovich (Львович) - JS library to inflect people names, cities names in Russian

npm codecov coverage Travis npmtrends Commitizen friendly TypeScript compatible FlowType compatible

Этот пакет для:

  • склонения названий городов (работает для большинства составных названий: Санкт-Петербург, Ростов-на-Дону и пр.)
  • определения пола по имени фамилии и отчеству
  • склонения падежей русских имен, фамилий и отчеств

Может использоваться как в браузере, так и на сервере. Нет никаких зависимостей и работает в оффлайне. Самое то:

  • для генерации красивых писем с mjml
  • для генерации PDF c @react-pdf
  • для генерации SEO-заголовков c головой на плечах
  • чтоб по максимуму избавиться от Уважаемый(-ая), когда есть ФИО но нет пола

Минифицированный размер пакета 20KB, gzipped 6KB. Бедные, бедные иностранцы - им надо загрузить в голову 20 килобайт правил и уметь быстро ими пользоваться в разговорной речи. Ужос!

PS. Если вдруг вы ищете список всех городов и сел с гео-координатами России, Белоруси и Украины - их можно найти в формате csv на сайте https://maps.vlasenko.net/.

Live Demo

Live Demo

Cклонение названий городов

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`

Cклонения падежей русских имен, фамилий и отчеств

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

Лицензия

MIT

В основу этого пакета лег код и правила из petrovich-js. Код был переписан и оптимизирован, часть правил была расширена. API полностью был изменен, и стал использовать camelCase.

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.