Разработка чат-бота для агрегации новостных источников по заданной тематике

Анализ предметной области и формирование требований к разрабатываемой базе данных, ее структура и компоненты. Функциональные и нефункциональные требования к продукту. Выбор и разработка алгоритмов для реализации системы. Интерфейс категоризации текстов.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 12.03.2024
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

В современном мире мы каждый день получаем неизмеримое, огромное количество информации в виде новостей, рекламы, фактов и т.д. Люди устают от этого, им хочется ограничить информационный поток, который отвлекает их от запланированных и важных дел. Люди давно искали решении этой проблемы самыми разными способами. Одним из решений данной проблемы может выступать взаимосвязанная система, не только объединяющая в себе передовые качества существующих решений, но и добавляющая новые, необходимые для будущих потребителей. Проект рассматривает разработку телеграмм-бота для управления потоком поступающих новостей с использованием современных технологий и подходов. Проект реализован на популярном языке программирования Python с применением различных удобных и высокотехнологичных библиотек.

Целью работы является разработка сервиса, упрощающего потенциальным пользователям получение информации (новостей).

Задачи:

а) определение проблемы

б) постановка целей и задач для разрабатываемого проекта;

в) разработка структуры проекта;

г) разработка проекта;

д) тестирование и анализ недочетов.

1. Анализ задачи и разработка требований к системе

1.1 Анализ предметной области и формирование требований к разрабатываемой базе данных

В XXI-м веке человек повсеместно окружен различными источниками информации: рекламные вывески и стенды расставлены по всему городу, радио и телевидение вещают в каждой квартире, на прилавках магазинов лежат газеты и журналы, а в смартфоне, планшете и компьютере расположились десятки цифровых источников информации.

Причем рынок продолжает стремительный рост, увеличивая оборот и выручку из года в год. При этом важно отслеживать современные тенденции и тренды, определяющие дальнейшее развитие индустрии.

Издавна печатные издания были основными источниками новостной информации, но сейчас изданиям из этой отрасли приходится переформатироваться под современные условия рынка. Крупнейшие мировые издательства начали переход в цифровое пространство еще в 2009 году.

В современном мире мы каждый день получаем неизмеримое, огромное количество информации в виде новостей, рекламы, фактов и т.д. Люди устают от этого, им хочется ограничить информационный поток, который отвлекает их от запланированных и важных дел. Люди давно искали решении этой проблемы самыми разными способами. Одним из решений данной проблемы может выступать взаимосвязанная система, не только объединяющая в себе передовые качества существующих решений, но и добавляющая новые, необходимые для будущих потребителей - агрегатор новостных сообщений. «Телеграмм-бот для агрегации новостных сообщений».

1.2 Техническое задание

1) Общие сведения:

· Наименование проекта: Разработка чат-бота по агрегации новостных сообщений.

· Сроки реализации проекта: 01.02.2024 - 15.03.2024.

· Цель проекта: Разработать калькулятор с удобной функциональностью.

2) Назначение и цели создания (развития) системы:

· Назначение системы: Разработать чет-бот для телеграмм который подбирает новости в зависимости от рубрик.

Цели разработки:

· Реализация базового функционала чат-бота.

· Разработка приятного и интуитивно понятного интерфейса.

· Обеспечение стабильной и высокой производительности чат-бота.

3) Требования к системе:

· Поддержка платформы Телеграмм.

· Возможность интуитивно легкого управления.

· Высокая производительность и отсутствие задержек в процессе.

4) Состав и содержание работ по созданию системы:

· Анализ аналогичных проектов.

· Проектирование интерфейса.

· Разработка логики и механик.

· Тестирование и отладка.

5) Порядок контроля и приемки системы:

· Периодические отчеты о ходе разработки заказчику.

· Демонстрация промежуточных версий для согласования.

· Тестирование чат-бота на соответствие требованиям.

· Приемка системы заказчиком после успешного тестирования.

6) Требования к составу и содержанию работ по подготовке объекта разработки к вводу системы в действие:

· Загрузка и развертывание чат-бота на Телеграмм-платформе.

7) Требования к документированию:

· Техническое описание системы.

· Руководство пользователя.

· Отчеты о тестировании и отладке.

8) Источники разработки:

· Язык программирования Python.

1.3 Обзор аналогов

1. Бот FilteredNews. Бот имеет две основные команды: /sources (указывает источники в виде списка URL, разделенных запятыми) и /keywords (указывает список слов для фильтрации). В настоящее время поддерживаются только источники RSS, но большинство популярных СМИ все еще имеют источники RSS. Пример:

* РИА Новости - https://ria.ru/export/rss2/archive/index.xml

* BBC Russia - http://feeds.bbci.co.uk/russian/rss.xml

* РБК - https://rssexport.rbc.ru/rbcnews/news/30/full.rss

* Хабр - https://habr.com/ru/rss/news/? fl=ru

Впрочем, есть возможность добавить свои собственные RSS-ссылки. Их можно искать на главной странице СМИ, что очень удобно. Также можете искать их в Google. Нужная RSS-ссылка будет генерировать xml, как показано на рисунке 1.

Рисунок 1. Вывод RSS-ссылки

Ключевые слова просто проверяются на включение. Поэтому на этом этапе при построении списка необходимо продумать акценты и пробелы.

Другими словами, если интересуют новости о курсе евро, хорошим примером ключевой фразы будет 'euroexchangerate' (можно добавить и другие формы, например 'eurorate'). Плохим примером может быть только слово «'euro», которое, вероятно, приведет к большому количеству бесполезных новостей. Фильтр должен быть основан только на заголовках новостей.

После того как ключевые слова и источники на следующий час заданы, система проверяет, есть ли новости, содержащие ключевые слова, заданные для предыдущего часа. Если они есть, отправляется сообщение. Никаких других проверок не производится.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2. Оповещение ботаFilteredNews

2. Чат-бот Channelsобъединяет посты с любимых каналов в единую новостную ленту. Функционал бота очень прост, но он может временно отключать подписки, группировать каналы, перенаправлять сообщения с одного канала на другой и устанавливать фильтры контента. В конце каждого сообщения появляется ссылка на источник материала.

Рисунок 3. Пример работы бота Channels

Бот подходит для тех, кто подписан на множество каналов и не всегда готов читать новости сразу после их появления, но ищет их в свободное время. После пробного периода бот будет условно бесплатным при наличии не более 10 каналов. Поскольку большинство пользователей Telegram подписаны на небольшое количество каналов, это изменение их не коснется. Остальным придется платить абонентскую плату в размере 890 рублей в год.

1.4 Функциональные и нефункциональные требования к продукту

Требования со стороны администратора приложения:

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

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

- все изменения должны вноситься через административную панель;

- программный продукт должен хранить все данные в базе данных;

Определим требования, предъявляемые со стороны пользователя:

- все изменения должны быть автоматически доступны для программного обеспечения;

- ПО должен позволять просматривать новости;

- ПО должен позволять выбирать рубрику новостей;

- ПО должен позволять просматривать контакты;

Функциональные требования к программному продукту:

- возможность создания новостей;

- возможность редактирования разделов в программном обеспечении;

- возможность редактирования пользователей;

- возможность удаления пользователей;

- проверка корректности введенной информации.

Нефункциональные требования к программному продукту:

- безопасность;

- производительность - программный продукт должен реагировать на любой пользовательский запрос не дольше, чем в течении 1 секунды.

- надёжность: в случае сбоя должна быть возможность восстановить все данные старше 24 часов;

- доступность: ПП должен быть доступен 99.9% времени в год;

- переносимость: чат бот должен работать корректно на всех устройствах.

AS-IS - модель «как есть» приведена на рисунке 4.

Рисунок 4. Модель AS-IS

Существенным недостатком модели AS-IS является создание идеализированной модели. Улучшение существующей ситуации достигается созданием модели ТО-ВЕ (как будет) - модели новой организации бизнес-процессов (рис. 5).

Рисунок 5. Модель TO-BE

2. Выбор и разработка алгоритмов для реализации системы

2.1 СУБД

Для хранения данных о пользователях, акканутах, новостях и другой информации необходимо использовать базу данных. В качестве системы управления базой данных была выбрана встраиваемая реляционная СУБД SQLite.

У SQLite можно выделить следующие преимущества:

· простота использования;

· отсутствие необходимости настройки сервера СУБД;

· свободная лицензия;

· кроссплатформенность;

· высокая скорость выполнения простых операций по сравнению с MySQL и PostgreSQL;

· высокая производительность по сравнению с MySQL и PostgreSQL;

· база данных хранится всего в одном файле;

Конечно, у SQLite есть и недостатки по сравнению с другими популярными СУБД: отсутствие пользовательского управления, плохая работа с транзакциями больше 50 Мбайт, невозможность дополнительной настройки для улучшения производительности. Но все эти недостатки никак не скажутся на работе агрегатора новостей, а учитывая все достоинства данной СУБД, выбор SQLite кажется очевидным.

2.2TelegramBotAPI

TelegramBot API - это интерфейс, основанный на HTTP, созданный для разработчиков, заинтересованных в создании ботов для Telegram. Чтобы воспользоваться функциями TelegramBotAPI необходимо получить специальный ключ аутентификации. Каждому боту при создании присваивается свой уникальный ключ.

Запросы к TelegramBotAPI выглядят следующим образом: https://api.telegram.org/bot<token>/METHOD_NAME? SOME_PARAMETERS, где <token> - это ключ аутентификации, полученный при регистрации бота, METHOD_NAME - это название метода обращения к TelegramBotAPI, а SOME_PARAMETRS - это параметры метода.

В ответ TelegramBotAPI возвращает JSON-объект, который обязательно содержит поле «ok», принимающее значение «True» или «False». Если поле «ok» имеет значение «True», то JSON-объект так же содержит поле «result» с результатом запроса. Если поле «ok» имеет значение «False», то JSON-объект включает себя еще поле «description», в котором объясняется причина возникновения ошибки.

Для упрощения работы с TelegramBotAPI будет использован Python-модуль pyTelegramBotAPI. С помощью этого модуля достаточно один раз присвоить ключ аутентификации bot = telebot. TeleBot («TOKEN»), после чего, обращение к методам TelegramBotAPI сводится к bot.METHOD_NAME (SOME_PARAMETERS).

Категоризация источников: Яндекс дзен, который уже поделен на категории новостей и сайт https://www.championat.com, где тоже источники новостей поделены на категории спорта. Таким образом, все наши источники новостей заранее поделены по категориямв зависимости от освещаемых тематик.

Категоризация текста получаемых сообщений реализована с использованием библиотеки scikit-learn для Python. Библиотека классификаторы, регрессионные модели и кластеры, в том числе метод опорных векторов (Метод опорных векторов, n.d.), «случайный лес» (Random forest, б.д.), градиентный ускоритель (Gradient boosting, б.д.), метод k-средних (k-means, б.д.), DBSCAN (DBSCAN, б.д.) и множество других. Данная библиотека крайне универсальна и позволяет производит обучение для различных структур данных, в том числе и текстовых.

Чтобы иметь возможность с некоторой точностью определять категорию того или иного текст, для начала необходимо обучить систему на некоторой выборке, показать, что некая комбинация слов (предложение, фраза) является признаком одной категории, другая комбинация - другой категории. Также важно учитывать частоту вхождений слов в фразы каждой из категорий - это позволит повысить точность алгоритма.

В проекте были выделены следующие категории, по которым производилось обучение:

а) образование;

б) мероприятия;

в) предпринимательство;

г) политика;

д) наука;

е) культура;

ж) спорт.

Данные категории хранятся в таблице Categories как название для отображения (name) и уникальный id, состоящий из английских букв без пробелов со структурой cat. {название категории на английском}, список может быть расширен в любой момент.

Рисунок 6. Интерфейс категоризации текстов

Для обучения была выгрузка текстов сообщений из Яндекс дзен и Чемпионат.ком - в общей сложности около 2000 сообщений. Для ручной оценки сообщений был разработан дополнительный интерфейс для бота, вызываемый командой /learn и позволяющий выбрать категорию при помощи виртуальных клавиш, причем данная команда доступна только пользователям, включенным в список администраторов в файле конфигурации.

Однако из-за особенностей построения предложений на русском языке было принято решение систематически переводить все тексты внутри системы на английский язык, обладающий более четкой структурой предложений (строгий порядок слов, служебных конструкций, отсутствие словоформ). Для этого было использовано расширение Python под названием translate, которое осуществляет перевод текстов через сервис GoogleTranslate, не требуя персонального ключа API в отличие от официального APIGoogleCloud, на котором базируется GoogleTranslate. Данный сервис также построен на принципах Машинного обучения и Deeplearning и отлично подходит для автоматизированного перевода текстов.

Далее разбитые на категории сообщения были преобразованы в отдельные файлы со случайными названиями и помещены в директории /{id категории}/{файл} - такое размещение требует метод load_files модуля sklearn.datasets.

Таблица 1. Категории качества показателя AUC

Интервал AUC

Качествомодели

0.9-1.0

Отличное

0.8-0.9

Оченьхорошее

0.7-0.8

Хорошее

0.6-0.7

Среднее

0.5-0.6

Неудовлетворительно

Наличие категории и некоторой выборки (trainset) позволяет алгоритмам производить категоризацию получаемых на вход текстов автоматически. Качество работы алгоритма/их комбинаций определяется параметром AUC - площадью под ROC-кривой (ReceiverOperatingCharacteristic), значение которого варьируется в пределах. Условно разбить показатели можно следующим образом

Целью являлось достижение точности не ниже 0.7.

Цель была достигнута при помощи:

а) предобработки обучающих текстов, токенизации, фильтрации при помощи компонента CountVectorizer из sklearn.feature_extraction.text;

б) подсчета словоупотреблений (N-грам слов) также при помощи CountVectorizer;

в) разделения количества употреблений каждого слова в документе на общее количество слов в документе - признака tf - Частоты термина, а также снижения веса слова, появляющегося во многих документах в категории - tf-idf - «TermFrequencytimesInverseDocumentFrequency»;

г) использования Наивного Байесовского классификатора - компонента MultinomialNB в sklearn.naive_bayes.

Тесты показывают AUC, варьирующийся в районе 0.8:

Рисунок 7. Результат одного из результатов работы категоризатора

Это является хорошим результатом, учитывая наличие хоть и тематической, но не слишком объемной обучающей базы. Определенная категория помещается в базу данных как один из параметров сообщения (поле cat в таблице Posts), а также может быть выведено в бот в сообщении с новостью:

3. Проектирование приложения

алгоритм база интерфейс

3.1 Структура используемой базы данных

Использование реляционной базы данных необходимо для хранения информации о пользователях, их подписках, списка информационных ресурсов, получаемых из ресурсов сообщений, их свойств и другой вспомогательной информации.

Структура базы данных схематично выглядит следующим образом:

Рисунок 8. Схема базы данных сервиса

Ниже будут более подробно рассмотрены таблицы со схемы, изображенной на рис. 2. SQL-запросы для генерации таблиц - в приложении.

Таблица Usersхранит в себе данные о пользователях сервиса.

а) id - уникальный идентификационный номер пользователя в Telegram. Также является уникальным в базе данных сервиса;

б) дата регистрации пользователя в чат-боте;

в) текущее состояние работы с ботом (системный флаг, показывающий, на какой операции находится пользователь);

г) username - никнейм пользователя, установленный в профиле в Telegram;

д) first_name - имя пользователя в Telegram;

е) last_name - фамилия пользователя в Telegram.

Таблица Groups хранит перечень источников новостей и сведения о них.

а) id - название категории RSS в формате rss: {название категории};

б) name - отображаемое в клиенте название;

в) g_link - ссылка на ресурс.

Таблица UsersGroups является промежуточной для связи многие-ко-многим (many-to-many) между таблицами Users и Groups.

а) uid - id пользователя;

б) gid - id акаунта;

в) upget - флаг, означающий, что пользователь подписан на акаунт для получения новостей по мере их выхода;

г) fetget - флаг, означающий, что пользователь подписан на получения новостей из акаунта.

Таблица Categoriesхранит категории, на которые разделяются сообщения при помощи Машинного обучения.

д) id - уникальный id категории;

е) name - отображаемое в интерфейсе название категории.

Таблица Posts, в которой хранятся получаемые из Ядзен, содержащихся в таблице Groups, новости и их параметры.

а) id - уникальный номер новости в ЯДзен и в данной базе данных;

б) gid - источникы, из которой была получена новость;

в) p_date - дата публикации новости;

г) p_text - текст новости;

д) p_likes - количество отметок нравится у сообщения на момент запроса;

е) p_reposts - сколько раз пользователи поделились данным сообщением на момент запроса.

ж) cat - id категории сообщения из таблицы Categories.

Таблица RSS - аналогична таблице Posts, но служит для хранения новостей, полученных через RSS.

а) rss_id - idRSS-ресурса, из которого получена новость;

б) rss_date - дата публикации новости;

в) rss_link - ссылка на новость;

г) rss_title - заголовок новости.

Таблица Reviews предназначена для хранения отзывов, оставляемых пользователями о боте.

а) uid - id пользователя;

б) rev_text - текст отзыва;

в) rev_date - дата, когда отзыв был оставлен.

3.2 Архитектура разрабатываемой системы

Выбранная трехуровневая архитектура выполнена в стиле сервис-ориентированной архитектуры. Эта архитектура позволяет создавать распределенное программное обеспечение, состоящее из набора независимых сервисов. Трехуровневая архитектура разработана в стиле сервис-ориентированной архитектуры. Сервис-ориентированная архитектура позволяет создавать распределенное программное обеспечение, состоящее из набора независимых сервисов. Такая архитектура имеет ряд преимуществ, одним из которых является способность быстро адаптироваться к изменяющимся требованиям и вызовам современного цифрового мира.

Сегодня, наиболее востребованными являются веб-сервисы SOAP и сервисы REST; основное отличие подходов SOAP и REST: пакеты запросов и ответов в REST гораздо меньше по размеру, чем соответствующие пакеты SOAP.

SOAP рассматривает уровень передачи данных HTTP как пассивного наблюдателя, а REST, напротив, как активное взаимодействие с использованием существующих методов HTTP (GET, POST, PUT, DELETE и т.д.).

Модель SOAP поддерживает некоторую интроспекцию, так что разработчики сервисов могут определить API в файле WSDL (язык описания языка). Модель REST позволяет избежать сложности WSDL и использует более интуитивно понятный интерфейс, основанный на стандартных методах HTTP.

REST ограничивается операциями CRUD с использованием соответствующих методов HTTP, в то время как SOAP может включать практически неограниченное количество методов. Сравнивая плюсы и минусы двух подходов к реализации веб-сервисов, можно сказать, что веб-сервисы REST являются наиболее простыми для понимания и реализации и имеют наименьший размер пакета RESTful API также могут кэшироваться. Это означает, что клиент может хранить все ответы в кэше. В результате производительность API повышается.

RESTful API часто называют RESTful веб-сервисами, поскольку они реализуют принципы REST, а также протокол HTTP. По сути, они используют методы НТТР, чтобы охватить несколько ресурсов и представить их в стандартизированном формате (обычно XML). Можно использовать любую интернет-среду, если гипертекст стандартизирован (рис. 9).

Рисунок 9. Примеры REST

В REST используются четыре основных метода HTTP: GET, POST, PUT и DELETE. В большинстве случаев каждый метод используется для выполнения предопределенных действий CRUD (создание, чтение, обновление и удаление). POST - создание, GET - чтение, PUT - обновление, DELETE - удаление. Пример реализации веб-службы REST показан на рисунке 10.

Рисунок 10. Реализация REST

На рисунке 10 показана первая форма - REST API, разработанный для взаимодействия с базой данных MySQL с помощью Yii2 и PHP.

Этот программный продукт состоит из двух частей. Система управления контентом бота Telegram также имеет административный интерфейс, в котором администраторы входят в систему для обновления контента и управления программой.

3.3 Защита передаваемых данных

При передаче данных от сервера к клиенту по протоколу HTTP необходимо обеспечить защиту передаваемых данных, чтобы исключить возможность их перехвата сторонними приложениями. Для защиты передаваемых данных используются HTTPS-запросы, а также идентификация и аутентификация клиента на сервере. Для этого во время выполнения запроса отправляется токен; веб-токен в формате JSON состоит из трех частей, разделенных точкой:

- HEADER

- PAYLOAD

- SIGNATURE

Выходные данные состоят из трех строк Base64-URL, разделенных точками, и являются более компактными, чем стандарты на основе XML, такие как SAML, и поэтому могут быть легко переданы в средах HTML и HTTP. На рисунке 11 показана идентификация клиента и сервера с помощью этой диаграммы.

Рисунок 11. UML диаграмма

3.4 Принцип работы чат-бота в Telegram

Чат-боты в Telegram - это специальный вид аккаунтов, который не требует номера мобильного телефона для регистрации. Взаимодействие пользователя с ботом происходит посредством отправки специальных сообщений или команд в отдельный чат с ботом (Bots: Anintroductionfordevelopers, n.d.).

Взаимодействие пользователя с разрабатываемым в данной дипломной работе чат-ботом происходит с помощью следующих команд и сообщений (могут быть представлены в виде специальных кнопок):

1. Команда /start. Если ее вводит новый пользователь, то происходит регистрация пользователя в базе данных и отправляется приветственное сообщение. Если команду использует уже зарегистрированный пользователь, то отправляется другое приветственное сообщение.

2. Команда /stop. Если ее вводит зарегистрированный пользователь, то происходит отписка пользователя от всех новостей, на которые он был подписан. Если эту команду вводит незарегистрированный пользователь, то бот отправит сообщение о том, что пользователь не зарегистрирован и предложит нажать команду /start.

3. Сообщение «Главное меню». Возвращает в главное меню с кнопками «Подписки», «Настройки», «О проекте» и «Оставить пожелания».

4. Сообщение «О проекте». Выводит ознакомительную информацию о данном чат-боте.

5. Сообщение «Оставить пожелания». Выводит пользователю сообщение с предложением оставить отзыв. Отзыв пользователя записывается в отдельную таблицу в базе данных.

3.5 Настройка удаленного сервера

Для непрерывной работы чат-бота необходимо запускать его на сервере. Для этого был получен виртуальный сервер от научного руководителя дипломной работы. Для подключения к серверу необходимо открыть терминал в любой Unix-подобной операционной системе и ввести следующую команду: ssh - p 8096 ubuntu@hse.auditory.ru, где ssh - это команда подключения к серверу, - p 8096 - это номер порта подключения, ubuntu - это имя пользователя, а hse.auditory.ru - адрес сервера. После чего необходимо ввести пароль для получения доступа к серверу.

На сервер был установлен Python 3.5 с помощью следующей команды: sudoapt-getinstallpython3.

Для установки Python-модулей необходимо установить систему управления пакетами pip. Это было сделано с помощью следующей команды: sudoapt-getinstallpython3-pip.

Были установлены Python-модули для работы с TelegramAPIBot с помощью командыsudopip3 installpyTelegramBotAPI.

Для непрерывной работы программы, даже после завершения сессии, необходимо было установить приложение Screen. Screen - это программа, которая обеспечивает работу нескольких сессий внутри одного окна. Установка программы Screen осуществляется с помощью команды sudoapt-getinstallscreen.

3.6 Получение новостей через RSS

Для упрощения процесса получения новостей в формате RSS используется плагин feedparser, который упрощает структуру единоразового запроса до feedparser.parse({ссылка на ресурс}). При этом возвращается JSON-объект, являющийся массивом сообщений и параметров.

Каждое вхождение имеет дату публикации (published) в формате % d/%m/%Y/%H/%M/%S, где % d - день публикации, %m - месяц, %y - год, %h - час, %m - месяц, %s - секунда. Текст сообщения идет как значение параметра value.

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.