Regroupement de documents

Analyse de grappes en Python

Shaumik Daityari

Business Analyst

Regroupement de documents : concepts

  1. Nettoyer les données avant le traitement
  2. Évaluer l'importance des termes d'un document (matrice TF-IDF)
  3. Regrouper la matrice TF-IDF
  4. Trouver les principaux termes et documents par groupe
Analyse de grappes en Python

Nettoyer et tokeniser les données

  • Convertir le texte en petites unités (jetons), nettoyer les données pour le traitement
from nltk.tokenize import word_tokenize
import re

def remove_noise(text, stop_words = []):
    tokens = word_tokenize(text)

cleaned_tokens = [] for token in tokens: token = re.sub('[^A-Za-z0-9]+', '', token)
if len(token) > 1 and token.lower() not in stop_words: # Get lowercase cleaned_tokens.append(token.lower()) return cleaned_tokens
remove_noise("It is lovely weather we are having. I hope the weather continues.")
['lovely', 'weather', 'hope', 'weather', 'continues']
Analyse de grappes en Python

Matrice termes-documents et matrices creuses

  • Création d'une matrice termes-documents
  • La plupart des éléments de la matrice sont des zéros

Source

  • Une matrice creuse est créée

Source

Analyse de grappes en Python

TF-IDF (Term Frequency - Inverse Document Frequency)

  • Mesure pondérée : évaluer l'importance d'un mot dans un document d'un corpus
from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=50, min_df=0.2, tokenizer=remove_noise)
tfidf_matrix = tfidf_vectorizer.fit_transform(data)
Analyse de grappes en Python

Regrouper avec une matrice creuse

  • kmeans() de SciPy ne prend pas en charge les matrices creuses
  • Utiliser .todense() pour convertir en matrice
cluster_centers, distortion = kmeans(tfidf_matrix.todense(), num_clusters)
Analyse de grappes en Python

Principaux termes par groupe

  • Centres de groupes : listes de taille égale au nombre de termes
  • Chaque valeur d'un centre indique son importance
  • Créer un dictionnaire et afficher les principaux termes
terms = tfidf_vectorizer.get_feature_names_out()

for i in range(num_clusters):
    center_terms = dict(zip(terms, list(cluster_centers[i])))

sorted_terms = sorted(center_terms, key=center_terms.get, reverse=True)
print(sorted_terms[:3])
['room', 'hotel', 'staff']

['bad', 'location', 'breakfast']
Analyse de grappes en Python

Autres points à considérer

  • Gérer les hyperliens, émoticônes, etc.
  • Normaliser les mots (run, ran, running -> run)
  • .todense() peut échouer avec de très grands ensembles de données
Analyse de grappes en Python

À suivre : exercices !

Analyse de grappes en Python

Preparing Video For Download...