Giter VIP home page Giter VIP logo

russian_inflect's Introduction

RussianInflect

Склонение по падежам заголовков на русском языке.

Многое подсмотрено в геме petrovich. Различие в том, что RussianInflect склоняет не имена и фамилии, а словосочетания, например, названия товаров.

Installation

Add this line to your application's Gemfile:

gem 'russian_inflect'

And then execute:

$ bundle

Or install it yourself as:

$ gem install russian_inflect

Usage

RussianInflect.inflect("Хорошая погода", :nominative)     # => Хорошая погода
RussianInflect.inflect("Хорошая погода", :genitive)       # => Хорошей погоды
RussianInflect.inflect("Хорошая погода", :dative)         # => Хорошей погоде
RussianInflect.inflect("Хорошая погода", :accusative)     # => Хорошую погоду
RussianInflect.inflect("Хорошая погода", :instrumental)   # => Хорошей погодой
RussianInflect.inflect("Хорошая погода", :prepositional)  # => Хорошей погоде

или

words = RussianInflect.new("Хорошая погода")
words.to_case :genitive     # => Хорошей погоды
words.to_case :dative       # => Хорошей погоде
# etc...

Помощь гему

  • Нужны тесты для всяких окончаний, исключений и т.п. Дополнять их просто: в spec/lib/russian_inflect_spec.rb нужно добавить пример словосочетания и правильные результаты склонения по аналогии с уже добавленными примерами.
  • Правила склонения пока далеки от идеала и тоже ждут своего Розенталя. Они похожи на правила из гема petrovich и находятся в lib/russian_inflect/rules.yml.
  • Как видите, ридми тоже не мешало бы переписать.

russian_inflect's People

Contributors

estum avatar gambala avatar hazolsky avatar vladislav-yashin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

russian_inflect's Issues

Как лучше дополнять правила?

Живая ситуация - "Севастополь" склоняется некорректно (Севастополи в пред. падеже). Каким образом лучше внести коррективы в правила?

  • Можно ли разместить rules.yml у себя в проекте и дополнять быстро, не вмешиваясь в гем?
  • Как лучше дополнить, через исключение или суффикс?
  • Как добавлять исключения в yml файл? (какая иерархия в yml?)
  • Как лучше сконтрибьютить дополнения, если их станет достаточно много?

Обмен кодом

Привет.

Предлагаю дружить проектами и перетаскивать друг у друга код (вместе с копирайтами, разумеется).

У вашего проекта и у моего одинаковая лицензия. Они также немного похожи по механизму работы — полагаются в первую очередь на окончания, а не используют огромный словарь и не пытаются выяснить точное склонение по Зализняку.

Если я где-то в этом году смогу воспроизвести у себя экспериментальное подобие метода inflect, это может автоматически заресолвить Issue #8. Вам у себя предлагаю перетащить и адаптировать, например, testAPI.js в том смысле, что хоть это и smoke test, он неплох для smoke-теста: там разные склонения, разные окончания, фрагменты стихов (все должны быть в общественном достоянии, даже стих Введенского, и, даже если нет, это fair use). Перетащу туда еще некоторые слова из демо, т.к. в демо слова подобраны очень друг от друга отличающиеся. Тест хоть и называется testAPI, тестируется там не только API, но и словоизменение, и он может показать слабые места библиотеки.

Из вашего проекта к себе планирую перетащить в основную ветку и портировать

Т.к. лицензии MIT, разрешение никто ни у кого просить, в принципе, не обязан, но хочу уточнить копирайты. Заметил, что у вас в лицензии одно имя, а контрибьютеров — ну, как минимум два (у интересующих пока что меня частей), причем один из них псевдоним. Вот так вас лучше указывать? Ну, понятно, что это еще предварительно. Годы в любом случае буду смотреть по коммитам.

Copyright (c) 2013, 2016 Tõnis Simo
Copyright (c) 2017 Vitaliy Emeliyantsev

На счет моего копирайта, если вы будете у меня что-то брать. Я вообще у себя кириллическое имя в копирайте использовал, может еще поменяю. Если у вас так не принято, можете указывать меня просто как Georgy Ustinov.

js порт

Есть ли в планах сделать адаптер для js, по подобию того как работает i18n-js?
rules.yml можно динамически конвертировать в json и подавать в js.
rules.rb можно повторить на js.
Интеграции во фреймворки не нужны, просто разрешённый глобал-вар с возможностями:

console.log(RussianInflect.inflect('Хорошая погода', 'prepositional'));  // => 'Хорошей погоде'
// или
const words = RussianInflect.new('Хорошая погода');
console.log(words.toCase('genitive')); // => 'Хорошей погоды'
console.log(words.toCase('dative'));    // => 'Хорошей погоде'

Название метода.

Возможно метод #to_case( ) имеет не совсем удачное название? Семантически очень похож на conversion (#to_[smth]) метод, которые либо меняют класс объекта (explicit), либо валидируют его (implicit).
Возможно лучше использовать что-то типа #change_case или #inflect, etc. ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.