Compétences techniques

Compétence techniques utiles en TP #

Lire un fichier texte et mettre le contenu dans une variable de type str #

On suppose que le fichier est encodé en utf8. Si ce n’est pas le cas, on peut tenter comme encodages : latin1, latin9, cp1252.

with open("chemin/fichier.txt", encoding="utf8") as f:
    txt = f.read()

ou (plus moderne) :

from pathlib import Path
txt = Path("chemin/fichier.txt").read_text(encoding="utf8")

Extraire les mots d’un texte #

Si on souhaite un résultat impeccable, le problème est difficile. On se contentera ici d’un découpage approximatif.

Il est envisageable de pré-traiter la chaîne pour la mettre entièrement en minuscules ou en majuscules (texte.upper() ou texte.lower()).

Il est aussi envisageable de supprimer les accents avec quelque chose comme ça (laborieux, mais sans doute suffisant la plupart du temps) :

texte_sans_accent = texte.translate(str.maketrans("éèêëïöüäîôûâàç", "eeeeiouaiouaac"))

Autre solution, le module unicodedata permet de gérer l’encodage (technique…) :

import unicodedata
nfkd_form = unicodedata.normalize('NFKD', "Avec éàôÀÔ et ça aussi !") # Mise sous forme normale
only_ascii = nfkd_form.encode('ASCII', 'ignore').decode('ASCII')    # On ne garde que l'ASCII

Pour le découpage, utiliser split ne suffit généralement pas à cause des ponctuations (mais ça peut valoir le coup d’essayer comme ça en premier lieu) :

mots = texte.split()

On peut recherche aussi du côté du module de gestion des expressions rationnelles re : https://docs.python.org/fr/3/library/re.html#re.split ou https://docs.python.org/fr/3/library/re.html#re.findall.

Lecture d’un fichier csv #

Cette tâche est réalisable avec le module standard csv (https://docs.python.org/3/library/csv.html), auquel il faut fournir un objet itérable contenant le lignes du fichier. C’est donc à combiner avec la lecture d’un fichier.

import csv
from pathlib import Path

lignes = Path("chemin/fichier.csv").read_text().splitlines()
data = []
for ligne in csv.reader(lignes, delimiter=','):
    data.append((ligne[0], ligne[1])) # Ici on ne traite que les 2 premières colonnes

Dans le code qui précède, il faudra éventuellement convertir les nombres en valeurs numériques : data.append((float(ligne[0]), ligne[1])) par exemple.

Le module pandas qui n’est pas dans la bibliothèque standard, permet de faire la lecture plus simplement :

import pandas as pd
df = pd.read_csv("data/spam/probas_mails_nonspam.csv", header=None) 
# pandas renvoie une Dataframe, qu'on peut convertir en 
# liste de listes. Les conversions en nombres sont automatiques
data = df.values.tolist()

Si on ne précise pas header=None, pandas utilise la première ligne comme titre de colonne.

#