Учебный проект: рекомендательная система для подбора музыкантов в жанре русского хип-хопа. Имеет разговорный интерфейс, то есть анализирует не заранее заданные команды, а сообщения на естественном языке. Работает через консоль или как телеграм-бот.
Бот в Телеграм: @HipHopArtistsRecommendationBot
- Подбор списка музыкантов, похожих на заданного (можно сразу с фильтрами, например: найди соло исполнителей мужского пола похожих на касту в возрасте от 18 до 45 лет).
- Подбор списка рекомендаций по предпочтениям (по лайкам и дизлайкам).
- Фильтрация артистов по полу, возрасту или количеству участников коллектива.
- Поиск артистов по полу, возрасту, в определенном жанре
- Просмотр списка всех артистов, дерева жанров
- ...
- Графическая админка для добавления артистов

- Алгоритм определения схожести артистов базируется на обобщающей мере близости, включающей расчёт близости жанров музыки артистов (по дереву жанров), пола и возраста музыкантов, количеству участников коллектива и преобладающему антуражу песен исполнителей.
- Распознавание фразы на естественном языке разговорным интерфейсом реализовано при помощи системы шаблонов фраз, которые сопоставляются с входным сообщением после токенизации и нормализации последнего. Для более удобной настройки шаблонов релазизована система проверки логических условий.
- Для системы сопоставления шаблонов и системы проверки логических условий написаны юнит и интеграционные тесты.
- Автоматическая сборка и деплой телеграм-бота на Heroku при помощи Github Actions. Проект обёрнут в Docker и может быть развёрнут с локальной БД (docker-compose.yml)
- Использутеся база данных PostgreSQL для хранения списка пользователей, истории их запросов к боту и данных рекомендательной системы (список артистов, жанров и тд).
- Получение данных из базы осуществляется при помощи классов-моделей. Класс модель реализует CRUD апи для таблиц бд, используя методы пакета psycopg2.
- Модуль разговорного бота имеет MVC архитектуру и два интерфейса: консольный и в виде телеграм-бота.
- Взаимодействие с Postgres организовано через пул соединений ThreadedConnectionPool модуля psycopg2.
- Используется паттерн синглтон для обеспечения единой точки доступа к данным рекомендательной системы и исключения многократной заргузки её данных.
- Админка на PySimpleGui с возможностью добавления, обновлнния и удаления артистов из базы
docker-compose up
Нужно добавить файл hiphop_bot/hiphop_bot/env со следующим содержанием: TG_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, где вместо Х токен вашего бота.
Инструкция по регистрации бота: https://core.telegram.org/bots#6-botfather
