一、主要步骤

语料加载->分词->去停用词->抽取词向量模型特征->基于tf-idf和word2vec进行kmeans中文文本聚类

import random
import jieba
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfTransformer
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import gensim
from gensim.models import Word2Vec
from sklearn.preprocessing import scale
import multiprocessing
#加载停用词,txt内容可以随项目进行改变
stopwords = pd.read_csv('stopword.txt',index_col=False,quoting=3,sep='\t',names=['stopwords'],encoding='utf-8')
stopwords = stopwords['stopwords'].values
#加载语料库
data = pd.read_csv('data.csv',encoding='utf-8',seq=',')
data.dropna(inplace=True)
data = data.segment.values.tolist()#dataframe转为list
#分词、去停用词
def preprocess(data):for line in data:try:segs = jieba.lcut(line)  #分词segs = [v for v in segs if not str(v).isdigit()]#取数字segs = list(filter(lambda x:x.strip(),segs)) #去左右空格segs = list(filter(lambda x:len(x)>1,segs)) #去掉长度为1的字符segs = list(filter(lambda x:x not in stopwords,segs)) #去掉停用词sentences.append("".join(segs))except Exception:print(line)continuereturn sentences
sentences = preprocess(data)
#抽取词向量特征,tf-idf
#将文本中的词语转换为词频矩阵 矩阵元素a[i][j] 表示j词在i类文本下的词频
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5)
#统计每个词语的tf-idf权值
transformer = TfidfTransformer()
# 第一个fit_transform是计算tf-idf 第二个fit_transform是将文本转为词频矩阵
tfidf = transformer.fit_transform(vectorizer.fit_transform(sentences))
# 获取词袋模型中的所有词语
word = vectorizer.get_feature_names()
# 将tf-idf矩阵抽取出来,元素w[i][j]表示j词在i类文本中的tf-idf权重
weight = tfidf.toarray()
#查看特征大小
print ('Features length: ' + str(len(word)))
#基于tf-idf进行kmeans聚类,也可以使用基于密度的DBSCAN和层次聚类等算法
numClass=4 #聚类分几簇
clf = KMeans(n_clusters=numClass, max_iter=10000, init="k-means++", tol=1e-6)
pca = PCA(n_components=10)  # 降维
TnewData = pca.fit_transform(weight)  # 载入N维
s = clf.fit(TnewData)
#可视化聚类结果def plot_cluster(result,newData,numClass):plt.figure(2)Lab = [[] for i in range(numClass)]index = 0for labi in result:Lab[labi].append(index)index += 1color = ['oy', 'ob', 'og', 'cs', 'ms', 'bs', 'ks', 'ys', 'yv', 'mv', 'bv', 'kv', 'gv', 'y^', 'm^', 'b^', 'k^','g^'] * 3 for i in range(numClass):x1 = []y1 = []for ind1 in newData[Lab[I]]:# print ind1try:y1.append(ind1[1])x1.append(ind1[0])except:passplt.plot(x1, y1, color[I])#绘制初始中心点x1 = []y1 = []for ind1 in clf.cluster_centers_:try:y1.append(ind1[1])x1.append(ind1[0])except:passplt.plot(x1, y1, "rv") #绘制中心plt.show()
#对数据降到2维,为了更好的表达和获取更具代表性的信息,在可视化的时候一般先用PCA进行降维,再使用TSNE进行降维
pca = PCA(n_components=4)  # 输出两维
newData = pca.fit_transform(weight)  # 载入N维
from sklearn.manifold import TSNE
newData =TSNE(2).fit_transform(newData)
result = list(clf.predict(newData))
plot_cluster(result,newData,numClass)

【NLP】NO5:文本聚类相关推荐

  1. 【NLP】文本LDA主题聚类主题词生成PyLDAvis可视化

    [NLP]文本LDA主题聚类&主题词生成&可视化 LDA主题聚类 这是NLP中常用的一类方法,一般Sklearn,genism里有可以实现.一般结果会有文档-主题model(即说明每个 ...

  2. 新手探索NLP(十二)——文本聚类

    简介 聚类又称群分析,是数据挖掘的一种重要的思想,聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点.聚类分 ...

  3. 系统学习NLP(二十)--文本聚类

    转自:https://zhuanlan.zhihu.com/p/40991165 1:什么是文本聚类 先说说聚类的概念,聚类又称群分析,是数据挖掘的一种重要的思想,聚类(Cluster)分析是由若干模 ...

  4. 基于聚类算法的文本热点问题挖掘算例实现(文本聚类)

    在现实生活中,有时候我们可能得到一大堆无标签文本,这时候可能需要对文本进行聚类挖掘,找出热点问题是什么. 文本聚类 第一步:数据读取 import pandas as pd import re imp ...

  5. [Pyhon疫情大数据分析] 三.新闻信息抓取及词云可视化、文本聚类和LDA主题模型文本挖掘

    思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图显示.情感分析.舆情分析.主题挖掘.威胁情报溯源.知识图谱.预测预警及AI和NL ...

  6. nlp算法文本向量化_NLP中的标记化算法概述

    nlp算法文本向量化 This article is an overview of tokenization algorithms, ranging from word level, characte ...

  7. 对比学习有多火?文本聚类都被刷爆了…

    文 | 花小花Posy 大家好,我是小花. 对比学习的大火???? 越来越旺了,已然从CV蔓延到NLP了.今天给大家介绍的正是一篇将对比学习应用到文本聚类上的工作,NAACL21新鲜出炉的paper- ...

  8. SinglepassTextCluster项目:基于single-pass算法思想的自动文本聚类组件

    项目的背景 SinglepassTextCluster, an TextCluster tool based on Singlepass cluster algorithm that use tfid ...

  9. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  10. python数据分析:新闻文本聚类

    文本聚类 文本聚类就是要在一堆文档中,找出哪些文档具有较高的相似性,然后可以针对这些相似性文档的聚合进行类别划分.文本聚类应用场景:提供大规模文档集进行类别划分并提取公共内容的概括和总览:找到潜在的各 ...

最新文章

  1. 如何使用Navicat恢复数据库脚本
  2. java.lang包中的常用类
  3. linux内核杂记(5)-进程终结
  4. oa项目经验描述_OA系统为企业带来多少实用价值?移动OA又为企业解决哪些问题?...
  5. 灵魂拷问:到底要不要写单元测试,如何正确进行单元测试?
  6. Linux下QT创建项目错误处理
  7. php和java的一些比较
  8. Centos7.4安装Mysql5.6
  9. 【编程题目】求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case和条件语句...
  10. Shine——更简单的Android网络请求库封装
  11. python平方上标怎么输出,plot绘图同样适用
  12. PHP implode和explode用法
  13. 陈旧语法密度之六——用Map消灭if-else if-else,“上帝代码”
  14. 0927锚框(Anchor box)
  15. Smoke Loader、AZORult木马通过虚假海啸警报传播到了日本
  16. python使用pandas处理excel数据
  17. oppo手机的屏幕常亮问题
  18. MyEcplise_Maven搭建SSM框架
  19. 杭电OJ1001 C
  20. KV260 AI入门开发套件简介

热门文章

  1. python编程期末试题_大学moocPython编程基础期末考试答案
  2. windows服务器查看lls证书
  3. 2021-08-22
  4. __attribute__((weak)) 简介及作用
  5. oracle虚拟用户是什么意思,配置vsftp基于虚拟用户认证
  6. 帝国cms 图集模型 php,帝国CMS教程图集字段的大图,小图,说明的调用
  7. 【转载】Confluence(wiki)配置数据库及修改数据库地址
  8. 雅诗兰黛公司以2019年乳腺癌防治运动团结全世界并带来希望
  9. 线段树--暴力修改专题浅谈
  10. c语言乘法运算结果小数位数,如何用c语言计算小数点后位数