A Russian text generator based on templating texts and word picking
Project description
Python Rutext: русскоязычный генератор текста
Введение
Данный проект был вдохновлён одним любительским локальным Discord-ботом. В него добавили новую функцию, генерирующую случайные истории, используя шаблоны текста и случайные вставки.
Получился забавный модуль, но не без недостатков. Так что я захотел сделать свою версию, чтобы если что, помочь таким образом реализовать какие-то фишки, которые предложил я. 🤔
Что реализовано
- Ручной ввод форм;
- Отсеивание избыточных форм;
- Относительный формат слов (на основе базы и формата строится форма), позволяющий сократить занимаемую память;
- Ввод/вывод в YAML (используя кэш, достигается минимум затрат в плане заливов на диск); при этом разработчик может использовать собственный I/O;
- Ссылки на уже определённые слова, что позволяет дополнительно сжимать YAML и сохранить нервы пользователям;
- Шаблоны текстов, в которые можно вставлять формы слов из словаря; поддерживаются в том числе указатели на слова: выбранное слово можно использовать несколько раз.
Чего не хватает
- Отказоустойчивость;
- Discord API;
- Использование Redis вместо YAML.
Использование
Точка входа: pyrutext.py
.
Ввод слов
Программой предлагается сначала ввести новые слова в список.
Примеры вводов:
ЭСТ сущ. абр ж.р.
любить гл. несов.
очки сущ. безл. неодуш. мн.ч.
хорошо нар. сост.
ремонт сущ. м.р. ед.ч.
ступор &ремонт
Ссылки – теги, начинающиеся с &
и отсылающие к уже определённым словам. Ссылка может быть только одна. Если других тегов нет, они берутся из слова-отсылки, и наоборот: теги по ссылке не извлекаются (а только формы), если пользователь определил другие.
После ввода слова программа запрашивает формы слова. Они могут быть указаны через относительный формат.
- Если ввод начинается с
-
, от слова в конце отнимается окончание; остальной ввод добавляется в конец слова.- Число минусов
-
в начале указывает на то, сколько букв будет отнято у окончания. - Примеры:
'мирный', '--ая' > 'мирная'
;'любить', '-' > 'любит'
.
- Число минусов
- Если ввод начинается с
+
, оригинальное слово вставляется целиком; остальной ввод добавляется в конец слова.- Примеры:
'буква', '+' > 'буква'
;'буква', '+ми' > 'буквами'
.
- Примеры:
- Если ввод заканчивается на
+
, оригинальное слово вставляется целиком; остальной ввод добавляется в начало слова.- Пример:
'лить', 'будешь +' > 'будешь лить'
.
- Пример:
- Иначе введённое Вами слово полностью заменит оригинальное слово для некоторого склонения.
- Пример:
'быть', 'будет' > 'будет'
.
- Пример:
- При пустом вводе вставляется оригинальное слово.
В модуле определены следующие части речи:
- Глагол:
гл. {несов.|сов.} [1л|2л|3л] [п.в.|н.в.|б.в.] [ед.ч.|мн.ч.] [м.р.|ж.р.|с.р.] [пов.] [инф.]
- Прилагательное:
пр. [ед.ч.|мн.ч.] [м.р.|ж.р.|с.р.] [и.п.|р.п.|д.п.|в.п.|т.п.|п.п.] [одуш.|неодуш.]
- Существительное:
сущ. {м.р.|ж.р.|с.р.|безл.} (ед.ч.|мн.ч.) (нескл.) (абр) (пинг) (перс) [и.п.|р.п.|д.п.|в.п.|т.п.|п.п.] [ед.ч.|мн.ч.]
В фигурных скобках – обязательные теги, в круглых – необязательные. В квадратных скобках – формы, которые не влияют на подбор слов. Порядок можно менять.
Для остальных (неизменяемых) частей речи (как наречия) форм нет, однако требуется указывать как минимум один тег: например, хорошо нар.
Тег может быть любым, но крайне желательно использовать уже существующие категории.
Ввод текстов
Когда Вы закончите вводить слова, просто нажмите Enter. Вы перейдёте к следующему этапу ввода текстов. Вводимый текст заканчивается на пустой строке. Чтобы выйти из этого этапа, нажмите Enter в начале.
Пример простого текста-шаблона:
Привет, я съел --сущ. в.п.--.
Пример текста-шаблона с запоминанием вставок:
1=сущ. еда
2 = сущ. юзер
\
Привет, --2--. Я съел --1 в.п.--.
А тебе, -- 2 д.п. --, ничего не досталось.
Т.е. указатели на слова через синтаксис {id} = {tag1 tag2 ...}
вводятся перед знаком \
, а внутри текста эти указатели вставляются через выражение --{id} {form1 form2 ...}--
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyrutext-0.7.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60094291398b1c1cd9d38973765232c1822200bd79dfafc03f982afcfac5f8d0 |
|
MD5 | 180a2dca669b0003f09b0fef40b46e61 |
|
BLAKE2b-256 | 3c645622b8bc9dc8afa822fec249efc7c34005be7658c19f43676eaeb5aff5c3 |