pse2_ff/project/backend/validate-service
Jaronim Pracht df5ac605c2 Add validate service with entity merging and validation
Implements a Flask microservice that receives entities from SpaCy and
Exxeta services, merges them based on normalized text matching, and
forwards validated results to coordinator. Also updates gunicorn
configuration with timeout and worker settings.
2025-05-30 13:44:13 +02:00
..
.env.template Add validate service with entity merging and validation 2025-05-30 13:44:13 +02:00
README.md Add validate service with entity merging and validation 2025-05-30 13:44:13 +02:00
app.py Add validate service with entity merging and validation 2025-05-30 13:44:13 +02:00
merge_logic.py Add validate service with entity merging and validation 2025-05-30 13:44:13 +02:00
requirements.txt Add validate service with entity merging and validation 2025-05-30 13:44:13 +02:00
validate_logic.py Add validate service with entity merging and validation 2025-05-30 13:44:13 +02:00

README.md

Validate Service

Ein Flask-basierter Microservice zur asynchronen Verarbeitung und Validierung von Entitäten aus zwei verschiedenen NLP-Services (SpaCy und Exxeta).

Funktionsweise

Das Service empfängt für jede eindeutige ID zwei POST-Requests von verschiedenen Services:

  1. SpaCy Service - sendet extrahierte Entitäten
  2. Exxeta Service - sendet extrahierte Entitäten

Beim ersten Request werden die Daten zwischengespeichert. Beim zweiten Request startet die asynchrone Verarbeitung. Nach der Verarbeitung werden die Ergebnisse an einen nachgelagerten Service weitergeleitet.

API Endpoints

POST /validate

Empfängt Entitätsdaten von SpaCy oder Exxeta Services.

Request Body:

{
  "id": "pitch_book_id",
  "service": "spacy|exxeta",
  "entities": [
    {
      "label": "PERSON",
      "entity": "Max Mustermann",
      "page": 1
    }
  ]
}

Response:

  • 200: Daten erfolgreich verarbeitet
  • 400: Fehlende oder ungültige Parameter
  • 500: Serverfehler

Installation und Start

  1. Abhängigkeiten installieren:
pip install -r requirements.txt
  1. Service starten:
python app.py

Das Service läuft standardmäßig auf http://localhost:5050

Konfiguration

Umgebungsvariablen in config.py:

  • COORDINATOR_URL: URL des Koordinators

Verarbeitungslogik

  1. Zwischenspeicherung: Beim ersten Request wird das JSON in einem Thread-sicheren Dictionary gespeichert
  2. Trigger: Beim zweiten Request wird die asynchrone Verarbeitung gestartet
  3. Merge & Validate: Die merge_and_validate_entities Funktion führt die Validierung durch:
    • Normalisiert Entitäten (entfernt Zeilenumbrüche, konvertiert zu lowercase)
    • Matched Entitäten basierend auf Label, normalisiertem Text und Seitenzahl
    • Kennzeichnet Entitäten als "validated" (beide Services) oder "single-source"
  4. Weiterleitung: Ergebnisse werden an den nächsten Service gesendet
  5. Cleanup: Verarbeitete Daten werden aus dem Speicher entfernt

Architektur

┌─────────────────┐    ┌─────────────────┐
│   SpaCy Service │    │  Exxeta Service │
└─────────┬───────┘    └─────────┬───────┘
          │                      │
          │ POST /validate       │ POST /validate
          │ (service_type:spacy) │ (service_type:exxeta)
          ▼                      ▼
    ┌─────────────────────────────────────┐
    │         Validate Service            │
    │  ┌─────────────────────────────┐    │
    │  │     Zwischenspeicher        │    │
    │  │   (Thread-safe Dictionary)  │    │
    │  └─────────────────────────────┘    │
    │  ┌─────────────────────────────┐    │
    │  │   Asynchrone Verarbeitung   │    │
    │  │  (merge_and_validate_entities)│  │
    │  └─────────────────────────────┘    │
    └─────────────┬───────────────────────┘
                  │
                  │ POST (processed data)
                  ▼
    ┌─────────────────────────────┐
    │     Nachgelagerter Service  │
    └─────────────────────────────┘