Chargement du corpus CSV
Ouvrez, analysez et vérifiez la structure de slm-corpus.csv avec le module csv de Python.
- Ouvrir et analyser un fichier CSV avec csv.reader et csv.DictReader
- Inspecter les noms de colonnes, le nombre de lignes et les types de données d'un jeu de données CSV
- Extraire le texte brut des lignes du corpus dans une seule chaîne
- Gérer les pièges CSV courants : encodage, caractères de nouvelle ligne, valeurs manquantes
Pourquoi commencer par les données ?
Chaque projet d’apprentissage automatique commence par des données. Pour un modèle de langue à base de texte, ces données sont un corpus, une collection de texte à partir de laquelle le modèle apprendra des motifs. Notre corpus vit dans slm-corpus.csv, un petit fichier CSV fourni avec le cours dans static/datasets/.
Avant de pouvoir tokeniser, compter ou générer quoi que ce soit, vous devez charger ce fichier dans Python. Cette leçon couvre deux approches : csv.reader pour un accès brut et csv.DictReader pour un accès conscient des en-têtes.
Concepts clés
Ouvrir un fichier CSV
Le module csv de Python gère les parties désordonnées de l’analyse CSV (champs entre guillemets, virgules intégrées, caractères échappés). Ouvrez toujours les fichiers CSV en mode texte et laissez le module faire le travail :
import csv
with open("slm-corpus.csv", newline="") as f:
reader = csv.reader(f)
header = next(reader) # first row = column names
print(header) # e.g. ['id', 'text']L’argument newline="" est requis par la documentation du module csv, sans lui, vous pouvez obtenir des lignes vides sous Windows ou une sortie à double interligne.
Lire avec DictReader
csv.DictReader mappe chaque ligne à un dictionnaire en utilisant la ligne d’en-tête comme clés. Cela rend votre code auto-documenté :
import csv
with open("slm-corpus.csv", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["text"]) # access by column name, not indexLe premier appel à next(reader) est automatique, DictReader consomme la ligne d’en-tête lui-même.
Extraire le texte complet
Pour construire un modèle de langue, vous avez besoin de tout le texte concaténé en une longue chaîne. Voici comment le collecter :
import csv
texts = []
with open("slm-corpus.csv", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
texts.append(row["text"])
full_text = " ".join(texts)
print(f"Loaded {len(texts)} rows, {len(full_text)} characters")La méthode join() concatène tous les textes des lignes avec un séparateur espace, produisant un bloc de texte continu.
Vérifier le chargement
Vérifiez toujours vos données après les avoir chargées. Comptez les lignes, jetez un œil à quelques échantillons et cherchez des problèmes évidents :
import csv
with open("slm-corpus.csv", newline="") as f:
reader = csv.DictReader(f)
rows = list(reader)
print(f"Total rows: {len(rows)}")
print(f"Columns: {rows[0].keys()}")
print(f"First row: {rows[0]}")
print(f"Last row: {rows[-1]}")Si le fichier est volumineux, évitez list(reader), cela charge tout en mémoire. Au lieu de cela, itérez et traitez ligne par ligne.
Essayez
Chargez slm-corpus.csv et affichez :
- Le nombre de lignes du fichier
- Les noms de colonnes
- Le texte de la première ligne
Utilisez ce squelette :
import csv
with open("slm-corpus.csv", newline="") as f:
reader = csv.DictReader(f)
rows = list(reader)
print(f"Rows: {len(rows)}")
print(f"Columns: {list(rows[0].keys())}")
print(f"Sample: {rows[0]['text'][:200]}")Points clés
- Ouvrez toujours les fichiers CSV avec
newline=""quand vous utilisez le modulecsv csv.DictReadervous donne un accès par clés d’en-tête ;csv.readervous donne un accès par indices- Vérifiez votre chargement : contrôlez les nombres de lignes, les noms de colonnes et jetez un œil aux données d’échantillon
- Pour les fichiers volumineux, itérez ligne par ligne au lieu de convertir en liste
Défi pratique
Écrivez une fonction load_corpus(path) qui prend un chemin de fichier CSV et renvoie une liste de chaînes, une par ligne de la colonne text. Gérez le cas où le fichier n’existe pas en affichant un message d’erreur et en renvoyant une liste vide.
def load_corpus(path):
import csv
try:
with open(path, newline="") as f:
reader = csv.DictReader(f)
return [row["text"] for row in reader]
except FileNotFoundError:
print(f"File not found: {path}")
return []1. Pourquoi devriez-vous passer newline lors de l'ouverture d'un fichier CSV pour le module csv ?
2. Qu'est-ce que csv.DictReader utilise comme clés de dictionnaire pour chaque ligne ?
3. Étant donné reader = csv.DictReader(f), que renvoie next(reader) ?