Разработка информационной системы персонализации новостной ленты на базе платформы Telegram
Скачать 2.89 Mb.
|
1.2. Технологические возможности Telegram Перечислим основные функции сервера. 1) Сервер Telegram реализует шифрование по протоколу MTProto. MTProto – криптографический протокол, используемый в системе обмена сообщениями Telegram для шифрования переписки пользователей. Протокол был разработан Николаем Дуровым и другими программистами Telegram. В основе протокола лежит оригинальная комбинация симметричного алгоритма шифрования AES (в режиме IGE), протокол Диффи-Хеллмана для обмена 2048-битными RSA-ключами между двумя устройствами и ряд хеш- функций. Протокол допускает использование шифрования end-to-end с опциональной сверкой ключей [3]. 2) Сервер Telegram позволяет хранить всю переданную информацию и файлы на собственном хранилище, без ограничения объема хранимой информации, но с ограничением максимального размера файлов. 3) Сервер Telegram позволяет поставлять свои услуги сторонним серверам, для этого в Telegram предусмотрен специальный тип клиента (аккаунта) под названием бот. Боты – специальные аккаунты в Telegram, созданные для того, чтобы автоматически обрабатывать и отправлять сообщения. Пользователи (обычные клиенты) могут взаимодействовать с ботами при помощи сообщений, отправляемых через обычные или групповые чаты. Логика работы бота реализуется при помощи HTTPS запросов к API для ботов. 4) Сервер Telegram позволяет получить доступ к своим услугам через несколько интерфейсов: - Приложения для различных платформ (Windows, Linux, MacOS, Android, Iphone) – прикладной человеко-машинный интерфейс для подключения клиента (пользователя) к Telegram; - Web-приложения – прикладной человеко-машинный интерфейс для подключения клиента (пользователя) к Telegram через браузер; 18 - Telegram Bot API – программный интерфейс для создания ботов при помощи HTTPS запросов; - MTProto API – программный интерфейс для доступа к протоколу MTProto при помощи HTTPS запросов. Суммируя пункты 3, 4, можно заключить что в платформе Telegram существует два типа клиентов: пользователи и боты. Пользователями являются живые люди, для них разработаны человеко-машинные интерфейсы доступа к платформе. Ботами являются программы, обменивающиеся с пользователями информацией через чат. Логика работы бота должна быть реализована на втором, отдельном сервере. Сервер системы персонализации будет являться поставщиком услуг по отношению к конечному пользователю и клиентом по отношению к платформе Telegram. Методы передачи и получения информации (поставки услуг) конечному пользователю ограничены и описаны в документации Telegram [4]. Для примера выборочно приведем некоторые из методов: - getMe – возвращает информацию о боте; - sendMessage – посылает заданное текстовое сообщение указанному по id пользователю; - forwardMessage – пересылает полученное сообщение другому пользователю; - sendPhoto – посылает фотографию пользователю; - getFile – загружает полученный файл; - banChatMember – блокирует пользователя в чате (для данного действия бот должен быть назначен администратором чата); - editChatInviteLink – изменяет ссылку необходимую для присоединения к чату; - answerCallbackQuery – высылает пользователю варианты ответа на запрошенный ботом вопрос; - setMyCommands – задает список стандартных команд бота. 19 Логика использования данного инструментария обмена информации с пользователем должна быть реализована на сервере системы персонализации. Для этого необходимы серверные мощности (хост), алгоритмы обработки информации, реализованные с помощью одного из языков программирования, база данных для хранения информации. 1.3. Выбор технологий серверной разработки 1.3.1. Язык программирования и библиотеки Разрабатываемая информационная система будет иметь клиент-серверную архитектуру с учетом специфики реализации информационных систем на базе платформы Telegram. Классическую клиент-серверную архитектуру можно описать как взаимодействие двух или более сторон в которой одна сторона является владельцем информации или поставщиком услуг, а вторая и прочие являются потребителями информации или заказчиками услуг, при этом согласно, пособию, эффективное программирование TCP/IP можно выделить три типичных архитектуры клиент-сервер. В случае реализации информационной системы на платформе Telegram клиент и сервер будут находиться в разных сетях, помимо этого в архитектуре можно будет выделить два сервера и неограниченное число клиентов. Первым и основным с точки зрения обеспечения связи будет сервер платформы Telegram. Он реализует функции уровней с транспортного по прикладной по модели OSI. Для реализации логики системы и алгоритмов обработки информации необходимо использовать один из существующих языков программирования. На данный момент в мире существует около 1000 языков программирования. Конечно далеко не все из них массово используются, но даже если составлять список востребованных языков программирование их будет десятки. Для определения подходящего языка программирования можно воспользоваться 20 справкой платформы Telegram, в которой приведен список разработанных библиотек для подключения к API на разных языках. Разработанные библиотеки значительно ускоряют процесс разработки системы, так как предоставляют готовые алгоритмы обмена HTTPS запросами с API Telegram. Для выбора языка программирования и используемой библиотеки проведем анализ проектов на портале GitHub по следующим характеристикам: - количество библиотек, разработанных для данного языка программирования – косвенно позволяет определить применимость языка для написания алгоритмов для Telegram-бота; - оценка проекта на портале GitHub – позволяет оценить качество библиотеки по мнению сообщества GitHub; - дата последнего обновления проекта – так как Telegram выпускает обновления для платформы и для API и языки программирования так же обновляются и выпускают новые версии, то библиотеки так же требуют обновлений. Дата последнего обновления позволяет оценить актуальность и качество поддержки библиотеки; - количество обновлений библиотеки. Сравнительные данные библиотек представлены в таблице 1. Таблица 1 – Сравнительные данные библиотек Язык Название Ссылка на Git Оценка на Git Дата последнего обновления Количество обновлений PHP Telegram Bot Api Base https://github.com/tg- bot-api/bot-api-base 186 13.12.2020 222 PHP PHP Telegram API https://github.com/unre al4u/telegram-api 688 26.09.2021 473 PHP PHP Telegram Bot https://github.com/php- telegram-bot/core 2900 23.01.2022 1595 PHP Bot API PHP SDK https://github.com/iraza syed/telegram-bot-sdk 2200 27.01.2022 553 21 Продолжение таблицы 1 Язык Название Ссылка на Git Оценка на Git Дата последнего обновления Количество обновлений PHP TeleBot https://github.com/west acks/telebot 123 20.10.2022 255 PHP NovaGram https://github.com/skrtd ev/NovaGram 145 27.06.2021 442 PHP PHP Telegram Bot https://github.com/form apro/telegram-bot-php 240 14.05.2019 44 PHP PHP Telegram Bot Api https://github.com/Tele gramBot/Api 830 26.12.2021 482 PHP TuriBot https://github.com/davt ur19/TuriBot 86 01.12.2022 51 PHP TelegramBot ApiBundle https://github.com/bors aco/TelegramBotApiBu ndle 51 29.01.2022 42 Node.js Telegraf https://github.com/teleg raf/telegraf 5300 22.01.2022 1392 Node.js Node- Telegram-bot https://github.com/yago p/node-telegram-bot- api 5900 12.10.2021 600 Node.js Telebot https://github.com/mull war/telebot 1300 21.04.2021 429 Node.js telegram-bot- api https://github.com/mast /telegram-bot-api 225 08.10.2020 65 Node.js Slimbot https://github.com/ediso nchee/slimbot 186 23.03.2021 190 Node.js tgapi https://github.com/bigsl ycat/tgapi 37 26.06.2019 228 Node.js Botgram https://github.com/botgr am/botgram 243 14.07.2019 250 Rust teloxide https://github.com/telox ide/teloxide 1000 26.01.2022 2413 22 Продолжение таблицы 1 Язык Название Ссылка на Git Оценка на Git Дата последнего обновления Количество обновлений Rust Telebot https://github.com/bytes nake/telebot 189 06.05.2020 169 Rust carapax https://github.com/tg- rs/carapax 89 16.01.2022 752 Rust telegram-bot https://github.com/teleg ram-rs/telegram-bot 794 20.05.2021 612 Python python- telegram-bot https://github.com/pyth on-telegram- bot/python-telegram- bot 17500 01.02.2022 2268 Python pyTelegramB otAPI https://github.com/etern noir/pyTelegramBotAP I 5100 31.01.2022 1692 Python AIOGram https://github.com/aiogr am/aiogram 23000 26.01.2022 1634 Python Telethon https://github.com/Lona miWebs/Telethon 6000 28.01.2022 2855 Python pyrogram https://github.com/pyro gram/pyrogram 2300 29.01.2022 3661 Ruby Telegram::Bot https://github.com/teleg ram-bot-rb/telegram- bot 480 05.01.2022 212 Ruby telegram-bot- ruby https://github.com/atipu gin/telegram-bot-ruby 1100 16.01.2022 270 Ruby TelegramBot https://github.com/eljoj o/telegram_bot 292 09.08.2018 66 Swift telegram-bot- swift https://github.com/rapie rorg/telegram-bot-swift 318 13.08.2021 563 Swift Telegrammer https://github.com/givip /Telegrammer 271 06.09.2021 225 23 Продолжение таблицы 1 Язык Название Ссылка на Git Оценка на Git Дата последнего обновления Количество обновлений Swift SwiftyBot https://github.com/Fabri zioBrancati/SwiftyBot 257 14.01.2019 616 Kotlin TelegramBot API https://github.com/Insa nusMokrassar/Telegra mBotAPI 112 01.02.2022 1727 Kotlin Kotlin Telegram Bot https://github.com/kotli n-telegram-bot/kotlin- telegram-bot 473 26.10.2021 236 Kotlin kt-telegram- bot https://github.com/elbe kD/kt-telegram-bot 67 29.12.2021 143 Kotlin Telegraff https://github.com/rusla nys/telegraff 139 01.09.2020 97 Java TelegramBots https://github.com/rube nlagus/TelegramBots 2800 01.02.2022 972 Java Java API https://github.com/peng rad/java-telegram-bot- api 1100 05.02.2022 533 Go go-telegram- bot-api https://github.com/go- telegram-bot- api/telegram-bot-api 3400 03.01.2022 586 Go telebot https://github.com/tucn ak/telebot 2300 05.02.2022 706 C# Telegram https://github.com/Tele gramBots/Telegram.Bot 2000 17.11.2021 328 Elixir Nadia https://github.com/zhyu /nadia 351 12.11.2021 274 C++ tgbot-cpp https://github.com/reo7 sp/tgbot-cpp 602 29.12.2021 378 Dart TeleDart https://github.com/Dino Leung/TeleDart 194 10.01.2022 516 24 Продолжение таблицы 1 Язык Название Ссылка на Git Оценка на Git Дата последнего обновления Количество обновлений Lua telegram-bot- lua https://github.com/wrxc k/telegram-bot-lua 114 11.06.2021 86 Ocaml TelegraML https://github.com/nv- vn/TelegraML 82 18.06.2021 100 Haskell haskell- telegram-api https://github.com/klap pvisor/haskell- telegram-api 191 01.09.2019 301 Scala canoe https://github.com/augu stjune/canoe 156 14.10.2021 391 Scala bot4s https://github.com/bot4 s/telegram 343 01.01.2022 554 Perl Telegram Bot https://github.com/Gild edHonour/TelegramBot 22 05.10.2018 86 Проанализировав данные в таблице можно отметить, что Python является наиболее востребованным языком программирования для реализации взаимодействия с Telegram. Библиотеки на языке Python регулярно обновляются и поддерживают все возможности платформы Telegram. В числе библиотек есть и библиотеки для взаимодействия по протоколу Telegram Bot API, и по протоколу MTProto API. Для реализации взаимодействия по протоколу MTProto выбрана библиотека Telethon, она имеет лучшую оценку, чем pyrogram, так же работающую по протоколу MTProto. Для взаимодействия по протоколу Bot API выбрана библиотека AIOGram она имеет наивысшую оценку. 1.3.2. База данных Хранение данных возможно реализовать с помощью файловой системы и базы данных. Первый вариант не требует дополнительного программного 25 обеспечения, но при этом уступает второму в скорости работы и надежности. При реализации системы возможно сочетать оба способа хранения данных, например, для данных, которые требует частого и быстрого обновления, чтения и записи необходима база данных. Для данных которые записываются однократно и не требуют постоянного обновления, например, конфигурационные данные, данные настроек системы, может быть использовано хранение в файловой системе. Распространенными форматами для хранения в файловой системе являются форматы JSON и XML. Формат XML удобен в том числе возможностью редактирования файла через программу Excel. Для реализации хранения данных с помощью базы данных требуется установка системы управления базами данных (СУБД). СУБД классифицируются по модели хранимых данных: Иерархическая модель данных – в данной модели используется представление данных в виде древовидной структуры. Сетевая модель данных – модель на базе иерархической структуры, где для данных различных уровней определен математический принцип. Реляционная модель данных – модель данных основанная на теории множеств и логике первого порядка. Объектно-ориентированная модель данных – модель данных, где данные обрабатываются как абстрактные объекты, наделенные свойствами. Наиболее распространенным является реляционная модель данных, она подходит для большинства задач [5]. Сравним системы управления базами данных по следующим параметрам: скорость работы; простота настройки СУБД; тип лицензии; доступность на разных ОС (кросс-платформенность); востребованность; тип СУБД. 26 Результаты сравнения приведены на таблице 2. Таблица 2 – Сравнение систем управления базами данных Скорость Прос- тота Лицензия Доступ- ность на разных ОС Востребо- ванность Тип Oracle 10 5 Проприетарная + 10 Реляционная MySQL 7 9 Открытая + 9 Реляционная Microsoft SQL 6 6 Проприетарная - 8 Реляционная PostgreSQL 9 10 Открытая + 7 Реляционная MongoDB 6 7 Открытая + 4 Документоори- ентированная Для реализации системы следует производить выбор среди бесплатных СУБД, это MySQL, PostgreSQL и MongoSQL. 1.3.3. Размещение сервера Обеспечить серверные мощности возможно самостоятельно закупив оборудование или арендуя его. При самостоятельной закупке серверного оборудования возможно сэкономить на относительной стоимости единицы мощности сервера (под мощностью сервера имеется в виду совокупность его характеристик как производительность центрального процессора, объемы оперативной и стационарной памяти и т.д.), но при этом будет необходимо нести высокие эксплуатационные издержки. В эксплуатационные издержки входит оплата энергии, оплата статического ip-адреса, работы по настройке и ремонту оборудования. 27 При аренде серверных мощностей относительная стоимость единицы мощности будет выше, так же будут выше ежемесячные платежи. При этом отсутствует необходимость в эксплуатации и ремонте оборудования, отсутствуют капитальные затраты и присутствует возможность увеличения мощностей в короткие сроки или даже моментально. Компании в отдельных предоставляют серверные мощности в аренду, так же их называют облачные сервера, без взимания платы за пользования. Обычно такая услуга доступна для серверов, использующих малый объем мощностей, например, Google Cloud позволяет бесплатно использовать виртуальную машину с характеристиками 1 ядро 614 Мб оперативной памяти и 10 Гб постоянной. Данный вариант лучшим образом подойдет для реализации ВКР. 1.4. Выбор технологии анализа схожести новостей 1.4.1. Сходство Жаккара Для реализации поставленной задачи необходимо определить метод, с помощью которого система будет определять факт того, что новости в разных источниках одинаковые. Для определения схожести текстов есть несколько методов. Метод основан на подсчете общего количество элементов в последовательности, чем больше общих элементов, тем выше сходство 𝐾 𝑗 = 𝑐 𝑎+𝑏−𝑐 , (1) где а – количество видов на первом множестве; b – количество видов на втором множестве; с – количество видов, общих для первого и второго множеств. Данный метод будет удобен для поиска копии документа, но в случае поиска новости похожей по смыслу, но написанной другими словами, синонимами результат будет не такой качественный [6]. 28 1.4.2. Алгоритм шинглов Алгоритм использует схожую логику с Сходством Жаккера, но также используется «шинглы». Шинглы это последовательности слов. Алгоритмов состоит из следующих этапов: приведение к нормальной форме, разбиение на шинглы, вычисление контрольных сумм шинглов, случайная выборка контрольных сумм и сравнение. Минусом данного метода так же является направленность на вычисление копий текста, но не схожих по смыслу. 1.4.3. Расстояние Левенштейна В данном методе вычисляется минимальное количество операций, необходимых для преобразования одной строки в другую. Данный метод активно применяется для исправления ошибок в слове или для сравнения текстовых файлов на предмет редактирования. 1.4.4. Векторное сходство TF-IDF Первый векторный метод, появился еще в 1970х годах. Метод основан на двух компонентах rm Frequency (TF) и Inverse Document Frequency (IDF). В TF подсчитывается отношение числа вхождений слова к общему числу слов в документе. В IDF подсчитывается инверсия частоты вхождения слова к частоте, с которой данной слово встречается во всем документе. Такой подход позволяет задавать больший вес уникальным словам и обесценивать междометия и слова связки, часто встречающиеся в тексте. Для того что бы создать из текста вектор вычисление TF-IDF для каждого слова в векторе, затем из полученных значений составляется вектор. Анализ схожести текста производится по вычислению косинуса разности между векторами. |