Telegram-бот для анализа текста | выделение тематических групп

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Предыстория

Буквально месяц назад, мы с моим коллегой участвовали в HAKATON. Наша команда взялась за интересную задачу от компании МТС: на основе тысяч опросов, найти усредненный синоним к определенной категории ответов и визуализировать это в виде диаграммы, либо облака слов.

После выполнения задачи и защиты проекта мы задумались:

"А что если данную программу попробовать связать с тг ботом?"

Как раз после этого, мы решили это реализовать.

Ссылка на данный проект в github

https://github.com/onevay/Tg_Bot_Topic_Analyze/tree/main

Этапы работы

  • Выбор стека

  • Создание "кнопок и сырого текста"

  • База данных

  • Включение функций анализа текста

  • Оформление и доработка

Краткое описание функционала

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

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

В качестве дополнения, пользователь может отправить запрос в chat gpt, где тот найдет каждой группе слов свою тему.

Библиотека aiogram

aiogram - это мощный и популярный асинхронный фреймворк для разработки ботов в Telegram на языке python. Он обеспечивает эффективный способ взаимодействия с Telegram Bot API.

Основные преимущества aiogram:

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

  2. Гибкость. Предоставляет множество возможностей для настройки и расширения функциональности бота. Он поддерживает различные типы сообщений, клавиатуры (inline и reply), коллбэки и многое другое.

  3. Поддержка состояний (FSM). Библиотека имеет встроенную поддержку конечных автоматов, что упрощает создание сложных ботов с многошаговым взаимодействием с пользователем.

  4. Минимализм. aiogram не навязывает лишних зависимостей, что делает его легким и быстрым.

Начало работы

Были созданы модули для более удобной работы.

ha1.py

from aiogram import F, Router
from aiogram.types import CallbackQuery, Message, ReplyKeyboardRemove, FSInputFile
from aiogram import filters
from aiogram.enums import ParseMode
import app.db as db
import topic_funcs.gensi as gn
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
import re
import topic_funcs.vizualize as viz
import topic_funcs.probably as prob
import topic_funcs.textb as req
from decouple import config
import app.keyboard as kb

keyboard.py

from aiogram.types import ReplyKeyboardMarkup, \
    KeyboardButton, InlineKeyboardButton, InlineKeyboardMarkup

db.py

import psycopg2
from decouple import config

main.py

from aiogram import Bot, Dispatcher
import asyncio
import logging
import app.db as db
from decouple import config
from app.ha1 import router

Здесь импортируются все необходимые компоненты для построения Telegram-бота.

def extract_number(text):
    match = re.search(r'\b(\d+)\b', text)
    if match:
        return int(match.group(1))
    else:
        return None

class UserData(StatesGroup):
    name: str = State()
    age: int | None = State()
    aim: str = State()
    gender: str | None = State()

class TopicAnalize(StatesGroup):
    start_analize: str = State()
    choice_rezult = State()

Далее в файле ha1.py мы прописываем функцию extract_number(), для извлечения возраста из текстового ввода пользователя. Класс UserData(StatesGroup) определяет состояния для FSM, управляющего процессом заполнения анкеты пользователем. Класс TopicAnalize(StatesGroup) определяет состояния для FSM, управляющего процессом анализа тем текста.

topic_start = InlineKeyboardMarkup(
    inline_keyboard=[
        [InlineKeyboardButton(text='						
Источник: https://habr.com/ru/articles/855786/


Интересные статьи

Интересные статьи

Миллионы разработчиков пишут запросы PromQL и создают пользовательские дашборды Grafana для Kubernetes. И все используют одинаковые метрики из node-exporter, kubelet и kube-state-metrics. К сожалению,...
Цель статьи, – показать примеры управления реализацией стратегии с помощью корпоративной единой информационной площадки на доступном инструменте, - Битрикс24. В статье на простом языке обсуждаются воз...
Часто при разговорах с клиентами мы спрашиваем, как они ведут учет различных данных и используют ли они CRM-систему? Популярный ответ — мы работаем с Excel-файлами, а пот...
О чём пойдёт речь?Пилотный пост будет посвящён интересной проблеме с которой мы столкнулись при попытке организовать CI/CD для монорепозитория с lerna. Сразу скажу, что э...
Эта публикация написана после неоднократных обращений как клиентов, так и (к горести моей) партнеров. Темы обращений были разные, но причиной в итоге оказывался один и тот же сценарий, реализу...