Gruparea documentelor

Analiza clusterelor în Python

Shaumik Daityari

Business Analyst

Gruparea documentelor: concepte

  1. Curățați datele înainte de procesare
  2. Determinați importanța termenilor dintr-un document (în matricea TF-IDF)
  3. Grupați matricea TF-IDF
  4. Identificați termenii și documentele principale din fiecare cluster
Analiza clusterelor în Python

Curățarea și tokenizarea datelor

  • Convertiți textul în unități mai mici numite tokeni și curățați datele
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']
Analiza clusterelor în Python

Matricea document-termen și matricele rare

  • Se formează matricea document-termen
  • Majoritatea elementelor din matrice sunt zerouri

Sursă

  • Se creează o matrice rară

Sursă

Analiza clusterelor în Python

TF-IDF (Frecvența termenului - Frecvența inversă în documente)

  • Măsură ponderată: evaluează importanța unui cuvânt într-un document dintr-o colecție
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)
Analiza clusterelor în Python

Grupare cu matrice rară

  • kmeans() din SciPy nu acceptă matrice rare
  • Utilizați .todense() pentru a converti la matrice
cluster_centers, distortion = kmeans(tfidf_matrix.todense(), num_clusters)
Analiza clusterelor în Python

Termeni principali per cluster

  • Centrele de cluster: liste cu dimensiunea egală cu numărul de termeni
  • Fiecare valoare din centrul unui cluster reprezintă importanța sa
  • Creați un dicționar și afișați termenii 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']
Analiza clusterelor în Python

Considerații suplimentare

  • Procesați hyperlinkuri, emoticoane etc.
  • Normalizați cuvintele (run, ran, running -> run)
  • .todense() poate fi ineficient pentru seturi mari de date
Analiza clusterelor în Python

Urmează exercițiile!

Analiza clusterelor în Python

Preparing Video For Download...