Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Découper des documents structurés

Après cette leçon: Je peux couper un document structuré pour que chaque morceau garde son titre, l’en-tête de son tableau et sa source.

Leçon de 60 min6 commandesLab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Une ligne sans son en-tête

Découper un document, c’est le couper en morceaux que la recherche pourra rendre. Un bon morceau reste trouvable et compréhensible seul. C’est important parce qu’une recherche rend des morceaux, et qu’un morceau qui a perdu son titre ou l’en-tête de son tableau ne dit rien.

Un tableau de frais est coupé ligne par ligne. La ligne « grand, 5 euros » est rendue pour « combien coûte un grand colis ». Elle ne dit pas à quoi correspondent les 5 euros.

À la fin de cette leçon

Remarque

Je peux couper un document structuré pour que chaque morceau garde son titre, l’en-tête de son tableau et sa source.

Mots clés

MotCe que ça veut dire
Morceauune partie d’un document qui est indexée
Chemin des titresles titres au-dessus d’un morceau, du haut vers le bas
Métadonnéesdes faits gardés à côté d’un morceau, comme sa source
En-tête de tableaula première ligne, qui nomme chaque colonne
Fil d’Arianeun chemin de titres écrit sur une seule ligne
Morceau orphelinun morceau qui ne veut rien dire sans son contexte

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Gardez le chemin des titres avec chaque morceau

On peut couper un document par taille ou aux titres. Il faut aussi garder les titres. Un morceau sous « Retours > Frais » doit porter ce chemin, écrit en fil d’Ariane : Manuel de la boutique > Retours > Frais.

Indexez le chemin avec le texte. Une recherche « retours frais » trouve alors le morceau même si le corps ne dit jamais « retours ».

Une ligne de tableau veut son en-tête

Un tableau est un en-tête et des lignes. Coupé ligne par ligne, chaque ligne perd l’en-tête. On transforme donc chaque ligne en mots qui le portent : « article : grand, frais : 5 euros ».

Une liste suit la même règle. Gardez la phrase qui l’introduit avec chaque élément, sinon l’élément flotte seul.

Exemple détaillé : la même ligne, avant et après

VersionCe qui est indexé
Coupée net| grand | 5 euros |
Avec son en-têtearticle : grand, frais : 5 euros
Avec le chemin aussiManuel de la boutique > Retours > Frais : article : grand, frais : 5 euros

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Métadonnées et contrôle de taille

Gardez des métadonnées à côté de chaque morceau : son fichier source, son titre, puis plus tard son propriétaire et sa date. Elles permettent à une réponse de citer d’où elle vient, et la leçon 5 s’en servira pour filtrer.

Contrôlez ensuite la taille. Une section bien plus longue que les autres contient deux idées et doit être recoupée. Signalez les titres trop longs.

Une erreur courante

Attention

Beaucoup pensent que couper tous les 500 caractères suffit pour n’importe quel document. Cette coupe traverse les tableaux et les titres, et laisse des orphelins. Coupez d’abord selon la structure, et n’utilisez la taille que pour recouper ce qui reste trop long.

Écrire le découpeur, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const doc = [' '  \"# Manuel de la boutique\",' '  \"## Horaires\",' '  \"La boutique ouvre à neuf heures en semaine.\",' '  \"## Retours\",' '  \"### Délai\",' '  \"Renvoyez un colis sous trente jours.\",' '  \"### Frais\",' '  \"| article | frais |\",' '  \"| petit | 2 euros |\",' '  \"| grand | 5 euros |\",' '];' > decoupe1.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le découpeur, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function cellules(ligne) {' '  return ligne.split(\"|\").map(function (c) { return c.trim(); }).filter(function (c) { return c.length > 0; });' '}' >> decoupe1.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le découpeur, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function morceaux(lignes, source) {' '  const chemin = [];' '  const sortie = [];' '  let entete = null;' '  lignes.forEach(function (ligne) {' '    const m = ligne.match(/^(#+) (.*)/);' '    if (m) {' '      chemin.length = m[1].length - 1;' '      chemin.push(m[2]);' '      sortie.push({ source: source, titre: chemin.join(\" > \"), lignes: [] });' '      entete = null;' '      return;' '    }' >> decoupe1.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le découpeur, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '    const actuel = sortie[sortie.length - 1];' '    if (ligne.startsWith(\"|\") === false) { actuel.lignes.push(ligne); return; }' '    const c = cellules(ligne);' '    if (entete === null) { entete = c; return; }' '    actuel.lignes.push(entete.map(function (h, i) { return h + \" : \" + c[i]; }).join(\", \"));' '  });' '  return sortie;' '}' >> decoupe1.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le découpeur, partie 5

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'console.log(\"Une ligne de tableau isolée :\", doc[9]);' 'morceaux(doc, \"manuel.md\").filter(function (c) { return c.lignes.length > 0; }).forEach(function (c) {' '  console.log(c.source + \" | \" + c.titre + \" | \" + c.lignes.join(\" / \"));' '});' >> decoupe1.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer et lire les morceaux

Commande
docker exec -w /home/node/project agent node decoupe1.js

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ceci est une maquette

Le Run lit dix lignes d’un Markdown inventé. Un vrai document peut être un PDF, une page web ou un tableur, et demande un analyseur pour chacun. L’idée reste la même : trouver la structure, puis la garder.

Le Run n’appelle aucun modèle.

Ce que le Run affiche

MorceauTexte gardé
Manuel de la boutique > HorairesLa boutique ouvre à neuf heures en semaine.
Manuel de la boutique > Retours > DélaiRenvoyez un colis sous trente jours.
Manuel de la boutique > Retours > Fraisarticle : petit, frais : 2 euros / article : grand, frais : 5 euros

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À propos de ce labo et de sa source: Lab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.