【文字聚類】用k-means對文字進行聚類
阿新 • • 發佈:2019-01-31
# -*- 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是需要進行聚類的文字,本文中是中文文字,啦啦,貌似還很厲害的樣子。