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

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

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

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

Сегодня сделаем то же самое, но как настоящие программисты — используем готовую библиотеку 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 строк кода.

Что дальше

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

Текст:

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

Редактура:

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

Художник:

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

Корректор:

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

Вёрстка:

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

Соцсети:

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

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Генератор статей для Кода
Генератор статей для Кода

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

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

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

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

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

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

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

easy
ООП: атрибуты и методы
ООП: атрибуты и методы

Два главных слова любого программиста в ООП. Знай их, люби их, говори правильно.

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

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

medium
Моделируем игру в рулетку на Python
Моделируем игру в рулетку на Python

И строим наглядные графики.

easy
Делаем своё расширение для браузера за 10 минут
Делаем своё расширение для браузера за 10 минут

Cнова запускаем снежинки.

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

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

hard
Как добавить строку поиска на сайт
Как добавить строку поиска на сайт

«Будем искать»

easy
UX-тест простого калькулятора на JavaScript
UX-тест простого калькулятора на JavaScript

Что скажут UX-тестировщики про наш проект

easy
Как сделать цикл без цикла?
Как сделать цикл без цикла?

Разбираем очередной вопрос из собеседований

easy
Простейший математический фокус
Простейший математический фокус

Можно использовать для пикапа или на пьяных вечеринках

easy
Как быстро найти любой логарифм с помощью обычного цикла
Как быстро найти любой логарифм с помощью обычного цикла

Пишем простой код на Python

easy
easy