Knowledge Bases

Intégration de fichiers hérités dans les bases de connaissances modernes

Alors que les organisations passent à des systèmes de connaissances pilotés par l'IA, le défi ne se limite pas à la construction du pipeline RAG ; il s'agit de gérer les données que vous possédez déjà. Des millions d'enregistrements institutionnels résident dans des formats obsolètes : fichiers Outlook MSG, e-mails EML autonomes et documents Word 97-2003. Ces fichiers contiennent des données non structurées et bruitées qui cassent les pipelines d'ingestion standard. Ce guide explore les stratégies pour assainir, analyser et structurer ce contenu hérité pour les magasins de vecteurs modernes.

Pourquoi les formats hérités cassent les pipelines

Les bases de données vectorielles modernes s'attendent à du texte propre et sémantique. Les formats hérités introduisent trois types de bruit :

  • Gonflement des métadonnées : Les fichiers MSG contiennent des en-têtes binaires et des propriétés MAPI qui obscurcissent le contenu réel.
  • Complexité structurelle : Les fichiers EML mélangent en-têtes, corps encodés en base64 et pièces jointes dans un seul flux.
  • Artéfacts de mise en forme : Les anciens documents Word (.doc) reposent sur des fichiers composites OLE, ce qui entraîne souvent du texte illisible lors d'une extraction naïve.

Prise en charge des e-mails EML et MSG

L'e-mail est une donnée à forte valeur ajoutée mais au format de faible qualité. L'objectif est d'extraire le corps et les métadonnées clés (expéditeur, date) tout en supprimant les balises HTML et le bruit base64.

Pour les fichiers EML, la bibliothèque email de Python est la norme. Pour les MSG, vous avez besoin d'outils spécialisés comme extract-msg.


import email
from email import policy
import extract_msg

def process_eml(filepath):
    with open(filepath, 'rb') as f:
        msg = email.message_from_binary_file(f, policy=policy.default)
    
    # Extraire le corps en texte brut
    body_part = msg.get_body(preferencelist=('plain', 'html'))
    text = body_part.get_content() if body_part else ""
    
    # Nettoyer le HTML si le corps est en texte riche
    import re
    text = re.sub(r'<[^>]+>', '', text)
    
    return {
        'subject': msg['subject'],
        'sender': msg['from'],
        'date': msg['date'],
        'content': text.strip()
    }

def process_msg(filepath):
    with extract_msg.Message(filepath) as msg:
        return {
            'subject': msg.subject,
            'sender': msg.sender,
            'date': str(msg.date),
            'content': msg.body
        }

Gestion des anciens documents Word (.doc)

Contrairement à .docx (qui est une archive zip de XML), .doc est un format binaire OLE2. La conversion de ces fichiers nécessite un moteur de conversion sans interface graphique ou un analyseur spécialisé.

La stratégie la plus fiable consiste à convertir d'abord .doc en .docx ou .txt à l'aide de LibreOffice en mode sans interface graphique, puis à analyser le résultat. Cela normalise la source de données.


# Script shell pour convertir .doc en .txt via LibreOffice
# Entrée : /data/legacy/docs
# Sortie : /data/processed/txt

libreoffice --headless --convert-to txt --outdir /data/processed/txt /data/legacy/docs/*.doc

Une fois converti en texte brut, vous pouvez appliquer le fractionnement NLP standard. Évitez d'utiliser des heuristiques brutes de conversion PDF-vers-texte sur les anciens documents Word, car elles manquent souvent le contexte de mise en page et produisent des phrases fragmentées qui dégradent la qualité des embeddings.

Stratégie de fractionnement pour les données bruitées

Les documents hérités ont souvent des structures de titres incohérentes. Le fractionnement de taille fixe (par exemple, 500 jetons) divisera fréquemment les phrases ou séparera les en-têtes de leur contenu.

Utilisez le fractionnement conscient de la structure :

  1. Identifier les en-têtes (majuscules, gras ou motifs de numérotation spécifiques).
  2. Regrouper le contenu sous l'en-tête le plus récent.
  3. Si un groupe dépasse la limite maximale de jetons, le diviser uniquement aux limites de paragraphes.

Conclusion

L'ingestion de formats hérités est une tâche d'hygiène des données, et non simplement une tâche d'analyse. En normalisant les métadonnées EML/MSG et en convertissant les documents Word basés sur OLE en texte propre, vous améliorez considérablement la qualité sémantique de vos embeddings. Prototyperez toujours le pipeline d'analyse sur un petit échantillon diversifié de votre archive héritée réelle avant de passer à l'échelle de l'ensemble du jeu de données.

Share: