Documentclustering

Clusteranalyse in Python

Shaumik Daityari

Business Analyst

Documentclustering: concepten

  1. Reinig data vóór verwerking
  2. Bepaal term-belang in een document (in TF-IDF-matrix)
  3. Cluster de TF-IDF-matrix
  4. Vind topt termen en documenten per cluster
Clusteranalyse in Python

Data opschonen en tokenizen

  • Zet tekst om in tokens (kleine delen) en reinig voor verwerking
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']
Clusteranalyse in Python

Document-termmatrix en sparse matrices

  • Document-termmatrix gemaakt
  • De meeste elementen in de matrix zijn nul

Source

  • Er wordt een sparse matrix gemaakt

Source

Clusteranalyse in Python

TF-IDF (Term Frequency - Inverse Document Frequency)

  • Een gewogen maat: beoordeelt hoe belangrijk een woord is voor een document in een collectie
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)
Clusteranalyse in Python

Clusteren met sparse matrix

  • kmeans() in SciPy ondersteunt geen sparse matrices
  • Gebruik .todense() om om te zetten naar een matrix
cluster_centers, distortion = kmeans(tfidf_matrix.todense(), num_clusters)
Clusteranalyse in Python

Topt termen per cluster

  • Clustercentra: lijsten ter grootte van het aantal termen
  • Elke waarde in het clustercentrum is de belangrijkheid
  • Maak een dictionary en print toptermen
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']
Clusteranalyse in Python

Meer aandachtspunten

  • Houd rekening met hyperlinks, emoticons, enz.
  • Normaliseer woorden (run, ran, running -> run)
  • .todense() werkt mogelijk niet bij grote datasets
Clusteranalyse in Python

Hierna: oefeningen!

Clusteranalyse in Python

Preparing Video For Download...