Béranger THOMAS

SmartWatch

Un pipeline de données automatisé pour la Métropole de Lyon qui récupère, extrait et compare les horaires d'ouverture des établissements publics grâce à un filtrage sémantique et des modèles de langage.

Fiche technique
Statut Stable Date de sortie 2025-06-03 Catégorie NLP & RAG Langage Python 3.13+ Stack Playwright · Inscriptis · Polars · FastEmbed · Devstral · SQLAlchemy · CodeCarbon Licence MIT

Contexte

Développé pour la Métropole de Lyon, SmartWatch est un système automatisé de traitement de données qui surveille et met à jour les horaires d’ouverture des établissements publics (tels que les mairies, les piscines et les médiathèques) sur le portail open data data.grandlyon.com. Auparavant, ce processus de vérification était effectué manuellement par les agents de la Métropole qui devaient inspecter individuellement et transcrire les horaires de près de 200 sites web différents.

Objectif

Les sites web des communes présentent leurs horaires d’ouverture sous des formes variées : mises en page diverses, structures de tableaux hétérogènes et expressions en langage naturel. Les extracteurs de données (scrapers) classiques basés sur des règles échouent dès que la structure des pages change, tandis que la récupération manuelle d’informations sur 200 sites web s’avère fastidieuse et chronophage. Le défi principal consiste à concevoir un système automatisé et robuste, capable de traiter n’importe quelle page web, d’isoler les informations relatives aux horaires et de convertir fidèlement ces descriptions textuelles dans un format standardisé sans intervention humaine, tout en évitant les hallucinations (les réponses fausses ou erronées générées par un modèle de langage) et en garantissant une sortie structurée et univoque.

Démarche

SmartWatch relève ce défi en orchestrant un pipeline de données structuré, découpé en cinq étapes séquentielles :

  1. Scraping Web : le pipeline utilise Playwright (une bibliothèque d’automatisation de navigateur) associée à des en-têtes anti-détection pour récupérer de manière programmatique le code HTML brut des pages web municipales ciblées.
  2. Normalisation du Texte : le code HTML brut est converti en texte propre à l’aide de la bibliothèque Inscriptis, qui élimine les balises de mise en forme, les styles et les scripts afin d’isoler uniquement le contenu textuel.
  3. Filtrage Sémantique : afin d’optimiser la vitesse de traitement et réduire les ressources de calcul nécessaires, le texte normalisé est découpé en segments (chunks). Le système calcule ensuite des plongements lexicaux sémantiques ou embeddings (représentations vectorielles du texte capturant son sens sémantique) via Jina embeddings, et applique un calcul de similarité avec des termes représentatifs des horaires d’ouverture pour ne conserver que les segments pertinents.
  4. Extraction d’Informations Structurées : les segments isolés sont transmis à un grand modèle de langage ou LLM souverain. La requête est encadrée par un schéma JSON strict afin de contraindre le modèle à structurer les horaires selon un format prédéfini, éliminant ainsi toute dérive de formatage.
  5. Standardisation des Données : l’objet JSON extrait est converti vers le format d’horaires d’ouverture d’OpenStreetMap (OSM) grâce à des utilitaires de conversion personnalisés, permettant une comparaison directe avec les données existantes sur le portail.

Caractéristiques

Impact