Пишем Чехова на цепях Маркова: готовая библиотека

Пишем Чехова на цепях Маркова: готовая библиотека

1 часть
Что такое цепи Маркова и как они работают
2 часть
Простейший генератор текста на цепях Маркова
3 часть
Пишем Чехова на цепях Маркова: готовая библиотека

Многократно ускоряем разработку.

В нашем прошлом проекте мы генерировали текст на цепях Маркова вручную — сами составляли пары, выбирали нужные слова и следили за предложениями. Так было нужно для понимания того, как работают цепи в принципе. Но это плохая практика для продуктового разработчика: такой алгоритм сложно поддерживать и мы не знаем, насколько хорошо мы его реализовали. Могли реализовать плохо. 

Сегодня сделаем то же самое, но как настоящие программисты — используем готовую библиотеку markovify, вместо того чтобы писать код самим и с нуля. 

Некоторые работодатели ожидают именно такого подхода от своих сотрудников.

Что делаем

Мы повторим наш прошлый проект на готовой библиотеке — посмотрим, станет ли код проще и проверим, что она умеет. Логика такая:

  1. Устанавливаем библиотеку.
  2. Подключаем её к нашей программе.
  3. Пишем код, используя новые возможности.
  4. Смотрим на результат и сравниваем с тем, что было раньше.

Установка markovify

Для установки запускаем терминал и пишем такую команду:

pip install markovify

Теперь мы можем использовать эту библиотеку в наших проектах.

Подключение библиотеки

Подключаем библиотеку, как это обычно делается в питоне — командой import прямо в коде программы:

import markovify

С этого момента мы можем дальше в коде использовать все команды оттуда — программа сама найдёт библиотеку у нас на компьютере, возьмёт нужные функции и выполнит, что в них написано.

Переписываем код

Чтобы получить то же самое, что и в прошлом проекте, нам понадобится всего 5 строк кода, не считая комментариев:

# подключаем библиотеку
import markovify

# отправляем в переменную всё содержимое текстового файла
text = open('che.txt', encoding='utf8').read()

# сразу обрабатываем весь текст одной командой
# на этом этапе библиотека уже взяла корпус, нашла все пары, построила связи между словами и выяснила вероятности появления новых слов
text_model = markovify.Text(text)

# выводим 30 предложений
for i in range(30):
    print(text_model.make_sentence())

Всё дело в том, что мы одной командой markovify.Text() получаем сразу многое:

  • отфильтрованный корпус;
  • цепочки пар слов с вероятностями появления того или иного слова;
  • связи между парами. 

В общем, одна команда позволяет нам сразу построить все связи между словами, чтобы потом на их основе строить предложения с помощью метода .make_sentence(). Этот метод берёт всю цепочку и строит на её основе одно предложение. Библиотека знает, что предложение должно начинаться с большой буквы и заканчиваться точкой — нам не нужно прописывать это отдельно. Всё, что нам нужно, — указать, сколько предложений надо придумать. 

Было — стало

Сравните код из первого проекта с ручной обработкой цепи и код с этой библиотекой, который делает то же самое. Итоговый код раза в четыре короче (если не в пять). А умеет он гораздо больше, потому что библиотека markovify умеет не только строить цепочки, но и считать вероятности, а также многие другие вещи.

В этом — вся сила библиотек: они экономят время и силы на разработку, а результат может получиться даже лучше.

Было:

Стало:

Проверяем результат

Запускаем программу и ставим вывод 5 предложений. Результат такой:

🤖 И что значит самый рассказ?

— Сегодня едва ли это удобно, — сказал Орлов. — Я хочу мира, тишины, хочу тепла, вот этого моря, вашей близости.

— А, может, хотите конституции?

— Это все пустяки! — говорил он. — Когда же мне, наконец, сказать! — говорила Маша с письмами и визитными карточками на подносе.

Осмотрев больницу, Андрей Ефимыч всё понял.

Получилось гораздо лучше, чем в первом проекте. Это связано с тем, что внутри библиотеки есть много связей и настроек, которые позволяют создавать стройный текст. Конечно, до результатов GPT3 нашей программе ещё далеко, но мы уже можем получать более-менее привычный и понятный текст, используя всего 5 строк кода.

Что дальше

Сделаем программу, которая будет создавать заголовки к нашим статьям. Когда сделаем — перенастроим её так, чтобы она сама ещё и статьи писала. Без шуток, так и сделаем.

Текст:

Михаил Полянин

Редактура:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Олег Вешкурцев

Веб-разработка — это новый черный
А мы знаем толк в моде и поможем освоить новую специальность за полгода.
Посмотреть
Фронтенд — это новый черный
Еще по теме
prev
next
Генератор статей для Кода
Генератор статей для Кода

Почти настоящие статьи на цепях Маркова

Как подключить комментарии к сайту
Как подключить комментарии к сайту

Приключение на 4 минуты.

Ваш собственный орфокорректор с автозаменой

Проект недели.

Чат-бот
Делаем своего первого чат-бота

Суперпростой способ создать бота, не зная программирования.

Свой тетрис на JavaScript: прокачиваем проект
Свой тетрис на JavaScript: прокачиваем проект

Доработки, чтобы получилась настоящая игра.

Универсальная аналитическая машина

Она может предсказать что угодно, если правильно её настроить.

Что означает ошибка Exception has occurred: TypeError
Что означает ошибка Exception has occurred: TypeError

Неочевидная ошибка в типах данных Python.

Как устроен проект «Гадаем на статьях Кода»
Как устроен проект «Гадаем на статьях Кода»

Никакой магии, только JavaScript.

Пишем код: как поменять местами значения переменных
Пишем код: как поменять местами значения переменных

Что делать, если третью переменную использовать нельзя.

Пишем программу, которая одобрит вам кредит

Или не одобрит, хехех.

Простейший генератор креативного текста

Без нейросетей, регистрации и СМС.

Домашний кинотеатр на Raspberry Pi

Превращаем любой телевизор в умный гаджет.

Как накопить на Айфон ещё быстрее
Как накопить на Айфон ещё быстрее

Excel нам в помощь.

Что означает ошибка UnboundLocalError: local variable referenced before assignment
Что означает ошибка UnboundLocalError: local variable referenced before assignment

Одна из самых частых ошибок у начинающих в Python.

easy