三體下載
將下載的文件重命名為santi.txt,放在文件的目錄下
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 1 18:31:11 2018@author: luogan
"""import jieba
import re
from gensim.models import word2vec
import multiprocessing
import gensim
import numpy as np
import pandas as pd
import collections
import pandas def segment_text(source_corpus, train_corpus, coding, punctuation):'''切詞,去除標點符號:param source_corpus: 原始語料:param train_corpus: 切詞語料:param coding: 文件編碼:param punctuation: 去除的標點符號:return:'''with open(source_corpus, 'r', encoding=coding) as f, open(train_corpus, 'w', encoding=coding) as w:for line in f:# 去除標點符號line = re.sub('[{0}]+'.format(punctuation), '', line.strip())# 切詞words = jieba.cut(line)w.write(' '.join(words))#if __name__ == '__main__':# 嚴格限制標點符號
strict_punctuation = '。,、':∶;?‘’“”〝〞?ˇ﹕︰﹔﹖﹑·¨….?;!′?!~—ˉ|‖"〃`@﹫??﹏﹋﹌︴々﹟#﹩$﹠&﹪%*﹡﹢﹦﹤‐ ̄ˉ―﹨??﹍﹎+=<--__-\ˇ~﹉﹊()〈〉??﹛﹜『』〖〗[]《》〔〕{}「」【】︵︷︿︹︽_﹁﹃︻︶︸﹀︺︾ˉ﹂﹄︼'
# 簡單限制標點符號
simple_punctuation = '’!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
# 去除標點符號
punctuation = simple_punctuation + strict_punctuation# 文件編碼
coding = 'utf-8'#coding ="gb18030"
# 原始語料
source_corpus_text = 'santi.txt'# 是每個詞的向量維度
size = 10
# 是詞向量訓(xùn)練時的上下文掃描窗口大小,窗口為5就是考慮前5個詞和后5個詞
window = 5
# 設(shè)置最低頻率,默認是5,如果一個詞語在文檔中出現(xiàn)的次數(shù)小于5,那么就會丟棄
min_count = 1
# 是訓(xùn)練的進程數(shù),默認是當前運行機器的處理器核數(shù)。
workers = multiprocessing.cpu_count()
# 切詞語料
train_corpus_text = 'words.txt'
# w2v模型文件
model_text = 'w2v_size_{0}.model'.format(size)# 切詞 @TODO 切詞后注釋
segment_text(source_corpus_text, train_corpus_text, coding, punctuation)# w2v訓(xùn)練模型 @TODO 訓(xùn)練后注釋
sentences = word2vec.Text8Corpus(train_corpus_text)
model = word2vec.Word2Vec(sentences=sentences, size=size, window=window, min_count=min_count, workers=workers)
model.save(model_text)# 加載模型
model = gensim.models.Word2Vec.load(model_text)g= open("words.txt","r") #設(shè)置文件對象
std= g.read() #將txt文件的所有內(nèi)容讀入到字符串str中
g.close() #將文件關(guān)閉cc=std.split(' ')dd=[]
kkl=dict()'''
將每個詞語向量化,并且append 在dd中,形成一個二維數(shù)組
并形成一個字典,index是序號,值是漢字
'''
for p in range(len(cc)):hk=cc[p]if hk in model:vec=list(model.wv[hk])dd.append(vec)kkl[p]=hk#將二維數(shù)組轉(zhuǎn)化成numpydd1=np.array(dd)from sklearn.cluster import KMeans estimator = KMeans(n_clusters=100) # 構(gòu)造聚類器
estimator.fit(dd1) # 聚類
label_pred = estimator.labels_ # 獲取聚類標簽#index 是某條向量的序號,值是分類號
index1=list(range(len(dd1)))
vc=pd.Series(label_pred,index=index1)aa = collections.Counter(label_pred)
v = pandas.Series(aa)
v1=v.sort_values(ascending=False)for n in range(10):vc1=vc[vc==v1.index[n]]vindex=list(vc1.index)kkp=pd.Series(kkl)print('第',n,'類的前10個數(shù)據(jù)')ffg=kkp[vindex][:10]ffg1=list(set(ffg))print(ffg1)
第 0 類的前10個數(shù)據(jù)
['商討', '合集\u200b', '連載', '劉慈欣簡介', '無奈', '編輯', '事先', '題材', '一二三', '今年']第 1 類的前10個數(shù)據(jù)
['的']
第 2 類的前10個數(shù)據(jù)
['本書', '活', '舉', '作者', '看做', '沒想到', '朋友', '見面', '主人公', '十分之一']
第 3 類的前10個數(shù)據(jù)
['延續(xù)', '雖', '球狀', '更是', '占', '文革', '部', '冷酷']
第 4 類的前10個數(shù)據(jù)
[nan, '物理學(xué)家', '閃電', '怎樣', '一年', '一時', '往事', '關(guān)于', '卻是']
第 5 類的前10個數(shù)據(jù)
['人類文明', '一段', '試圖', '光年', '重新', '星空', '死亡', '內(nèi)容']
第 6 類的前10個數(shù)據(jù)
['不了', '大家', '寫', '仔細', '有時', '空靈', '許多', '如何', '966', '心中']
第 7 類的前10個數(shù)據(jù)
['精神', '故事', '科幻', '方式', '永遠', '之前']
第 8 類的前10個數(shù)據(jù)
['里面', '冷兵器', '了', '自己', '立刻', '中', '已', '頂上']
第 9 類的前10個數(shù)據(jù)
['在', '的']
總結(jié)
以上是生活随笔為你收集整理的python 文本聚类算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。