Comment intégrer les systèmes existants pour des cas d’usages data & IA ?

Quentin Marc
Ingénieur & Co-fondateur Loop Crew

La performance d’une solution data & IA repose avant tout sur la qualité des données. Bien que les entreprises disposent d’une mine d’informations à travers leurs logiciels et documentations internes, ces données restent souvent difficiles d’accès.

Comment tirer parti des systèmes existants pour déployer efficacement des cas d’usage data & IA ?

De quels systèmes parles-t’on ?

Systèmes d'information opérationnels

  • Progiciels de Gestion Intégrés (PGI/ERP) qui centralisent les données de gestion de l'entreprise
  • Systèmes de Gestion de la Relation Client (CRM) contenant les données clients et interactions commerciales
  • Système d'Information Commerciale (SIC) qui mesure l'impact des actions commerciales
  • Applications métiers développées en interne ou achetées à des éditeurs

Infrastructures de stockage

  • Bases de données relationnelles ou non-relationnelles contenant les informations structurées
  • Entrepôts de données (Data Warehouses) centralisant les données pour l'analyse
  • Data Lakes stockant des données brutes à grande échelle
  • Serveurs physiques ou virtualisés hébergeant les applications et données

Fichiers et documents

  • Documents bureautiques (tableaux financiers, listes d'employés, plans d'implantation)
  • Fichiers structurés et non structurés stockés sur les serveurs de l'entreprise

Dispositifs connectés

  • Objets connectés (IoT) générant des données en temps réel
  • Capteurs et équipements industriels produisant des données opérationnelles

Ressources web

  • Sites web de l'entreprise collectant des données d'interaction
  • Applications cloud utilisées par l'entreprise
  • API permettant l'accès à des services tiers

Comment extraire la donnée de ces systèmes ?

Il existe autant d’implémentations techniques que d’interfaces, mais la méthodologie générale reste la même. Elle repose sur le principe de l'ETL : Extract, Transform, Load.

Plongeons dans chaque étape avec des exemples concrets.

Extract

L’extraction des données peut rapidement devenir complexe, notamment lorsqu’il s’agit de récupérer des informations non structurées.

Extraire des données non structurées sur le web

Imaginons que nous souhaitions automatiser la récupération des informations publiques d’un texte de loi mis à jour trimestriellement sur une page web.

Code des sociétés et des associations Belge.

L’approche traditionnelle : le scraping

Historiquement, le web scraping est la méthode privilégiée. Elle consiste à coder un robot qui explore les pages web, extrait les informations pertinentes et les stocke dans une base de données. Cette approche est déterministe : si le scraping est bien conçu, il garantit des résultats fiables. Des outils comme Beautiful Soup facilitent cette tâche.

Cependant, cette méthode est fragile : la moindre modification dans la structure du site peut casser le processus. De plus, développer un algorithme de scraping peut être chronophage, en particulier pour des cas complexes.

import requests
from bs4 import BeautifulSoup

url = "https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&sum_date=&pd_search=2019-04-04&numac_search=2019A40586&page=1&lg_txt=F&caller=list&2019A40586=0&trier=promulgation&view_numac=2022b30600fx1804032130fr&dt=CODE+DES+SOCIETES+ET+DES+ASSOCIATIONS&fr=f&choix1=ET#LNK0001"

try:
    response = requests.get(url)
    response.raise_for_status()  # Lève une exception pour les codes d'erreur HTTP
    soup = BeautifulSoup(response.content, 'html.parser')

    # Extraire le titre
    titre = soup.find('font', {'size': '+1'}).text.strip() if soup.find('font', {'size': '+1'}) else "Titre non trouvé"
    print(f"Titre: {titre}\n")

    # Extraire les informations de la publication
    numero = soup.find('b', text='Numéro:').next_sibling.strip() if soup.find('b', text='Numéro:') else "Numéro non trouvé"
    publication = soup.find('b', text='Publication:').next_sibling.strip() if soup.find('b', text='Publication:') else "Publication non trouvée"
    source = soup.find('b', text='Source:').next_sibling.strip() if soup.find('b', text='Source:') else "Source non trouvée"

    print("Informations de Publication:")
    print(f"  Numéro: {numero}")
    print(f"  Publication: {publication}")
    print(f"  Source: {source}\n")

    # Extraire la table des matières
    table_des_matieres_header = soup.find('font', {'size': '+1'}, text='Table des matières')
    if table_des_matieres_header:
        table_des_matieres_div = table_des_matieres_header.find_parent('div')
        if table_des_matieres_div:
            # Extraire tous les liens dans la table des matières
            liens_table_des_matieres = table_des_matieres_div.find_all('a')
            print("Table des matières:")
            for lien in liens_table_des_matieres:
                print(f"  {lien.text.strip()}")
        else:
            print("  Table des matières non trouvée")
    else:
        print("Table des matières non trouvée")

except requests.exceptions.RequestException as e:
    print(f"Erreur de requête: {e}")
except Exception as e:
    print(f"Une erreur est survenue: {e}")


L’approche moderne : les LLM

Les modèles de langage avancés (LLM) offrent une alternative flexible et rapide. Des solutions comme Firecrawl permettent d’extraire des données sans nécessiter de développement spécifique à chaque site.

from firecrawl import FirecrawlApp
from dotenv import load_dotenv
import os

# Charger la clé API depuis un fichier .env
load_dotenv()
api_key = os.getenv("FIRECRAWL_API_KEY")

# Initialiser l'application Firecrawl avec la clé API
app = FirecrawlApp(api_key=api_key)

# URL cible
url = "https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&sum_date=&pd_search=2019-04-04&numac_search=2019A40586&page=1&lg_txt=F&caller=list&2019A40586=0&trier=promulgation&view_numac=2022b30600fx1804032130fr&dt=CODE+DES+SOCIETES+ET+DES+ASSOCIATIONS&fr=f&choix1=ET#LNK0001"

# Scraper le contenu de la page
try:
    scrape_result = app.scrape_url(
        url,
        {
            "formats": ["markdown", "html", "json"],  # Formats souhaités pour les résultats
            "includeTags": ["h1", "p", "a"],          # Inclure uniquement certains éléments HTML
            "excludeTags": ["#ad", "#footer"],        # Exclure certains éléments HTML
            "waitFor": 2000,                          # Attendre 2 secondes pour le chargement complet de la page
            "timeout": 15000                          # Temps maximum d'attente : 15 secondes
        }
    )

    # Afficher les résultats
    print("Titre de la page :", scrape_result["metadata"]["title"])
    print("\nContenu Markdown :\n", scrape_result["data"]["markdown"])
    print("\nContenu HTML brut :\n", scrape_result["data"]["html"])

except Exception as e:
    print(f"Une erreur est survenue : {e}")


Toutefois, cette approche est non déterministe, ce qui peut poser problème dans des contextes réglementés comme les textes de loi, où la moindre altération est illégale.

Extraire des données non structurées depuis un PDF, un graphique ou un tableau

90 % des documents dans le monde sont au format PDF, ce qui en fait un véritable défi pour l’extraction de données.

L’approche classique : l’OCR

L’Optical Character Recognition (OCR) est la méthode la plus utilisée. Elle convertit des images contenant du texte en données exploitables via un processus en trois étapes :

  1. Pré-traitement (nettoyage de l’image)
  2. Analyse algorithmique (ex. : Matrix Matching)
  3. Post-traitement (correction des erreurs)

Les avancées en intelligence artificielle ont considérablement amélioré l’OCR, notamment grâce aux LLM.

L’OCR nouvelle génération : Mistral

Google ou d’autres grands acteurs proposent un service d’OCR pouvant être appelé par des services sur mesure.

Mistral a aussi récemment introduit une solution très performante et économique : 1000 pages pour 1 €, sans réutilisation des données. Cette technologie peut être déployée en interne pour des besoins très sécurisés.

import { Mistral } from '@mistralai/mistralai';

const apiKey = process.env.MISTRAL_API_KEY;
const client = new Mistral({apiKey: apiKey});

const ocrResponse = await client.ocr.process({
    model: "mistral-ocr-latest",
    document: {
        type: "document_url",
        documentUrl: "https://arxiv.org/pdf/2201.04234"
    },
    include_image_base64: true
});


Grâce à ces nouvelles approches, l’extraction de données devient plus rapide, plus précise et beaucoup moins coûteuse, ouvrant la voie à des cas d’usage jusqu’alors inaccessibles.

Exemple de résultat à partir d’un PDF de recherche en mathématiques.

Extraire des données structurées depuis un logiciel métier

Un cas d’usage fréquent consiste à récupérer des données depuis un progiciel utilisé en interne.

Connexion via API : un standard pour l’intégration

Prenons l’exemple d’un CRM contenant tous les contrats d’une entreprise. Pour accéder à ces documents, l’approche privilégiée repose sur les API mises à disposition par les éditeurs de logiciels. Ces interfaces standardisées permettent d’interagir avec le modèle de données du logiciel métier.

La plupart des solutions SaaS intègrent ce type d’API pour faciliter leur intégration dans un système d’information (SI).

Mise en place de l’accès aux données

  1. Création d’une clé d’authentification depuis le tableau de bord du CRM.
  2. Intégration de cette clé dans la solution développée pour qu’elle puisse s’authentifier et récupérer les données souhaitées (ici, les contrats).
  3. Stockage et traitement des contrats dans une base de données, selon les besoins métier.

Cas d’usage concret : automatisation de l’analyse des marges

Imaginons une entreprise de portage salarial dont les contrats définissent les marges prélevées. Grâce à une connexion API, chaque nouveau contrat peut être automatiquement récupéré et stocké dans une base de données vectorielle.

Cela ouvre la porte à des requêtes en langage naturel, comme :

👉 « Quelle est la marge réalisée sur le marché français en 2024 ? »

Grâce à cette approche, les équipes peuvent interagir avec leurs données de manière intuitive et instantanée, sans manipulation manuelle fastidieuse.

MCP : une nouvelle approche pour l’interconnexion des services

En 2024, une nouvelle famille d’interfaces a émergé avec le MCP (Model-Callable Protocol). Ce protocole, standardisé par Anthropic, permet aux LLM d’interagir directement avec divers services de manière simple et intuitive.

Un cas d’usage concret

Imaginez que vous veniez d’enregistrer une réunion. Plutôt que de traiter manuellement son compte rendu, il est désormais possible de demander à une IA de générer automatiquement un Google Doc avec le résumé structuré de la discussion.

Grâce au MCP, les IA ne se contentent plus d’analyser des données : elles peuvent agir directement sur les outils métier, ouvrant ainsi la voie à des workflows plus fluides et automatisés.

Transform : préparer les données pour une exploitation efficace

Une fois les données extraites, il est essentiel de les préparer avant leur utilisation. L’objectif de cette étape est double : réduire les coûts de stockage et optimiser les performances d’analyse.

Un processus clé pour structurer les données

La transformation suit un schéma simple :

👉 Une source de donnéesUn script de transformationUne destination

Prenons un exemple concret :

Nous récupérons plusieurs gigaoctets de données contractuelles depuis un CRM Salesforce. Or, 80 % des informations sont inutiles pour notre cas d’usage. En appliquant un filtre avant le stockage dans un data lake Snowflake, nous réduisons significativement les coûts et améliorons l’efficacité des requêtes.

Des transformations simples aux cas complexes

La transformation peut répondre à des besoins variés :

  • Nettoyage des données : suppression des doublons, correction des incohérences
  • Changement de format : conversion d’unités, standardisation des valeurs
  • Création de liens entre données : interconnexion entre documents et contextes métiers
  • Chiffrement des données sensibles : sécurisation des informations confidentielles

Un exemple avancé : le cas de GraphRAG

Lorsqu’il s’agit de relier des données entre elles, la transformation prend une dimension stratégique. Dans notre exemple de CRM, il peut être pertinent de lier automatiquement les contrats avec les marchés adressés et leur date d’entrée en vigueur, facilitant ainsi l’analyse dans un modèle GraphRAG.

Des outils pour accélérer la mise en place

Des solutions comme Airbyte permettent d’accélérer l’intégration de données issues de sources standardisées comme Salesforce.

Cependant, pour des cas d’usage plus complexes ou spécifiques, le développement de scripts sur-mesure devient indispensable.

Load : rendre les données exploitables

Dernière étape clé du pipeline ETL, le chargement consiste à stocker les données transformées dans un environnement adapté à leur exploitation. Deux questions majeures se posent :

  1. Où stocker les données ?
  2. À quelle fréquence les mettre à jour ?

Où ingérer les données ?

Le choix du stockage dépend du cas d’usage :

  • Data lake : idéal pour gérer de grands volumes de données brutes, variées et non structurées.
  • Base relationnelle : parfaite pour des applications nécessitant une structure claire et fiable (ex. : bases SQL).
  • Base vectorielle : recommandée pour l’IA générative et la recherche par similarité.
  • Base graphe : essentielle pour modéliser des relations complexes entre entités.
  • Hypercube : incontournable pour des analyses multidimensionnelles avancées.

Quelle fréquence de gestion ?

Une fois la destination définie, il faut choisir le rythme de mise à jour :

  • Mise à jour périodique (toutes les 15 min, toutes les nuits…) → gérée par un système de cron.
  • Un script s’exécute à intervalles réguliers pour mettre à jour les données.
  • Traitement en temps réel (streaming) → géré par Apache Kafka.Kafka fonctionne comme un réseau scalable d’événements :
    • Des serveurs collectent en continu des données en provenance de capteurs ou d’applications.
    • Ces données sont placées dans des files d’attente priorisées.
    • D’autres serveurs récupèrent et traitent ces événements immédiatement.

Grâce à cette architecture massivement scalable, il est possible d’adapter dynamiquement la charge selon les besoins métiers.

Conclusion

L’extraction, la transformation et le chargement des données (ETL) sont des étapes fondamentales pour exploiter efficacement les données dans des projets data & IA. La qualité des insights obtenus dépend directement de la capacité à structurer un pipeline robuste, adapté aux besoins métiers et aux contraintes techniques.

Grâce aux avancées technologiques, des solutions comme les LLM, Airbyte ou Kafka permettent aujourd’hui d’automatiser et d’optimiser ces processus, rendant l’analyse des données plus accessible et performante.

En maîtrisant ces fondamentaux, les entreprises peuvent valoriser leurs données, réduire les coûts et prendre des décisions plus stratégiques, ouvrant ainsi la voie à de nouvelles opportunités d’innovation.

Recevez les nouveaux articles par mail

2 articles par mois sur l'innovation au coeur de votre entreprise : Tech, IA, Automatisation.

En vous inscrivant, vous confirmez être d'accord avec nos CGU.
Merci, votre inscription a été enregistrée.
Oops! Une erreur est survenue, veuillez réessayer.