如何在每个群集中获得前N个常用词? Sklearn

时间:2017-05-01 15:03:30

标签: python scikit-learn data-mining hierarchical-clustering sklearn-pandas

我有一个文本语料库,每个文章包含1000多篇文章。我在python中使用Sklearn的Hierarchy Clustering来生成相关文章的集群。这是我用来进行聚类的代码

注意:X是一个稀疏的NumPy 2D数组,其行对应于与术语对应的文档和列

# 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 个答案:

答案 0 :(得分:0)

一种选择是将X从稀疏numpy数组转换为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)和距离度量(余弦)。如果您想要提取主题,那么主题建模有一个很好的sklearn tutorial