Генерация текста на основе данных

Опирается на главы «Технические основы» и «Коллекции». Цепь Маркова является простейшей языковой моделью, и на ней видно, откуда у больших моделей берутся связность и склонность выдумывать.

Требуется реализовать на цепях Маркова генератор текста: программу, которая читает готовый корпус, запоминает, какое слово за каким встречалось, и выдаёт новый текст, похожий на исходный настолько, насколько позволяет память в одно-два слова.

Логика программы

  • Файл с исходным текстом считывается и разбивается на слова.
  • Все слова, стоящие рядом, соединяются в пары (или более длинные последовательности).
  • На основе этих пар составляется словарь цепочек, содержащий первое слово и все слова, которые могут следовать за ним.
  • Стартовое слово выбирается случайно, с единственным требованием: первая буква заглавная, иначе текст начнётся с середины фразы.
  • Задаётся длина текста на выходе и формируется результат.

Требования к сдаче

  • Программа, принимающая имя файла с исходным текстом и длину результата в словах.
  • Сгенерированный текст на двух разных исходных корпусах. Заготовки в репозитории нет, тексты подбираются самостоятельно: подойдёт любая книга с «Проекта Гутенберг» или lib.ru при условии, что авторы различны, а объём составляет не менее сотни тысяч слов. На коротком тексте цепь вырождается в пересказ источника.
  • Сравнение цепочек по два и по три слова: короткий ответ на вопрос, что меняется в связности текста и почему.
  • Ответ на вопрос, что произойдёт, если слово встретилось в тексте всего один раз и оказалось последним.

Ссылка на репозиторий