Aller au contenu principal

Strategies de decoupage de texte

Le decoupage de texte est une etape critique du pipeline RAG. Une mauvaise strategie peut injecter du contexte non pertinent dans vos prompts.

Trois strategies principales

Decoupage par taille

Divise le texte en segments de longueur egale. Simple a implementer mais coupe les mots et perd le contexte. La solution : ajouter du chevauchement entre segments.

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

Decoupage par structure

Exploite l’organisation naturelle du document (titres, paragraphes, sections). Excellent quand la structure est garantie.

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

Limitation : beaucoup de documents n’ont pas de structure coherente.

Decoupage semantique

Analyse le sens et les relations entre phrases pour regrouper le contenu lie. Plus sophistique mais plus couteux en calcul.

Decoupage par phrases (compromis)

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

Guide de choix

CasStrategie recommandee
Structure coherentePar structure
Documents mixtesPar phrases
Code ou contenu techniquePar caracteres
Format inconnuPar caracteres