mport pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import LatentDirichletAllocation from sklearn.cluster import KMeans from nltk.corpus import stopwords from nltk.tokenize import word_tokenize from nltk.stem import SnowballStemmer from sklearn.metrics import silhouette_score # Wczytanie danych z pliku tekstowego with open('artykuly.txt', 'r', encoding='utf-8') as file: data = file.readlines() # Przetwarzanie tekstu stop_words = set(stopwords.words('polish')) stemmer = SnowballStemmer('polish') processed_data = [] for article in data: tokens = word_tokenize(article.lower(), language='polish') # Tokenizacja filtered_tokens = [stemmer.stem(token) for token in tokens if token.isalnum() and token not in stop_words] # Usunięcie stopwords i stemming processed_data.append(' '.join(filtered_tokens)) # Wektoryzacja tekstu vectorizer = TfidfVectorizer(max_features=1000) X = vectorizer.fit_transform(processed_data) # Modelowanie tematyczne za pomocą LDA lda = LatentDirichletAllocation(n_components=5, random_state=42) lda.fit(X) # Przyporządkowanie dokumentów do klastrów clusters = lda.transform(X) # Wybór liczby klastrów za pomocą metody łokcia scores = [] for k in range(2, 10): kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(clusters) scores.append(silhouette_score(clusters, kmeans.labels_)) optimal_k = scores.index(max(scores)) + 2 # Klasteryzacja za pomocą k-means kmeans = KMeans(n_clusters=optimal_k, random_state=42) kmeans.fit(clusters) cluster_labels = kmeans.labels_ # Wyświetlenie wyników result_df = pd.DataFrame({'Article': data, 'Cluster': cluster_labels}) print(result_df)