Extracción de campos relevantes de reservas de viajes
core: pipeline de extracción que recibe un .EML y retorna los campos relevantes (Stanford NLP)server: aplicación web que permite arrastrar un .EML, dispara el pipeline de core y permite ver los resultados (Spring Boot + Spring Security)client: frontend web estático (Thymeleaf)enricher: repositorios de CSV en memoria para obtener más información a partir de un código de aeropuerto o de aerolínearecommender: recomendador de POIs para las ciudades destino del itinerario, usando un LLM local (Spring AI + Ollama + gemma4) Por el momento solo recomienda nombres de POIs. Se intentó pedir además las coordenadas pero alucina.api: entidades del modelo compartidas por los móduloscommon: utilidades comunes como la lectura de un csv usada tanto para la creación de reglas NLP (core) y para los repositorios de CSV (enricher)
Para hacer deploy la webapp es necesario ejecutar el módulo server:
./mvnw -pl server -am spring-boot:runPara hacer deploy de la webapp es necesario ejecutar compose
docker compose build --no-cache webapp
docker compose up --buildEl compose queda preparado para desarrollo local con:
SPRING_AI_MODEL_CHAT=ollama- Ollama local en Docker
APP_AUTH_REGISTRATION_ENABLED=true
Para detener la webapp:
docker compose downPara destruir el volumen creado, usar el flag -v
docker compose down -vPara deploy en Azure no se usa el contenedor de Ollama. En ese entorno la app se configura con:
SPRING_AI_MODEL_CHAT=openai- endpoint OpenAI-compatible de
Ollama Cloud APP_AUTH_REGISTRATION_ENABLED=false
El paso a paso utilizando Terraform se encuentra en infra/terraform/azure-container-apps
-
- https://jsoup.org
- HTML -> Texto
-
- https://www.simplejavamail.org
- .eml -> HTML
-
- https://stanfordnlp.github.io/CoreNLP/
- Pipeline
- https://stanfordnlp.github.io/CoreNLP/pipeline.html
- Tokenization
- Sentence Splitting
- Parts Of Speech
- Lemmatization
- Named Entity Recognition
- SUTime
- Tokens Regex NER
- Tokens Regex
-
- https://spring.io/projects/spring-ai
- Se usa la versión 2.0.0-M3 (PRE) para lograr compatibilidad con Spring Boot 4
-
- https://www.mediawiki.org/wiki/API:Action_API
- Para las imágenes de las ciudades destino en My Trips
-
- https://nominatim.org/release-docs/develop/api/Overview/
- Para obtener las coordenadas de los POIs de las recomendaciones a partir de un nombre, ciudad y país
Para copiar los archivos .eml necesarios del repositorio local DVC del dataset ejecutar el siguiente comando
dvc get ../dataset data/raw/flight_001.eml -o src/main/resources/mail/flight_001.eml./mvnw clean packagePara ejecutar el test TripRecommendationServiceIntegrationTest directamente desde IntelliJ es necesario tener Ollama corriendo en la máquina local, escuchando en http://localhost:11434.
Instalación y preparación en macOS:
brew install ollama
ollama serveEn otra terminal:
ollama pull gemma4:e4bAhora al listar los modelos se debe ver en la salida
ollama listLa configuración del test requiere definir esta variable de entorno en la Run Configuration de IntelliJ:
RUN_OLLAMA_TESTS=truePara acceder a la documentación autogenerada de la API web se puede acceder a la ruta http://localhost:8080/swagger-ui/index.html#/
- Se realiza un "warmup" del pipeline NLP al inciar
serverpara evitar que el primer procesamiento del usuario implique la inicialización del pipeline de Stanford NLP.