Este repositório contém o código e a documentação do Projeto de Conclusão "Sistema de Recomendação de Restaurantes por Filtragem Baseada em Conteúdo com Análise de Sentimentos", apresentado ao Programa de Especialização em Data Science e Big Data da Universidade Federal do Paraná (UFPR).
Você pode testar a aplicação diretamente na Streamlit Community Cloud:
Este projeto implementa um sistema de recomendação de restaurantes com base em filtragem baseada em conteúdo, enriquecido por uma análise de sentimentos aplicada às avaliações textuais dos usuários. O objetivo é oferecer sugestões personalizadas que conciliem relevância, reputação e diversidade.
Os dados utilizados abrangem 2.181 restaurantes de Curitiba, coletados via APIs públicas do Google Maps e TripAdvisor. As recomendações são pré-processadas e armazenadas em formato .parquet, otimizando a velocidade da aplicação web desenvolvida com Streamlit.
Desenvolvido por Diógenes Antonio Falcade Pereira, com orientação do Prof. Marcos A. Zanata Alves.
- 🔍 Recomendações por Similaridade: Sugestões personalizadas com base em um escore ponderado entre similaridade, avaliação geral e sentimento.
- 💬 Análise de Sentimentos: Classificação automática (positivo, neutro ou negativo) das avaliações com um modelo leve (LLM Ollama 3.2 1B).
- 🌟 Sugestões Adicionais para Descoberta:
- Dois restaurantes populares, aleatórios entre os 100 melhores.
- Uma "joia escondida": restaurante com menos de 100 avaliações, sentimento positivo e alta similaridade.
- ⚡ Interface Rápida e Intuitiva: Desenvolvida com Streamlit, com carregamento em cache.
- 🚀 Desempenho Otimizado: Tempo de resposta inferior a 1 segundo, graças ao pré-processamento.
O sistema foi dividido em duas etapas principais: processamento offline intensivo e interface web leve.
- APIs: Google Maps Places e TripAdvisor
- Período: janeiro–fevereiro de 2025
- Armazenamento em banco PostgreSQL
- Mais de 24 mil comentários classificados com Ollama 3.2 1B (local)
- Métrica:
score de sentimento = %positivas - %negativas
- Variáveis categóricas transformadas → ~154 atributos
- Redução de dimensionalidade com PCA (preservando 95% da variância)
- Métrica de similaridade: distância do cosseno
- Fatores para o ranking final:
- 70% Similaridade
- 20% Nota média
- 10% Score de sentimento
- Recomendações calculadas offline
- Exportadas para
.parquetpara leitura eficiente com Pandas
- Construída com Streamlit
- Carrega os dados em cache (sem recomputação online)
| Camada | Ferramentas |
|---|---|
| Linguagem | Python 3.11 |
| Dados | Pandas, Scikit-learn, SQLAlchemy |
| Interface | Streamlit |
| Banco de Dados | PostgreSQL |
| Coleta de Dados | APIs do Google Maps e TripAdvisor |
| NLP | Ollama 3.2 1B (LLM local para análise de sentimentos) |
Fluxograma do sistema, conforme Figura 1 do documento técnico.
git clone https://github.com/diogenesfalcade/RestaurantRecommender
cd RestaurantRecommenderpython -m venv pyvenv
# Windows
.\venv\Scripts\activate
# macOS/Linux
source venv/bin/activatepip install -r requirements.txtstreamlit run app.py
