Metadata-Version: 2.1
Name: pyrutext
Version: 0.4.0
Summary: A Russian text generator based on templating texts and word picking
Author-email: Belreau Cohen <nuu.chah.nulth@disroot.org>
Description-Content-Type: text/markdown
Classifier: License :: OSI Approved :: MIT License
Requires-Dist: pyyaml ~=6.0
Project-URL: Home, https://github.com/Belstowe/py-rutext.git

# Python Rutext: русскоязычный генератор текста

## Введение

Данный проект был вдохновлён одним любительским локальным Discord-ботом. В него добавили новую функцию, генерирующую случайные истории, используя шаблоны текста и случайные вставки.

Получился забавный модуль, но не без недостатков. Так что я захотел сделать свою версию, чтобы если что, помочь таким образом реализовать какие-то фишки, которые предложил я. 🤔

## Что реализовано

1. Ручной ввод форм;
2. Отсеивание избыточных форм;
3. Относительный формат слов (на основе базы и формата строится форма), позволяющий сократить занимаемую память;
4. Ввод/вывод в YAML (используя кэш, достигается минимум затрат в плане заливов на диск).

## Чего не хватает

1. Вынос I/O (и его формата) за пределы модуля;
2. Шаблоны текстов;
3. Отказоустойчивость;
4. Discord API;
5. Подключение Redis.

## Использование

Точка входа: `pyrutext.py`.

Программой предлагается сначала ввести новые слова в список, а затем через теги, ограничивая диапазон слов и используя формы, добывается необходимое слово.

Примеры вводов:
- `ЭСТ сущ. абр ж.р.`
- `любить гл. несов.`
- `очки сущ. безл. неодуш. мн.ч.`
- `хорошо нар. сост.`

Формы могут быть указаны через *относительный формат*.
* Если ввод начинается с `-`, от слова в конце отнимается окончание; остальной ввод добавляется в конец слова.
  * Число минусов `-` в начале указывает на то, сколько букв будет отнято у окончания.
  * Примеры: `'мирный', '--ая' > 'мирная'`; `'любить', '-' > 'любит'`.
* Если ввод начинается с `+`, оригинальное слово вставляется целиком; остальной ввод добавляется в конец слова.
  * Примеры: `'буква', '+' > 'буква'`; `'буква', '+ми' > 'буквами'`.
* Если ввод заканчивается на `+`, оригинальное слово вставляется целиком; остальной ввод добавляется в *начало* слова.
  * Примеры: `'лить', 'будешь +' > 'будешь лить'`.

В модуле определены следующие части речи:
* **Глагол:** `гл. {несов.|сов.} [1л|2л|3л] [п.в.|н.в.|б.в.] [ед.ч.|мн.ч.] [м.р.|ж.р.|с.р.] [пов.] [инф.]`
* **Прилагательное:** `пр. [ед.ч.|мн.ч.] [м.р.|ж.р.|с.р.] [и.п.|р.п.|д.п.|в.п.|т.п.|п.п.]`
* **Существительное:** `сущ. {м.р.|ж.р.|с.р.|безл.} (ед.ч.|мн.ч.) (нескл.) (абр) (пинг) (перс) [и.п.|р.п.|д.п.|в.п.|т.п.|п.п.] [ед.ч.|мн.ч.]`

В фигурных скобках -- обязательные теги, в круглых -- необязательные. В квадратных скобках -- формы, которые не влияют на подбор слов. Порядок можно менять.

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

Тег может быть *любым*, но крайне желательно использовать уже существующие категории.
