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

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

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

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

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

Что дальше

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

Текст:

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

Редактура:

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

Художник:

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

Корректор:

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

Вёрстка:

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

Соцсети:

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

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

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

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

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

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

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

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

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

Что означает ошибка: TypeError: ‘undefined’ is not an object
Что означает ошибка: TypeError: ‘undefined’ is not an object

Это значит, что браузер не может найти нужный объект.

Проверяем текст в Главреде
Проверяем текст в Главреде

Добавляем новые возможности через API.

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

Рецепт на 6 минут.

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

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

Делаем сами: адаптивный сайт

С котиками!

Создаём статичный сайт на Hugo
Создаём статичный сайт на Hugo

Превращаем простой текст в полноценный сайт.

$ is not defined в jQuery: что это значит и что делать
Простейший математический фокус
Простейший математический фокус

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

Свой текстовый редактор: делаем красиво
Собственный текстовый редактор: делаем красиво

Самое простое и полезное введение в CSS.

Я сделяль: главная страница Яндекса
Я сделяль: главная страница Яндекса

Верстаем чистую страницу поисковика.

easy