Clustering di documenti

Analisi di cluster in Python

Shaumik Daityari

Business Analyst

Clustering di documenti: concetti

  1. Pulisci i dati prima dell'elaborazione
  2. Determina l'importanza dei termini in un documento (nella matrice TF-IDF)
  3. Raggruppa la matrice TF-IDF
  4. Trova termini e documenti principali in ogni cluster
Analisi di cluster in Python

Pulisci e tokenizza i dati

  • Converti il testo in token e pulisci i dati per l'elaborazione
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']
Analisi di cluster in Python

Matrice documento-termine e matrici sparse

  • Creata la matrice documento-termine
  • La maggior parte degli elementi è zero

Fonte

  • Si crea una matrice sparsa

Fonte

Analisi di cluster in Python

TF-IDF (Term Frequency - Inverse Document Frequency)

  • Misura pesata: valuta quanto è importante una parola in un documento di una raccolta
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)
Analisi di cluster in Python

Clustering con matrice sparsa

  • kmeans() in SciPy non supporta matrici sparse
  • Usa .todense() per convertirla in matrice densa
cluster_centers, distortion = kmeans(tfidf_matrix.todense(), num_clusters)
Analisi di cluster in Python

Termini top per cluster

  • Centroidi: liste di dimensione pari al numero di termini
  • Ogni valore nel centroide indica l'importanza
  • Crea un dizionario e stampa i termini principali
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']
Analisi di cluster in Python

Altre considerazioni

  • Gestisci hyperlink, emoticon, ecc.
  • Normalizza le parole (run, ran, running -> run)
  • .todense() può non funzionare su dataset grandi
Analisi di cluster in Python

Prossimo: esercizi!

Analisi di cluster in Python

Preparing Video For Download...