資源簡介
該資源主要參考我的博客:
[python] Kmeans文本聚類算法+PAC降維+Matplotlib顯示聚類圖像
http://blog.csdn.net/eastmount/article/details/50545937
包括輸入文檔txt,共1000行數據,每行都是分詞完的文本。
本文主要講述以下幾點:
1.通過scikit-learn計算文本內容的tfidf并構造N*M矩陣(N個文檔 M個特征詞);
2.調用scikit-learn中的K-means進行文本聚類;
3.使用PAC進行降維處理,每行文本表示成兩維數據;
4.最后調用Matplotlib顯示聚類效果圖。
免費資源,希望對你有所幫助~
By Eastmount

代碼片段和文件信息
#?coding=utf-8??
“““?
Created?on?2016-01-16?@author:?Eastmount
輸入:打開?All_BHSpider_Result.txt?對應1000個文本
?????001~400?5A景區?401~600?動物?601~800?人物?801~1000?國家
輸出:BHTfidf_Result.txt?tfidf值
參數:weight權重?這是一個重要參數
“““??
??
import?time??????????
import?re??????????
import?os??
import?sys
import?codecs
import?shutil
import?numpy?as?np
import?matplotlib
import?scipy
import?matplotlib.pyplot?as?plt
from?sklearn?import?feature_extraction??
from?sklearn.feature_extraction.text?import?TfidfTransformer??
from?sklearn.feature_extraction.text?import?CountVectorizer
from?sklearn.feature_extraction.text?import?HashingVectorizer?
if?__name__?==?“__main__“:
????
????#########################################################################
????#???????????????????????????第一步?計算TFIDF
????
????#文檔預料?空格連接
????corpus?=?[]
????
????#讀取預料?一行預料為一個文檔
????for?line?in?open(‘01_All_BHSpider_Content_Result.txt‘?‘r‘).readlines():
????????#print?line
????????corpus.append(line.strip())
????#print?corpus
????#參考:?http://blog.csdn.net/abcjennifer/article/details/23615947
????#vectorizer?=?HashingVectorizer(n_features?=?4000)
????
????#將文本中的詞語轉換為詞頻矩陣?矩陣元素a[i][j]?表示j詞在i類文本下的詞頻
????vectorizer?=?CountVectorizer()
????#該類會統計每個詞語的tf-idf權值
????transformer?=?TfidfTransformer()
????#第一個fit_transform是計算tf-idf?第二個fit_transform是將文本轉為詞頻矩陣
????tfidf?=?transformer.fit_transform(vectorizer.fit_transform(corpus))
????#獲取詞袋模型中的所有詞語??
????word?=?vectorizer.get_feature_names()
????
????#將tf-idf矩陣抽取出來,元素w[i][j]表示j詞在i類文本中的tf-idf權重
????weight?=?tfidf.toarray()
????#打印特征向量文本內容
????print?‘Features?length:?‘?+?str(len(word))
????resName?=?“BHTfidf_Result.txt“
????result?=?codecs.open(resName?‘w‘?‘utf-8‘)
????for?j?in?range(len(word)):
????????result.write(word[j]?+?‘?‘)
????result.write(‘\r\n\r\n‘)
????#打印每類文本的tf-idf詞語權重,第一個for遍歷所有文本,第二個for便利某一類文本下的詞語權重??
????for?i?in?range(len(weight)):
????????#print?u“-------這里輸出第“?i?u“類文本的詞語tf-idf權重------“??
????????for?j?in?range(len(word)):
????????????#print?weight[i][j]
????????????result.write(str(weight[i][j])?+?‘?‘)
????????result.write(‘\r\n\r\n‘)
????result.close()
????########################################################################
????#???????????????????????????????第二步?聚類Kmeans
????
????print?‘Start?Kmeans:‘
????from?sklearn.cluster?import?KMeans
????clf?=?KMeans(n_clusters=4)???#景區?動物?人物?國家
????s?=?clf.fit(weight)
????print?s
????‘‘‘
????print?‘Start?MiniBatchKmeans:‘
????from?sklearn.cluster?import?MiniBatchKMeans
????clf?=?MiniBatchKMeans(n_clusters=20)
????s?=?clf.fit(weight)
????print?s
????‘‘‘
????#中心點
????print(clf.cluster_centers_)
????
????#每個樣本所屬的簇
????label?=?[]???????????????#存儲1000個類標?4個類
????print(clf.labels_)
????i?=?1
????while?i?<=?len(clf.labels_):
????????print?i?clf.labels_[i-1]
????????label.append(clf.labels_[i-1])
????????i?=?i?+?1
????#用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數??958.137281791
????print(clf.ine
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????1046459??2016-01-17?09:14??python?kmeans\01_All_BHSpider_Content_Result.txt
?????文件???????4722??2016-01-20?05:02??python?kmeans\01_sklearn_tfidf_cluster_content.py
?????目錄??????????0??2016-01-20?05:02??python?kmeans
-----------?---------??----------?-----??----
??????????????1051181????????????????????3
- 上一篇:mysqldb64位
- 下一篇:圍棋截屏圖片掃描工具
評論
共有 條評論