Очень доброжелательный и компетентный автор. Всегда был на связи, все разъяснил, предоставил несколько вариантов программы. Рекомендую.
Подробнее о работе
Гарантия сервиса Автор24
Уникальность не ниже 50%
1.2 Техническое задание
1) Общие сведения:
• Наименование проекта: Разработка чат-бота по агрегации новостных сообщений.
• Сроки реализации проекта: 01.02.2024 – 15.03.2024.
• Цель проекта: Разработать калькулятор с удобной функциональностью.
2) Назначение и цели создания (развития) системы:
• Назначение системы: Разработать чет-бот для телеграмм который подбирает новости в зависимости от рубрик.
Цели разработки:
• Реализация базового функционала чат-бота.
• Разработка приятного и интуитивно понятного интерфейса.
• Обеспечение стабильной и высокой производительности чат-бота.
3) Требования к системе:
• Поддержка платформы Телеграмм.
• Возможность интуитивно легкого управления.
• Высокая производительность и отсутствие задержек в процессе.
4) Состав и содержание работ по созданию системы:
• Анализ аналогичных проектов.
• Проектирование интерфейса.
• Разработка логики и механик.
• Тестирование и отладка.
5) Порядок контроля и приемки системы:
• Периодические отчеты о ходе разработки заказчику.
• Демонстрация промежуточных версий для согласования.
• Тестирование чат-бота на соответствие требованиям.
• Приемка системы заказчиком после успешного тестирования.
6) Требования к составу и содержанию работ по подготовке объекта разработки к вводу системы в действие:
• Загрузка и развертывание чат-бота на Телеграмм-платформе.
7) Требования к документированию:
• Техническое описание системы.
• Руководство пользователя.
• Отчеты о тестировании и отладке.
8) Источники разработки:
• Язык программирования Python.
1.3 Обзор аналогов
1. Бот Filtered News. Бот имеет две основные команды: /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-ссылки
Ключевые слова просто проверяются на включение. Поэтому на этом этапе при построении списка необходимо продумать акценты и пробелы.
Другими словами, если интересуют новости о курсе евро, хорошим примером ключевой фразы будет 'euro exchange rate' (можно добавить и другие формы, например 'euro rate'). Плохим примером может быть только слово "'euro", которое, вероятно, приведет к большому количеству бесполезных новостей. Фильтр должен быть основан только на заголовках новостей.
После того как ключевые слова и источники на следующий час заданы, система проверяет, есть ли новости, содержащие ключевые слова, заданные для предыдущего часа. Если они есть, отправляется сообщение. Никаких других проверок не производится.
Рисунок 2 – Оповещение бота Filtered News
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.2 Telegram Bot API
Telegram Bot API – это интерфейс, основанный на HTTP, созданный для разработчиков, заинтересованных в создании ботов для Telegram. Чтобы воспользоваться функциями Telegram Bot API необходимо получить специальный ключ аутентификации. Каждому боту при создании присваивается свой уникальный ключ.
Запросы к Telegram Bot API выглядят следующим образом: https://api.telegram.org/bot/METHOD_NAME?SOME_PARAMETERS, где – это ключ аутентификации, полученный при регистрации бота, METHOD_NAME – это название метода обращения к Telegram Bot API, а SOME_PARAMETRS – это параметры метода.
В ответ Telegram Bot API возвращает JSON-объект, который обязательно содержит поле «ok», принимающее значение «True» или «False». Если поле «ok» имеет значение «True», то JSON-объект так же содержит поле «result» с результатом запроса. Если поле «ok» имеет значение «False», то JSON-объект включает себя еще поле «description», в котором объясняется причина возникновения ошибки.
Для упрощения работы с Telegram Bot API будет использован Python-модуль pyTelegramBotAPI. С помощью этого модуля достаточно один раз присвоить ключ аутентификации bot = telebot.TeleBot(“TOKEN”), после чего, обращение к методам Telegram Bot API сводится к 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, которое осуществляет перевод текстов через сервис Google Translate, не требуя персонального ключа API в отличие от официального API Google Cloud, на котором базируется Google Translate. Данный сервис также построен на принципах Машинного обучения и Deep learning и отлично подходит для автоматизированного перевода текстов.
Далее разбитые на категории сообщения были преобразованы в отдельные файлы со случайными названиями и помещены в директории /{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 Неудовлетворительно
Наличие категории и некоторой выборки (train set) позволяет алгоритмам производить категоризацию получаемых на вход текстов автоматически. Качество работы алгоритма/их комбинаций определяется параметром AUC – площадью под ROC-кривой (Receiver Operating Characteristic), значение которого варьируется в пределах. Условно разбить показатели можно следующим образом
Целью являлось достижение точности не ниже 0.7.
Цель была достигнута при помощи:
а) предобработки обучающих текстов, токенизации, фильтрации при помощи компонента CountVectorizer из sklearn.feature_extraction.text;
б) подсчета словоупотреблений (N-грам слов) также при помощи CountVectorizer;
в) разделения количества употреблений каждого слова в документе на общее количество слов в документе – признака tf – Частоты термина, а также снижения веса слова, появляющегося во многих документах в категории – tf-idf – «Term Frequency times Inverse Document Frequency»;
г) использования Наивного Байесовского классификатора – компонента MultinomialNB в sklearn.naive_bayes.
Тесты показывают AUC, варьирующийся в районе 0.8:
Рисунок 7 – Результат одного из результатов работы категоризатора
Это является хорошим результатом, учитывая наличие хоть и тематической, но не слишком объемной обучающей базы. Определенная категория помещается в базу данных как один из параметров сообщения (поле cat в таблице Posts), а также может быть выведено в бот в сообщении с новостью:
3 Проектирование приложения
3.1 Структура используемой базы данных
Использование реляционной базы данных необходимо для хранения информации о пользователях, их подписках, списка информационных ресурсов, получаемых из ресурсов сообщений, их свойств и другой вспомогательной информации.
Структура базы данных схематично выглядит следующим образом:
В современном мире мы каждый день получаем неизмеримое, огромное количество информации в виде новостей, рекламы, фактов и т. д. Люди устают от этого, им хочется ограничить информационный поток, который отвлекает их от запланированных и важных дел. Люди давно искали решении этой проблемы самыми разными способами. Одним из решений данной проблемы может выступать взаимосвязанная система, не только объединяющая в себе передовые качества существующих решений, но и добавляющая новые, необходимые для будущих потребителей. Проект рассматривает разработку
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: An introduction for developers, 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 с помощью следующей команды: sudo apt-get install python3.
Для установки Python-модулей необходимо установить систему управления пакетами pip. Это было сделано с помощью следующей команды: sudo apt-get install python3-pip.
Были установлены Python-модули для работы с Telegram API Bot с помощью команды sudo pip3 install pyTelegramBotAPI.
Для непрерывной работы программы, даже после завершения сессии, необходимо было установить приложение Screen. Screen – это программа, которая обеспечивает работу нескольких сессий внутри одного окна. Установка программы Screen осуществляется с помощью команды sudo apt-get install screen.
3.6 Получение новостей через RSS
Для упрощения процесса получения новостей в формате RSS используется плагин feedparser, который упрощает структуру единоразового запроса до feedparser.parse({ссылка на ресурс}). При этом возвращается JSON-объект, являющийся массивом сообщений и параметров.
Каждое вхождение имеет дату публикации (published) в формате %d/%m/%Y/%H/%M/%S, где %d – день публикации, %m – месяц, %y – год, %h – час, %m – месяц, %s – секунда. Текст сообщения идет как значение параметра value.
Не подошла эта работа?
Закажи новую работу, сделанную по твоим требованиям
1.2 Техническое задание
1) Общие сведения:
• Наименование проекта: Разработка чат-бота по агрегации новостных сообщений.
• Сроки реализации проекта: 01.02.2024 – 15.03.2024.
• Цель проекта: Разработать калькулятор с удобной функциональностью.
2) Назначение и цели создания (развития) системы:
• Назначение системы: Разработать чет-бот для телеграмм который подбирает новости в зависимости от рубрик.
Цели разработки:
• Реализация базового функционала чат-бота.
• Разработка приятного и интуитивно понятного интерфейса.
• Обеспечение стабильной и высокой производительности чат-бота.
3) Требования к системе:
• Поддержка платформы Телеграмм.
• Возможность интуитивно легкого управления.
• Высокая производительность и отсутствие задержек в процессе.
4) Состав и содержание работ по созданию системы:
• Анализ аналогичных проектов.
• Проектирование интерфейса.
• Разработка логики и механик.
• Тестирование и отладка.
5) Порядок контроля и приемки системы:
• Периодические отчеты о ходе разработки заказчику.
• Демонстрация промежуточных версий для согласования.
• Тестирование чат-бота на соответствие требованиям.
• Приемка системы заказчиком после успешного тестирования.
6) Требования к составу и содержанию работ по подготовке объекта разработки к вводу системы в действие:
• Загрузка и развертывание чат-бота на Телеграмм-платформе.
7) Требования к документированию:
• Техническое описание системы.
• Руководство пользователя.
• Отчеты о тестировании и отладке.
8) Источники разработки:
• Язык программирования Python.
1.3 Обзор аналогов
1. Бот Filtered News. Бот имеет две основные команды: /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-ссылки
Ключевые слова просто проверяются на включение. Поэтому на этом этапе при построении списка необходимо продумать акценты и пробелы.
Другими словами, если интересуют новости о курсе евро, хорошим примером ключевой фразы будет 'euro exchange rate' (можно добавить и другие формы, например 'euro rate'). Плохим примером может быть только слово "'euro", которое, вероятно, приведет к большому количеству бесполезных новостей. Фильтр должен быть основан только на заголовках новостей.
После того как ключевые слова и источники на следующий час заданы, система проверяет, есть ли новости, содержащие ключевые слова, заданные для предыдущего часа. Если они есть, отправляется сообщение. Никаких других проверок не производится.
Рисунок 2 – Оповещение бота Filtered News
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.2 Telegram Bot API
Telegram Bot API – это интерфейс, основанный на HTTP, созданный для разработчиков, заинтересованных в создании ботов для Telegram. Чтобы воспользоваться функциями Telegram Bot API необходимо получить специальный ключ аутентификации. Каждому боту при создании присваивается свой уникальный ключ.
Запросы к Telegram Bot API выглядят следующим образом: https://api.telegram.org/bot/METHOD_NAME?SOME_PARAMETERS, где – это ключ аутентификации, полученный при регистрации бота, METHOD_NAME – это название метода обращения к Telegram Bot API, а SOME_PARAMETRS – это параметры метода.
В ответ Telegram Bot API возвращает JSON-объект, который обязательно содержит поле «ok», принимающее значение «True» или «False». Если поле «ok» имеет значение «True», то JSON-объект так же содержит поле «result» с результатом запроса. Если поле «ok» имеет значение «False», то JSON-объект включает себя еще поле «description», в котором объясняется причина возникновения ошибки.
Для упрощения работы с Telegram Bot API будет использован Python-модуль pyTelegramBotAPI. С помощью этого модуля достаточно один раз присвоить ключ аутентификации bot = telebot.TeleBot(“TOKEN”), после чего, обращение к методам Telegram Bot API сводится к 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, которое осуществляет перевод текстов через сервис Google Translate, не требуя персонального ключа API в отличие от официального API Google Cloud, на котором базируется Google Translate. Данный сервис также построен на принципах Машинного обучения и Deep learning и отлично подходит для автоматизированного перевода текстов.
Далее разбитые на категории сообщения были преобразованы в отдельные файлы со случайными названиями и помещены в директории /{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 Неудовлетворительно
Наличие категории и некоторой выборки (train set) позволяет алгоритмам производить категоризацию получаемых на вход текстов автоматически. Качество работы алгоритма/их комбинаций определяется параметром AUC – площадью под ROC-кривой (Receiver Operating Characteristic), значение которого варьируется в пределах. Условно разбить показатели можно следующим образом
Целью являлось достижение точности не ниже 0.7.
Цель была достигнута при помощи:
а) предобработки обучающих текстов, токенизации, фильтрации при помощи компонента CountVectorizer из sklearn.feature_extraction.text;
б) подсчета словоупотреблений (N-грам слов) также при помощи CountVectorizer;
в) разделения количества употреблений каждого слова в документе на общее количество слов в документе – признака tf – Частоты термина, а также снижения веса слова, появляющегося во многих документах в категории – tf-idf – «Term Frequency times Inverse Document Frequency»;
г) использования Наивного Байесовского классификатора – компонента MultinomialNB в sklearn.naive_bayes.
Тесты показывают AUC, варьирующийся в районе 0.8:
Рисунок 7 – Результат одного из результатов работы категоризатора
Это является хорошим результатом, учитывая наличие хоть и тематической, но не слишком объемной обучающей базы. Определенная категория помещается в базу данных как один из параметров сообщения (поле cat в таблице Posts), а также может быть выведено в бот в сообщении с новостью:
3 Проектирование приложения
3.1 Структура используемой базы данных
Использование реляционной базы данных необходимо для хранения информации о пользователях, их подписках, списка информационных ресурсов, получаемых из ресурсов сообщений, их свойств и другой вспомогательной информации.
Структура базы данных схематично выглядит следующим образом:
В современном мире мы каждый день получаем неизмеримое, огромное количество информации в виде новостей, рекламы, фактов и т. д. Люди устают от этого, им хочется ограничить информационный поток, который отвлекает их от запланированных и важных дел. Люди давно искали решении этой проблемы самыми разными способами. Одним из решений данной проблемы может выступать взаимосвязанная система, не только объединяющая в себе передовые качества существующих решений, но и добавляющая новые, необходимые для будущих потребителей. Проект рассматривает разработку
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: An introduction for developers, 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 с помощью следующей команды: sudo apt-get install python3.
Для установки Python-модулей необходимо установить систему управления пакетами pip. Это было сделано с помощью следующей команды: sudo apt-get install python3-pip.
Были установлены Python-модули для работы с Telegram API Bot с помощью команды sudo pip3 install pyTelegramBotAPI.
Для непрерывной работы программы, даже после завершения сессии, необходимо было установить приложение Screen. Screen – это программа, которая обеспечивает работу нескольких сессий внутри одного окна. Установка программы Screen осуществляется с помощью команды sudo apt-get install screen.
3.6 Получение новостей через RSS
Для упрощения процесса получения новостей в формате RSS используется плагин feedparser, который упрощает структуру единоразового запроса до feedparser.parse({ссылка на ресурс}). При этом возвращается JSON-объект, являющийся массивом сообщений и параметров.
Каждое вхождение имеет дату публикации (published) в формате %d/%m/%Y/%H/%M/%S, где %d – день публикации, %m – месяц, %y – год, %h – час, %m – месяц, %s – секунда. Текст сообщения идет как значение параметра value.
| Купить эту работу vs Заказать новую | ||
|---|---|---|
| 0 раз | Куплено | Выполняется индивидуально |
|
Не менее 40%
Исполнитель, загружая работу в «Банк готовых работ» подтверждает, что
уровень оригинальности
работы составляет не менее 40%
|
Уникальность | Выполняется индивидуально |
| Сразу в личном кабинете | Доступность | Срок 1—6 дней |
| 1000 ₽ | Цена | от 500 ₽ |
Не подошла эта работа?
В нашей базе 147295 Курсовых работ — поможем найти подходящую