#python #scikit-learn #k-means #tf-idf
#python #scikit-learn #k-означает #tf-idf
Вопрос:
Я пытаюсь сгруппировать текстовые слова. Предположим, у меня есть список текста
text=["WhatsApp extends 'confusing' update deadline",
"India begins world's biggest Covid vaccine drive",
"Nepali climbers make history with K2 winter summit"]
Я реализовал TF-IDF для этих данных
vec = TfidfVectorizer()
feat = vec .fit_transform(text)
После этого я применил Kmeans
kmeans = KMeans(n_clusters=num).fit(feat)
Меня смущает то, как я получаю кластеры слов, таких как
cluster 0
WhatsApp, update,biggest
cluster 1
history,biggest ,world's
etc.
Комментарии:
1. Я думаю, ваш список ниточек исчерпан. Некоторые ‘ и , отсутствуют. Каков результат вашего кода?
Ответ №1:
Вы можете использовать get_feature_names()
метод из TfidfVectorizer
класса с предсказаниями из KMeans
для проверки слов в каждом кластере.
Вот минимальный пример с двумя кластерами и тремя предложениями, предоставленными вами:
import numpy as np
from sklearn.cluster import KMeans
from sklearn.feature_extraction.text import TfidfVectorizer
text = ["WhatsApp extends 'confusing' update deadline",
"India begins world's biggest Covid vaccine drive",
"Nepali climbers make history with K2 winter summit"]
vec = TfidfVectorizer()
feat = vec.fit_transform(text)
kmeans = KMeans(2).fit(feat)
pred = kmeans.predict(feat)
for i in range(2):
print(f"Cluster #{i}:")
words = []
for sentence in np.array(text)[pred==i]:
words = [fn for fn in vec.get_feature_names() if fn in sentence]
print(words)
Результат:
Cluster #0:
['confusing', 'deadline', 'extends', 'update', 'begins', 'biggest', 'drive', 'vaccine', 'world']
Cluster #1:
['climbers', 'history', 'make', 'summit', 'winter', 'with']