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л] [п.в.|н.в.|б.в.] [ед.ч.|мн.ч.] [м.р.|ж.р.|с.р.] [пов.] [инф.]
- Прилагательное:
пр. [ед.ч.|мн.ч.] [м.р.|ж.р.|с.р.] [и.п.|р.п.|д.п.|в.п.|т.п.|п.п.] [одуш.|неодуш.]
- Существительное:
сущ. {м.р.|ж.р.|с.р.|безл.} (ед.ч.|мн.ч.) (нескл.) (абр) (пинг) (перс) [и.п.|р.п.|д.п.|в.п.|т.п.|п.п.] [ед.ч.|мн.ч.]
В фигурных скобках – обязательные теги, в круглых – необязательные. В квадратных скобках – формы, которые не влияют на подбор слов. Порядок можно менять.
Для остальных (неизменяемых) частей речи (как наречия) форм нет, однако требуется указывать как минимум один тег: например, хорошо нар.
Тег может быть любым, но крайне желательно использовать уже существующие категории.
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.6.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b28767cb7503ec672baf420b45edf21f62182b3ef98fce096f3f52418b0d6f7 |
|
MD5 | 93026a4dc35efcfe54ab659b10139a10 |
|
BLAKE2b-256 | b662a190e0d44326cff4d0b727a468d0f94bbf3bd7ed474d29da5632b8481d21 |