相关动态
python中文短文本的预处理及聚类分析(NLP)
2024-11-10 17:04

对于中文短文本而言,其有着单个文本词量少,文本多等特点,并且在不同的领域中中文短文本有着不同的特点。本文以已获取的微博语料出发,使用DBSCAN密度聚类,并对其进行简单可视化。 #说明: 1-本文所有程序都已实现跑通,可直接复制调试,输入的文档为文本文档.txt,编码格式为utf-8(可以在另存为之中修改编码格式,默认为ANSI,注意每一行为一个短文本样本即可。 2-本文以python3.7为语言环境,使用到的jieba,sklearn等扩展包需要提前安装好。

python中文短文本的预处理及聚类分析(NLP)

1.1 去除文本噪音

对于原始文本,总会有很多东西是我们不需要的,比如标点、网址来源、表情转换符([西瓜]、[大笑])等,如下图所示。 图1 微博原始数据 因此我们首先读取记事本中的内容,并按照每行的格式保存到python列表list中,代码如下所示

 

接着,我们就可以对于储存到列表corpus中的每个预料字符串进行去噪了,在这里使用的是re库中的sub函数,为了方便阅读和修改,所以以罗列的方式展现,代码如下所示

 

1.2 jieba分词

接着,我们在只剩下汉语的stripcorpus列表中,将字符串长度小于5的去除,并使用jieba进行分词,代码如下所示

 

到此,我们完成了对于原始语料的基本处理,最终得到的处理后的语料列表和词性字典如下图所示。 在这里插入图片描述 在这里插入图片描述 可以看到上面的cutcorpus语料库中,有一些词语是我们不需要的(如“我”,“了”等,因为后续在进行特征提取时会按照词性进行权重赋值,所以在这里并没有按照专用词和停用词词典进行筛选。

说到短文本的特征提取,最著名也是目前用的最多普适性最强的就是TF-IDF的词频特征提取了,当然对于不同类型的短文本TF-IDF方法有着不一样的缺点,因此在短文本特征提取这一块有着很多各式各样的小论文,改参数,改进公式,就可以写一篇小论文了,但是这些论文中真正具有普适性的较少。 在这里,我们首先使用标准的python sklearn库中的TfidfTransformer和CountVectorizer来获取每个短文本的特征向量,从而组成整个样本特征X,代码如下所示

 

其中weight就是特征矩阵X,word是X中每一维度特征对应的词。weight的大小在这里是(20097205,word的大小(72051)。其实到这里,已经可以用weight去聚类了,但是要知道在短文本中TF-IDF方法本质是提取词语的形状,和词语出现的顺序是无关的,所以从特征提取的角度而言是缺失了部分特征。 所以在这里,我们将word中每个词语的词性,通过自定义的方式赋给它们不同的权重,并乘到weight上的每一行样本中,进而改变它们的特征矩阵。这样做的目的其实是想让特征矩阵的区分能力增强一点,代码如下所示

 

为什么使用DNSCAN聚类不使用其他聚类方法呢?其实其他聚类方法也可以,只不过这个聚类算法口碑比较好,它也有它自己的优缺点,具体可以Google一下。 其实有了特征之后,聚类是一件很简单的事情(除了调参以外)。或者换句话说聚类很简单,聚出能用的类就很难了,这需要一定的耐心和方法,话不多说,代码如下

 

没错,就是sklearn三步走:调包、实例化、训练。值得注意的是,DBSCAN有两个主要的参数需要调整,一个是eps(我们可以将它理解为聚类那个圈的半径),一个是min_samples(最少多少个样本可以称之为一类)。关于聚类效果的可视化,我是先将多维数据通过PCA压缩到聚类种类那么多维的数据,再通过TSNE压缩到2维来描点作图,这样效果好点,代码如下所示

 

上面是一个简单的绘制效果的函数,下面调用一下这个函数,我们随意取一对参数值eps = 0.95,min_samples = 6,使用我们的新特征newweight进行训练,代码和得到的结果如下所示


    以上就是本篇文章【python中文短文本的预处理及聚类分析(NLP)】的全部内容了,欢迎阅览 ! 文章地址:http://changmeillh.xhstdz.com/quote/60720.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://changmeillh.xhstdz.com/mobile/ , 查看更多   
发表评论
0评