Как получить топ 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) и метрики расстояния (косинус), которые чаще используются для обработки естественного языка. Если вы хотите извлечь темы, есть хорошее руководство по моделированию тем.

Другие вопросы по тегам