Package: pyrutext
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 ...}--.