Игра с цепями Маркова на Википедии
Привет, мир!
Цепи Маркова очень интересно использовать, и Markovify предоставляет простую библиотеку для работы с ними.
Мы уже видели в предыдущем посте, как использовать их для генерации новых предложений из книг. Сегодня мы собираемся создать более сложное приложение, сосредоточившись на трех элементах: Markovify, Requests-Html и объектном программировании (функциях).
Давайте начнем с создания базы данных для хранения данных:
SQLite: наш контейнер данных
Мы собираемся использовать SQLite в качестве нашего контейнера данных, потому что это очень быстрая и небольшая реляционная база данных, а Python имеет стандартную библиотеку для взаимодействия с ней.
В этом фрагменте кода мы импортируем нашу библиотеку, затем создаем подключение к базе данных (Python создает базу данных, если она не существует). Затем мы создаем функцию без параметров, в которой создаем таблицу "Articles", только если она не существует в базе данных.
Requests-html: Наш веб-парсер
Если вы прочитали мою предыдущую публикацию о requests-html, то уже знаете, что я являюсь большим поклонником этой популярной библиотеки. В этом фрагменте мы создаем новую функцию get_pages с одним параметром, чтобы выбрать, сколько страниц мы хотим скачать с Википедии (по умолчанию 10).
Давайте более подробно рассмотрим код:
Здесь мы создаем новую HtmlSession для requests, что является фундаментальным для создания GET-запросов.
После создания сессии мы отправляем GET-запрос на случайную страницу Википедии и сохраняем ответ в переменную.
Наконец, мы парсим страницу, чтобы извлечь содержимое, которое мы собираемся использовать в нашем скрипте.
Для заголовка мы ищем текст, содержащийся в каждом html-объекте с классом "firstHeading".
Для содержимого статьи мы ищем каждый объект
, содержащийся на странице, но только если объект содержит не менее 30 символов (мы исключаем однословные и короткие предложения).
Markovify: Алгоритм цепей Маркова
Теперь мы можем использовать данные, которые мы извлекли из Википедии.
Прежде всего, мы считываем текст из нашей базы данных и создаем строку, объединяя все абзацы из статей в одну строку, разделенную ".".
После этого мы можем обучить нашу модель, передавая нашу строку в markovify.Text().
Теперь мы можем создавать новые предложения, используя .make_sentence().
Я также создал другую функцию для создания более длинных предложений (вы можете найти ее в коде на github в конце статьи).
Последние штрихи
Чтобы завершить наш скрипт, мы создаем основную функцию, в которой мы можем вызывать предыдущие функции.
Затем мы можем запустить программу, чтобы получить похожий результат:
------------------------
Портрет Филиппа IV в коричневом и серебряном цветах - это моль в туннелях сразу.
------------------------
------------------------
Объясняя свои действия, он был принят в психиатрические больницы из-за сильного языка и культуры Дэвиса.
------------------------
------------------------
Прибыв 22 мая 1809 года, он служил в качестве каблука против Эль Лигеро.
------------------------
------------------------
Ребенок превращается в настоящего призрака, а его крестная мать, вдова Подбара, Салайка и Стари Град.
------------------------
Вот и все на сегодня. Как всегда, вы можете найти код на github здесь