【文本聚类】用k-means对文本进行聚类

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 16 10:08:52 2017

@author: li-pc
"""

import jieba 
from sklearn.feature_extraction.text import  TfidfVectorizer
from sklearn.cluster import KMeans

def jieba_tokenize(text):
    return jieba.lcut(text) 


tfidf_vectorizer = TfidfVectorizer(tokenizer=jieba_tokenize, lowercase=False)
'''
tokenizer: 指定分词函数
lowercase: 在分词之前将所有的文本转换成小写,因为涉及到中文文本处理,
所以最好是False
'''
print "ok3"
text_list = ["今天天气真好啊啊啊啊", "小明上了清华大学", \
"我今天拿到了Google的Offer", "清华大学在自然语言处理方面真厉害"]
 #需要进行聚类的文本集
print "ok1"
tfidf_matrix = tfidf_vectorizer.fit_transform(text_list)

num_clusters = 2
km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=1, \
                    init='k-means++',n_jobs=1)
print "ok2"
'''
n_clusters: 指定K的值
max_iter: 对于单次初始值计算的最大迭代次数
n_init: 重新选择初始值的次数
init: 制定初始值选择的算法
n_jobs: 进程个数,为-1的时候是指默认跑满CPU
注意,这个对于单个初始值的计算始终只会使用单进程计算,
并行计算只是针对与不同初始值的计算。比如n_init=10,n_jobs=40, 
服务器上面有20个CPU可以开40个进程,最终只会开10个进程
'''
#返回各自文本的所被分配到的类索引
result = km_cluster.fit_predict(tfidf_matrix)

print "Predicting result: ", result

其中,text_list是需要进行聚类的文本,本文中是中文文本,啦啦,貌似还很厉害的样子。

你可能感兴趣的:(ML,NLP)