A Russian text generator based on templating texts and word picking
Project description
Python Rutext: русскоязычный генератор текста
Введение
Данный проект был вдохновлён одним любительским локальным Discord-ботом. В него добавили новую функцию, генерирующую случайные истории, используя шаблоны текста и случайные вставки.
Получился забавный модуль, но не без недостатков. Так что я захотел сделать свою версию, чтобы если что, помочь таким образом реализовать какие-то фишки, которые предложил я. 🤔
Что реализовано
- Ручной ввод форм;
- Отсеивание избыточных форм;
- Относительный формат слов (на основе базы и формата строится форма), позволяющий сократить занимаемую память;
- Ввод/вывод в YAML (используя кэш, достигается минимум затрат в плане заливов на диск); при этом разработчик может использовать собственный I/O;
- Ссылки на уже определённые слова, что позволяет дополнительно сжимать YAML и сохранить нервы пользователям;
- Шаблоны текстов, в которые можно вставлять формы слов из словаря; поддерживаются в том числе указатели на слова: выбранное слово можно использовать несколько раз;
- Иерархия классов
I/O->Словарь->DB, позволяющая встроить на местоI/OиDBсобственные классы.
Чего не хватает
- Возможность запроса текста по ID;
- Доработка
I/OAShell: поддержка алиасов, вывод обязательных/необязательных аргументов в помощи, поддержка выхода из интерфейса; - Автосохранение
DBкаждые N минут; - Реализация
I/ODiscord API; - Реализация
DBRedis вместо 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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyrutext-0.8.0.tar.gz.
File metadata
- Download URL: pyrutext-0.8.0.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.27.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8aee5b9249fe09f01a8baec34e258023a5523483b4d648232b97a1876515e9fa
|
|
| MD5 |
c093dafc8cc5a5fe81a11ca2e5441efc
|
|
| BLAKE2b-256 |
22c6c274f4ac8db2fcf0e1736383050162dc731b08bc3625e80217379f979521
|
File details
Details for the file pyrutext-0.8.0-py2.py3-none-any.whl.
File metadata
- Download URL: pyrutext-0.8.0-py2.py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.27.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fef4de56ded6d4607e3afd2da26fc4465cdeb4dc1164dfe8d041c98221dad1c1
|
|
| MD5 |
cc7974cea9d3ce95e09a63046964d1f8
|
|
| BLAKE2b-256 |
8229078393144d8707046d730d09d8b2a872d6be76ea9bc3273e05c840c095a1
|