Klasterisasi dokumen

Analisis Klaster di Python

Shaumik Daityari

Business Analyst

Klasterisasi dokumen: konsep

  1. Bersihkan data sebelum pemrosesan
  2. Tentukan pentingnya istilah dalam dokumen (di matriks TF-IDF)
  3. Klasterkan matriks TF-IDF
  4. Temukan istilah dan dokumen teratas di tiap klaster
Analisis Klaster di Python

Bersihkan dan tokenisasi data

  • Ubah teks menjadi token dan bersihkan untuk diproses
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']
Analisis Klaster di Python

Matriks istilah-dokumen dan matriks jarang

  • Matriks istilah-dokumen terbentuk
  • Sebagian besar elemen matriks bernilai nol

Sumber

  • Dibuat matriks jarang

Sumber

Analisis Klaster di Python

TF-IDF (Term Frequency - Inverse Document Frequency)

  • Ukuran berbobot: menilai seberapa penting kata bagi dokumen dalam sebuah koleksi
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)
Analisis Klaster di Python

Klastering dengan matriks jarang

  • kmeans() di SciPy tidak mendukung matriks jarang
  • Gunakan .todense() untuk konversi ke matriks
cluster_centers, distortion = kmeans(tfidf_matrix.todense(), num_clusters)
Analisis Klaster di Python

Istilah teratas per klaster

  • Pusat klaster: daftar berukuran sama dengan jumlah istilah
  • Tiap nilai pada pusat klaster = tingkat kepentingannya
  • Buat kamus dan cetak istilah teratas
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']
Analisis Klaster di Python

Pertimbangan lain

  • Tangani hyperlink, emotikon, dll.
  • Normalisasi kata (run, ran, running -> run)
  • .todense() bisa gagal untuk dataset besar
Analisis Klaster di Python

Berikutnya: latihan!

Analisis Klaster di Python

Preparing Video For Download...