Exercices Projets guidés Charger des documents texte
🎉

Bravo!

Débutant 🧠 Fondamentaux 10 XP 0 personnes ont réussi

Charger des documents texte

Ton assistant FAQ ne peut pas repondre a partir de rien. Il lui faut une base de connaissances : les documents de ta boite. Procedures internes, FAQ existante, reglement interieur, notes de service... Tout ce qu'un employe pourrait vouloir consulter.

Dans cette etape, tu vas ecrire la fonction qui charge ces documents depuis un dossier. En vrai projet, tu auras un dossier "docs/" avec des fichiers .txt et .md dedans. Ta fonction doit les lire et retourner une liste structuree.

Pour chaque document, on veut garder trois infos :
contenu : le texte du fichier
source : le nom du fichier (pour citer ses sources plus tard)
nb_caracteres : la longueur du texte (utile pour estimer les tokens)

Voici comment lire un fichier en Python et lister un dossier :

import os

for nom_fichier in os.listdir(dossier):
if nom_fichier.endswith('.txt'):
chemin = os.path.join(dossier, nom_fichier)
with open(chemin, 'r', encoding='utf-8') as f:
contenu = f.read()

Ecris une fonction charger_documents(dossier) qui prend un chemin de dossier, lit tous les fichiers .txt et .md, et renvoie une liste de dictionnaires avec les cles "contenu", "source" et "nb_caracteres".

Pour que les tests marchent dans le sandbox (sans acces au systeme de fichiers), ecris aussi une fonction charger_documents_depuis_liste(documents) qui prend directement une liste de tuples (nom_fichier, contenu) et renvoie le meme format.

Exemple :

docs = charger_documents_depuis_liste([
("faq.txt", "Comment poser un conge ? Allez sur l'intranet."),
("reglement.md", "Article 1 : Horaires de travail...")
])
renvoie [
{"contenu": "Comment poser un conge ? Allez sur l'intranet.", "source": "faq.txt", "nb_caracteres": 46},
{"contenu": "Article 1 : Horaires de travail...", "source": "reglement.md", "nb_caracteres": 34}
]

Tests (4/5)

Format de retour correct
docs = charger_documents_depuis_liste([("test.txt", "Contenu de test")])
assert isinstance(docs, list), "La fonction doit retourner une liste"
assert len(docs) == 1
doc = docs[0]
assert "contenu" in doc, "Chaque document doit avoir une cle 'contenu'"
assert "source" in doc, "Chaque document doit avoir une cle 'source'"
assert "nb_caracteres" in doc, "Chaque document doit avoir une cle 'nb_caracteres'"
Contenu et source preserves
docs = charger_documents_depuis_liste([
    ("faq.txt", "Questions frequentes"),
    ("guide.md", "Guide utilisateur")
])
assert docs[0]["contenu"] == "Questions frequentes"
assert docs[0]["source"] == "faq.txt"
assert docs[1]["source"] == "guide.md"
Nombre de caracteres correct
docs = charger_documents_depuis_liste([("test.txt", "Exactement 30 caracteres ici!")])
assert docs[0]["nb_caracteres"] == len("Exactement 30 caracteres ici!"), f"Attendu {len('Exactement 30 caracteres ici!')}, obtenu {docs[0]['nb_caracteres']}"
Liste vide retourne liste vide
docs = charger_documents_depuis_liste([])
assert docs == [], "Une liste vide en entree doit retourner une liste vide"

+ 0 tests cachés

Indices (3 disponibles)

solution.py