CoderCastrov logo
CoderCastrov
Марковские цепи

Игра с цепями Маркова на Википедии

Игра с цепями Маркова на Википедии
просмотров
2 мин чтение
#Марковские цепи

Привет, мир!

Цепи Маркова очень интересно использовать, и 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 здесь