Guide

Statut éditorial : En attente de relecture

Nettoyer et structurer des données textuelles pour l’IA

Construire un pipeline reproductible de normalisation, déduplication, filtrage, métadonnées et validation pour un corpus destiné à l’IA.

Classification du contenu

Types

  • Données et Machine Learning
Niveau
Intermédiaire
Publié le
24 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
24 octobre 2026

Pourquoi ce sujet est important

La qualité d’un système RAG, d’une évaluation ou d’un fine-tuning dépend directement du corpus. “Nettoyer” ne signifie pas uniformiser aveuglément : il faut retirer le bruit sans détruire les informations utiles, conserver la provenance et rendre chaque transformation reproductible.

Conserver une source brute immuable

Stockez les fichiers reçus avec identifiant, hash, date, source et droits. Ne corrigez jamais le brut en place. Chaque version nettoyée doit pouvoir être reconstruite à partir du brut, du code et d’une configuration versionnée. Cette séparation facilite audit, correction d’un bug et suppression.

Détecter formats et encodages

Validez taille, type MIME et structure avant lecture. Normalisez l’encodage vers UTF-8, mais journalisez les conversions et les caractères invalides. Retirez caractères de contrôle non pertinents, HTML résiduel et espaces accidentels sans casser paragraphes, tableaux, code ou ponctuation.

Normaliser avec prudence

Uniformisez les fins de ligne, espaces et représentations Unicode lorsque cela sert la tâche. Ne mettez pas systématiquement en minuscules et ne supprimez pas toute ponctuation : noms propres, code, références et structure en dépendent. Appliquez des règles distinctes selon texte courant, code, OCR et tableaux.

Dédupliquer

Commencez par un hash exact après une normalisation minimale. Ajoutez ensuite une méthode approchée pour détecter copier-coller, versions et pages quasi identiques. Définissez la politique : conserver la version la plus récente, regrouper les versions ou garder l’historique. Évitez qu’un même document apparaisse dans entraînement et test.

Détecter données sensibles et secrets

Utilisez règles, détecteurs et revue échantillonnée. Catégorisez le résultat plutôt que de supprimer aveuglément. Masquez ou excluez selon finalité, base légale et risque. Les secrets techniques doivent être retirés avant tout partage, entraînement ou indexation.

Ajouter des métadonnées utiles

Conservez provenance, licence, langue, date, auteur, type, transformations, motif d’exclusion, version et classification. Pour un RAG, ajoutez document, section et position. Les métadonnées doivent permettre filtre, suppression, audit et reconstruction.

Mesurer la qualité

Suivez taux de documents vides, caractères invalides, doublons, PII, langues, longueurs et champs manquants. Comparez distributions avant et après. Inspectez des échantillons aléatoires et des cas limites. Ajoutez des tests unitaires sur les règles critiques.

Exemple concret

Un corpus de tickets contient signatures répétées, HTML, numéros de client et solutions dupliquées. Le pipeline conserve le ticket brut, extrait le texte, retire les signatures identifiées, pseudonymise les numéros, regroupe les doublons et ajoute produit, date et langue. Un rapport montre ce qui a été supprimé et dix exemples avant/après.

Les erreurs fréquentes

Checklist

FAQ

Faut-il supprimer les stop words ?

Rarement pour les LLM et embeddings modernes. Ils contribuent au sens et à la syntaxe.

Comment traiter l’OCR ?

Conservez texte et coordonnées si utiles, mesurez le taux d’erreur et appliquez des règles spécifiques aux documents scannés.

Quel format de sortie choisir ?

Parquet ou JSONL conviennent souvent. Le schéma, la version et la provenance comptent davantage que le format seul.

Comment éviter les fuites entre splits ?

Regroupez par document, auteur, client ou période avant la séparation et contrôlez les quasi-doublons entre ensembles.

Pipeline déterministe et traçable

~~~python import hashlib import re import unicodedata

def normalize(text: str) -> dict: original_hash = hashlib.sha256(text.encode()).hexdigest() value = unicodedata.normalize("NFC", text) value = value.replace("\r\n", "\n") value = re.sub(r"[ \t]+", " ", value) value = re.sub(r"\n{3,}", "\n\n", value).strip() return { "text": value, "source_hash": original_hash, "cleaning_version": "v3", } ~~~

Ne supprimez pas aveuglément ponctuation, accents, code ou retours de ligne : ils portent souvent du sens. Conservez la source brute de façon contrôlée, le hash et la version du pipeline. Détectez langue, encodage, documents vides et anomalies avant l’indexation. Testez la transformation sur tableaux, listes, Unicode, HTML, code et textes multilingues, puis mesurez son effet réel sur retrieval ou entraînement.

Sources utilisées