Разрабатываем телеграм-бот, который будет рекомендовать варианты досуга в зависимости от местонахождения пользователя. Будет реализована возможность настроить рекомендации под себя.
Персонализированная рекомендательная система досуговых мероприятий, ресторанов, культурных объектов и т.д города-героя Москва.
Убедитесь, что установлены все зависимости
python3 -m pip install -r requiremets.txt
Бот запускается командой
python3 geoguesser_bot.py
При тестировании используется модуль pytest. Тесты запускаются командой:
pytest core/test_ut.py
Сборка дистрибутива осуществляется запуском комманды:
python3 -m build --wheel
sphinx-build doc _build
Созданиеs:
pybabel extract --input-dirs=. --output-file=messages.pot
mkdir -p locale/en/LC_MESSAGES
mv locale/en/LC_MESSAGES/locale.po locale/en/LC_MESSAGES/messages.mo
Чтобы сделать *.mo генерат: pybabel compile -d locale --locale en
UI
Окно 1 (старт).
- Отправить геолокацию
- Указать адрес
На кнопку "Отправить геолокацию" желательно научится вводить, принимать и обрабатывать геолокацию, которую предоставляет телеграмм. На кнопку "Указать адрес" желательно уметь парсить адрес, введённый в ручную.
Окно 2 (выбор).
- Показать ближайшие рестораны
- Показать ближайшие парки
- Показать ближайшие театры
- Показать ближайшие музеи
- Показать всё
- Назад
На кнопки "Показать ..." переходим в окно рекомендаций. На кнопку "Назад" переходим в окно 1.
Окно рекомендаций.
- Карточка 1 Нравится / Не нравится
- Карточка 2 Нравится / Не нравится ...
- Карточка N Нравится / Не нравится
- Далее
- Назад
На кнопку "Далее" показывается ещё N карточек. На кнопку "Назад" переходим в окно 2.
UX
Рекомендательная система имеет долговременную память, привязанную к идентификатору пользователя. Пример долговременной памяти: запоминаем понравившиеся рестораны и в последующих сессиях рекоммендуем похожие.
Рекоммендации должны быть разнообразными по расположению относительно пользователя. За это отвечает специальный алгоритм Диего замещения плоскости относительно центральной точки. Алгоритм Диего устроен таким образом, что в пачке из пяти рекоммендаций всегда будет представлен ближайший из релевантных объектов.
Backend
Рекомендации разбиваются на несколько условно параллельных вертикалей, каждая из которых составляет список релевантных объектов (пример - "рестораны", "театры", "парки"). Основная логика набора рекомандаций общая, но должна быть определённая степень свободы внутри каждой вертикали. Пример: для ресторанов смотрим на время работы, у театров - на время спектаклей.
В UI должен быть выбор - рекоммендуй мне что-то конкретное (прим. только рестораны), или рекоммендуй мне всё подряд. Во втором случае замешиваем ответы с каждой вертикали. Например, отправляем пачку из 1 рекомендации с каждой вертикали, замешанную по порядку, или учитываем интересы пользователя и строим квотированную пачку (прим. 10% парки, 30% театры, 60% рестораны, размер пачки можно поднять до 20).
Построение базы данных
Выделенный класс с методами, которые ходят в базу данных и собирают полный список заведений города. Затем результат кладётся в оперативную память. Финальный шаг процедуры - обновление актуальной версии, после чего рекоммендер читает из него.