python 文本聚类算法
三体下载
将下载的文件重命名为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
# 是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词
window = 5
# 设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃
min_count = 1
# 是训练的进程数,默认是当前运行机器的处理器核数。
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训练模型 @TODO 训练后注释
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") #设置文件对象
std= g.read() #将txt文件的所有内容读入到字符串str中
g.close() #将文件关闭cc=std.split(' ')dd=[]
kkl=dict()'''
将每个词语向量化,并且append 在dd中,形成一个二维数组
并形成一个字典,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#将二维数组转化成numpydd1=np.array(dd)from sklearn.cluster import KMeans estimator = KMeans(n_clusters=100) # 构造聚类器
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个数据')ffg=kkp[vindex][:10]ffg1=list(set(ffg))print(ffg1)
第 0 类的前10个数据
['商讨', '合集\u200b', '连载', '刘慈欣简介', '无奈', '编辑', '事先', '题材', '一二三', '今年']第 1 类的前10个数据
['的']
第 2 类的前10个数据
['本书', '活', '举', '作者', '看做', '没想到', '朋友', '见面', '主人公', '十分之一']
第 3 类的前10个数据
['延续', '虽', '球状', '更是', '占', '文革', '部', '冷酷']
第 4 类的前10个数据
[nan, '物理学家', '闪电', '怎样', '一年', '一时', '往事', '关于', '却是']
第 5 类的前10个数据
['人类文明', '一段', '试图', '光年', '重新', '星空', '死亡', '内容']
第 6 类的前10个数据
['不了', '大家', '写', '仔细', '有时', '空灵', '许多', '如何', '966', '心中']
第 7 类的前10个数据
['精神', '故事', '科幻', '方式', '永远', '之前']
第 8 类的前10个数据
['里面', '冷兵器', '了', '自己', '立刻', '中', '已', '顶上']
第 9 类的前10个数据
['在', '的']
python 文本聚类算法相关推荐
- Python基于聚类算法实现密度聚类(DBSCAN)计算
本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...
- 六种常用的文本聚类算法介绍
文本聚类算法介绍 分类和聚类都是文本挖掘中常使用的方法,他们的目的都是将相似度高的对象归类,不同点在于分类是采用监督学习,分类算法按照已经定义好的类别来识别一篇文本,而聚类是将若干文本进行相似度比较, ...
- 文本聚类算法Java实现
蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这 ...
- 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】
密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...
- 基于神经网络语言模型的中文新闻文本聚类算法
一.新闻文本集 其中 通过TF-IDF排序 中的词(由大到小),选择其中的 t 个词作为关键字,,是对应关键字的TF-IDF值. 二.神经网络语言模型 输入:该词的上下文中相邻的几个词向量(词袋模 ...
- 手动实现简单的 文本聚类算法 词袋模型+consin相似度+UPGMA聚类
全手写文本聚类算法 词袋模型-->consin相似度-->UPGMA聚类 punctunation = [",", ":", ".&quo ...
- 大数据项目13(Python实现聚类算法)
Python实现聚类算法 一.k-means 聚类算法思想 1. 分步解析 2. 代码 3.结果 一.k-means 聚类算法思想 先随机选择k个聚类中心,把集合里的元素与最近的聚类中心聚为一类,得到 ...
- [python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像
0 前言 本文主要讲述以下几点: 1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词): 2.调用scikit-learn中 ...
- python谱聚类算法_谱聚类Spectral clustering(SC)
在之前的文章里,介绍了比较传统的K-Means聚类.Affinity Propagation(AP)聚类.比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian ...
最新文章
- 自学python方法-你是如何自学 Python 的?
- java oracle的2种分页方法
- python rs232_Python监视串口(RS-232)握手信号
- Java开发 - 异常 - 使用throws
- VSCode调试Python时终端输出中文乱码解决方法2
- COM学习(四)——COM中的数据类型
- 合理安排计算顺序避免溢出
- 4月26 simulink数据input,与全局变量建立堆栈
- 具有system权限的进程无法访问sdcard
- 域服务器系统建设方案,AD域及Exchange部署专项方案.doc
- 服务器阵列卡缓存显示错误,服务器阵列卡(缓存)
- Lua热补丁方案(HotFix)
- RPA进阶(二)Uipath应用实践
- IBM Tivoli Storage Manager安装介绍
- 解决路由器登录页被维盟智能路由管理系统拦截
- 消费者需求研究能够解决什么问题
- 一个感人的爱情故事(中英对照)
- 关系型数据库由哪三部分组成_关系数据库| 第2部分
- Graphite的安装与部署
- java基础--Java入门
热门文章
- cocos2dx 引入 libpomelo库
- Python Tornado
- SpringCloud2.0入门4-springboot-admin监控
- SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。
- 2017202110104-高级软件工程2017第8次作业—个人总结
- 探寻教育信息化着力点,创新四川省教育厅IT管理
- Ubuntu Linux中使用快捷键截图选定区域
- 用匈牙利算法求二分图的最大匹配
- [基础|理论|实验]Sizeof与Strlen的区别与联系
- mysql 用一条sql语句修改两个表里的内容,一条sql语句update更新两个表