使用K-均值聚类算法进行文本聚类

中文文本聚类主要有以下几个步骤:

  • 切词
  • 去除停用词
  • 构建词袋空间VSM(vector space model)
  • TF-IDF构建词权重
  • 使用K-means算法

参考博客使用scikit-learn进行KMeans文本聚类,按照以下步骤简单进行了文本聚类:

  1. 使用jieba结巴分词Github对文本进行中文分词
  2. 使用scikit-learn的TfidfVectorizer把原始文本转化为TF-IDF的特征矩阵
  3. 使用K-means进行文本聚类

具体代码

# -*- coding: utf-8 -*- import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans # 切词 def jieba_tokenize(text): return jieba.lcut(text) ''' tokenizer: 指定分词函数 lowercase: 在分词之前将所有的文本转换成小写,因为涉及到中文文本处理, 所以最好是False ''' tfidf_vectorizer = TfidfVectorizer(tokenizer=jieba_tokenize, lowercase=False) # 需要进行聚类的文本集 text_list = ["今天天气真好啊啊啊啊", "小明上了清华大学", \ "我今天拿到了Google的Offer", "清华大学在自然语言处理方面真厉害","天气不错啊"] # TfidfVectorizer可以把原始文本转化为TF-IDF的特征矩阵 tfidf_matrix = tfidf_vectorizer.fit_transform(text_list) ''' n_clusters: 指定K的值 max_iter: 对于单次初始值计算的最大迭代次数 n_init: 重新选择初始值的次数 init: 制定初始值选择的算法 n_jobs: 进程个数,为-1的时候是指默认跑满CPU 注意,这个对于单个初始值的计算始终只会使用单进程计算, 并行计算只是针对与不同初始值的计算。比如n_init=10,n_jobs=40, 服务器上面有20个CPU可以开40个进程,最终只会开10个进程 ''' num_clusters = 3 km_cluster = KMeans(n_clusters=num_clusters,max_iter=300, n_init=1,init='k-means++',n_jobs=1) #返回各自文本的所被分配到的类索引 result = km_cluster.fit_predict(tfidf_matrix) print ("Predicting result: ", result) 

运行结果

Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 1.011 seconds.
Prefix dict has been built succesfully.
Predicting result:  [0 2 1 2 0]

结果表明对这一文本集能正确聚类。

参考链接

使用scikit-learn进行KMeans文本聚类

基于k-means和tfidf的文本聚类代码简单实现

Github:利用Python实现中文文本关键词抽取,分别采用TF-IDF、TextRank、Word2Vec词聚类三种方法

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/qq_38607035/article/details/82764644
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞