Exercices IA & Data Science Vectoriser des textes avec TF-IDF
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Vectoriser des textes avec TF-IDF

Pour comparer des textes entre eux, il faut les transformer en nombres. TF-IDF (Term Frequency - Inverse Document Frequency) est une méthode classique qui donne un score a chaque mot en fonction de son importance dans le document par rapport a l'ensemble des documents.

Un mot frequent dans un document mais rare dans les autres aura un score TF-IDF eleve. Un mot comme 'le' ou 'de', present partout, aura un score faible.

scikit-learn fournit TfidfVectorizer :
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
matrice = vectorizer.fit_transform(['texte 1', 'texte 2', 'texte 3'])

fit_transform prend une liste de textes et renvoie une matrice ou chaque ligne correspond a un texte et chaque colonne a un mot du vocabulaire.

Écris une fonction vectorize_texts(texts) qui prend une liste de textes, les vectorise avec TfidfVectorizer et renvoie un tuple (matrice, vectorizer).
La matrice doit etre convertie en tableau numpy dense avec .toarray().

Exemple :
matrix, vec = vectorize_texts(['le chat dort', 'le chien mange'])
matrix.shape vaut (2, 4) (2 textes, 4 mots uniques)

Tests (1/1)

Tests
import numpy as np
matrix, vec = vectorize_texts(['le chat dort', 'le chien mange', 'le chat mange'])
assert matrix.shape[0] == 3, f'Attendu 3 lignes, obtenu {matrix.shape[0]}'
assert matrix.shape[1] > 0, 'La matrice doit avoir des colonnes'
assert isinstance(matrix, np.ndarray), 'La matrice doit etre un numpy array'
assert hasattr(vec, 'transform'), 'Le vectorizer doit avoir une méthode transform'
vocab = vec.get_feature_names_out()
assert 'chat' in vocab, 'Le mot chat devrait etre dans le vocabulaire'

Indices (3 disponibles)

solution.py