Aller au contenu principal

Stratégies de découpage de texte

Mis à jour le 30 juillet 2026

Premier chantier du RAG : le découpage. C’est une étape critique du pipeline, et souvent sous-estimée — une mauvaise stratégie produit des segments qui coupent les idées en deux ou mélangent des sujets sans rapport, et chaque défaut se propage : segments mal découpés, recherche imprécise, contexte non pertinent injecté dans vos prompts, réponses dégradées. La qualité de tout ce qui suit se joue ici.

Trois stratégies principales

Découpage par taille

La stratégie la plus simple divise le texte en segments de longueur égale — tous les 150 caractères, par exemple. Simple à implémenter, mais brutale : elle coupe au milieu des mots et des phrases, et perd le contexte à chaque frontière. La parade classique : ajouter du chevauchement entre segments, chaque segment reprenant la fin du précédent pour qu’aucune idée ne soit orpheline de ses deux côtés.

def chunk_by_char(text, chunk_size=150, chunk_overlap=20):
    chunks = []
    start_idx = 0
    while start_idx < len(text):
        end_idx = min(start_idx + chunk_size, len(text))
        chunk_text = text[start_idx:end_idx]
        chunks.append(chunk_text)
        start_idx = (
            end_idx - chunk_overlap if end_idx < len(text) else len(text)
        )
    return chunks

La mécanique du chevauchement est dans le calcul de start_idx : au lieu de repartir de la fin du segment, on recule de chunk_overlap caractères — les 20 derniers caractères de chaque segment ouvrent le suivant. Le garde-fou else len(text) évite la boucle infinie sur le dernier segment.

Découpage par structure

Deuxième approche : exploiter l’organisation naturelle du document — titres, paragraphes, sections. Quand la structure existe, c’est la meilleure stratégie : les frontières des segments épousent les frontières des idées, par construction.

def chunk_by_section(document_text):
    pattern = r'\n## '
    return re.split(pattern, document_text)

Deux lignes suffisent pour un document Markdown : on coupe à chaque titre de niveau 2, et chaque section devient un segment cohérent. Sa limitation est tout aussi évidente : beaucoup de documents n’ont pas de structure cohérente — texte océrisé, courriels, transcriptions — et le pattern qui marche pour l’un ne marche pas pour l’autre.

Découpage sémantique

Troisième famille : analyser le sens et les relations entre phrases pour regrouper le contenu lié, typiquement en comparant les embeddings de phrases consécutives et en coupant là où le sujet change. C’est la stratégie la plus fidèle aux idées, mais aussi la plus sophistiquée et la plus coûteuse en calcul — chaque document à indexer passe par un modèle avant même d’être découpé.

Découpage par phrases (compromis)

Entre la taille brute et la sémantique coûteuse, un compromis pratique : couper aux frontières de phrases, par groupes.

def chunk_by_sentence(text, max_sentences_per_chunk=5, overlap_sentences=1):
    sentences = re.split(r'(?<=[.!?])\s+', text)
    chunks = []
    start_idx = 0
    while start_idx < len(sentences):
        end_idx = min(start_idx + max_sentences_per_chunk, len(sentences))
        current_chunk = sentences[start_idx:end_idx]
        chunks.append(' '.join(current_chunk))
        start_idx += max_sentences_per_chunk - overlap_sentences
    return chunks

L’expression régulière coupe après chaque ponctuation finale, puis on regroupe par paquets de cinq phrases avec une phrase de chevauchement. On garde la simplicité du découpage mécanique, mais plus aucune phrase n’est tranchée en son milieu — le pire défaut du découpage par caractères disparaît pour trois lignes de plus.

Guide de choix

CasStratégie recommandée
Structure cohérentePar structure
Documents mixtesPar phrases
Code ou contenu techniquePar caractères
Format inconnuPar caractères

La logique du tableau : utilisez la structure quand elle existe (c’est l’information la plus riche), les phrases quand le texte est de la prose sans structure fiable, et les caractères quand rien d’autre n’est garanti — le code, notamment, n’a ni phrases ni titres Markdown. Et dans tous les cas, inspectez visuellement quelques segments produits avant d’indexer : dix secondes de lecture attrapent les découpages absurdes qu’aucune métrique ne signalera.

Points clés à retenir

  • Le découpage conditionne toute la chaîne : mauvais segments = mauvaise recherche = mauvaises réponses
  • Par taille : simple mais coupe les idées — toujours avec chevauchement
  • Par structure : la meilleure quand titres et sections existent ; fragile sinon
  • Par phrases : le compromis robuste pour la prose sans structure fiable
  • Vérifiez visuellement quelques segments avant d’indexer — le contrôle le moins cher du pipeline