Как получить топ N часто встречающихся слов в каждом кластере? Sklearn
У меня есть текстовый корпус, который содержит более 1000 статей в каждой отдельной строке. Я использовал Hierarchy Clustering с использованием Sklearn в python для создания кластеров связанных статей. Это код, который я использовал для кластеризации
Примечание. X - это разреженный 2D-массив NumPy со строками, соответствующими документам, и столбцами, соответствующими терминам.
# Agglomerative Clustering
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(affinity="euclidean",linkage="complete",n_clusters=3)
model.fit(X.toarray())
clustering = model.labels_
print (clustering)
Я указываю количество кластеров = 3, при котором обрезаем дерево, чтобы получить плоскую кластеризацию, такую как K-mean
Мой вопрос: как получить N самых популярных слов в каждом кластере? так что я могу предложить тему для каждого кластера. Спасибо
1 ответ
Один из вариантов - преобразовать X из разреженного массива в массив данных pandas. Строки будут по-прежнему соответствовать документам, а столбцы - словам. Если у вас есть список вашего словаря в порядке столбцов массива (используется как your_word_list
ниже) вы можете попробовать что-то вроде этого:
import pandas as pd
X = pd.DataFrame(X.toarray(), columns=your_word_list) # columns argument is optional
X['Cluster'] = clustering # Add column corresponding to cluster number
word_frequencies_by_cluster = X.groupby('Cluster').sum()
# To get sorted list for a numbered cluster, in this case 1
print word_frequencies_by_cluster.loc[1, :].sort(ascending=False)
В качестве примечания вы можете рассмотреть алгоритмы (например, LDA) и метрики расстояния (косинус), которые чаще используются для обработки естественного языка. Если вы хотите извлечь темы, есть хорошее руководство по моделированию тем.