1. 程式人生 > >【文字聚類】用k-means對文字進行聚類

【文字聚類】用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是需要進行聚類的文字,本文中是中文文字,啦啦,貌似還很厲害的樣子。