17

GitHub - nodkz/lvovich: Склонение названий городов, определения пола по ФИО, скл...

 5 years ago
source link: https://github.com/nodkz/lvovich
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

README.md

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

npm codecov coverage Travis npmtrends Commitizen friendly TypeScript compatible FlowType compatible

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

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

Может использоваться как в браузере так и на сервере. Для генерации SEO-заголовков, где есть названия городов самое то.

Минифицированный размер 20KB, gzipped 6KB.

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.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK