Able to generate strange&fun text with given prefix. Just had fun with bigramms :)
Итак, это генератор текста основанный на биграммах, то есть связях двух соседних слов в тексте. Обычно, при данном подходе используются n-граммы, однако здесь представлена упрощённая версия. Чтобы программа могла предположить следующее слово - выбирают рандомное слово из тех, что встречаются после последнего (последних) слова в тексте.
В голову приходят два подхода:
- Для каждого слова хранить словарь, где ключи - слова, следующие за ним в текстах-учебниках, а значения - сколько раз это слово было следующим. В конце концов - сохранить какое-то количество, ну пусть, 10, самых частых слов и использовать уже их.
- Для каждого слова хранить список, просто все попадающиеся следующими за словом слова скидывать в него. Выбирать на каждом шаге генерации текста рандомное слово из списка последнего слова.
Я сначала реализовала первый способ, потом подумала, стёрла всё и написала второй. Причина - так итогоый текст гораздо интереснее, словарный запас модели - разнообразнее, а преобладание частых слов сохраняется, так как их в списке так и так больше.
Довести утилиты до ума (оформить в стиле ООП, вынести обучение на Colab, сделать удобный интерфейс командной строки через argparse) я не успела, поэтому рекомендую, чтобы долго не разбираться с кодом:
- Открыть всю папку репозитория сразу в PyCharm.
- По ссылке в файле link_books.txt скачать саму модель и разместить папку models в папке репозитория.
- Если выполнили два предыдущих пункта - можно сразу без аргументов запускать файл create_text.py и любоваться генерацией.
Да, они есть, программа иногда пишет как первоклашка, без запятых, тире и ковычек. Иногда, если их расставить - получается нечто осмысленное. Ну а есть просто интересные примеры :).
Из +- осмысленного:
- Нет говорила он так велело сердце у меня опять. -> "Нет", - говорила, - "он, так велело сердце у меня опять!"
- Я ему навстречу комиссару то я успел закрыть глаза. -> -Я ему навстречу, комиссару то, "я успел закрыть глаза!".
- До такой резкой перемены мест кто он тотчас?
- Так направить на поверхности острова исчезнувшего медного.
- Уже прощался с вами воскликнул франц иего. -> "Уже прощался с вами", - воскликнул франц Иего.
Из интересного:
- Вы недаром я отпустил ее из липового чаю.
- Ни серпа единственное средство от бога сударыня. -> -Ни серпа! - единственное средство от бога, сударыня!"
- Ведьмаку заплатите мне известно сослов пенелона омужественном поведении. -> Ведьмаку заплатите, мне известно со слов Пенелона о мужественном поведении.
Среди книг ппопалась какая-то, после которой произошёл вброс слов без пробелов, поэтому это бага, но её можно было бы легко поправить, если бы до дедлайна не оставалось 15 минут...
Спасибо за внимание, хорошего дня!