Facebook
From mlak, 1 Month ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 151
  1. mport pandas as pd
  2. from sklearn.feature_extraction.text import TfidfVectorizer
  3. from sklearn.decomposition import LatentDirichletAllocation
  4. from sklearn.cluster import KMeans
  5. from nltk.corpus import stopwords
  6. from nltk.tokenize import word_tokenize
  7. from nltk.stem import SnowballStemmer
  8. from sklearn.metrics import silhouette_score
  9.  
  10. # Wczytanie danych z pliku tekstowego
  11. with open('artykuly.txt', 'r', encoding='utf-8') as file:
  12.     data = file.readlines()
  13.  
  14. # Przetwarzanie tekstu
  15. stop_words = set(stopwords.words('polish'))
  16. stemmer = SnowballStemmer('polish')
  17. processed_data = []
  18. for article in data:
  19.     tokens = word_tokenize(article.lower(), language='polish')  # Tokenizacja
  20.     filtered_tokens = [stemmer.stem(token) for token in tokens if token.isalnum() and token not in stop_words]  # Usunięcie stopwords i stemming
  21.     processed_data.append(' '.join(filtered_tokens))
  22.  
  23. # Wektoryzacja tekstu
  24. vectorizer = TfidfVectorizer(max_features=1000)
  25. X = vectorizer.fit_transform(processed_data)
  26.  
  27. # Modelowanie tematyczne za pomocą LDA
  28. lda = LatentDirichletAllocation(n_components=5, random_state=42)
  29. lda.fit(X)
  30.  
  31. # Przyporządkowanie dokumentów do klastrów
  32. clusters = lda.transform(X)
  33.  
  34. # Wybór liczby klastrów za pomocą metody łokcia
  35. scores = []
  36. for k in range(2, 10):
  37.     kmeans = KMeans(n_clusters=k, random_state=42)
  38.     kmeans.fit(clusters)
  39.     scores.append(silhouette_score(clusters, kmeans.labels_))
  40. optimal_k = scores.index(max(scores)) + 2
  41.  
  42. # Klasteryzacja za pomocą k-means
  43. kmeans = KMeans(n_clusters=optimal_k, random_state=42)
  44. kmeans.fit(clusters)
  45. cluster_labels = kmeans.labels_
  46.  
  47. # Wyświetlenie wyników
  48. result_df = pd.DataFrame({'Article': data, 'Cluster': cluster_labels})
  49. print(result_df)