废话不多说,直接上干货。
要想利用你的机器实现对新闻自动识别分类,首先你需要准备以下几个东东:
1.语料库(人之所以能够对某些事物进行判断识别,是因为大脑之前有过记忆存储。机器也是!不过它学的比人类快,只要你把相关的语料下载到硬盘就等于你的机器已完成了对相关内容的学习。)
注:相关语料库的获取可以参考:http://www.jianshu.com/p/206caa232ded;我使用的是搜狗语料库。
2.在你机器上搭建好Python编译环境。(我安装的是Python3.4.2版本)
3.机器学习算法库(scikit-learn)的安装,可以参考:http://www.jianshu.com/p/21b758541825
4.搭建分词系统。(我使用的是jieba分词系统,具体如何搭建可以参考:http://www.th7.cn/Program/Python/201603/783911.shtml)
5.停用词库。(可以到:http://download.csdn.net/detail/qq_28155529/9890386进行下载,对应stopword.txt文件)
上面如果都准备好了,下面我们就开始进入搬砖模块了!
机器自动分类的总体流程图:
流程说明:
(1)要分类,首先要有一个分好类的训练语料库来作为我们分类参考的标准。语料库的构建可以通过爬虫自己爬取但是测试发现爬取太过于费时而且爬下来的新闻还是未分好类的,还需后期自己手动分类因此为了缩短项目开发周期,直接下载使用已分好类的搜狗语料库(http://www.sogou.com/labs/resources.html);
(2)拿到语料库后,针对这些原始语料,需要提取它们的特征,这样才能知道具备哪些特征的文本属于哪种类别。文本的特征主要是由一系列词性的词构成,所以要对文本进行分词,通过后期提取相关词性的词来达到获取文本特征的目的。(本项目使用的是jieba分词系统);
(3)分词之后,我们可以从整个原始语料库中提取出一定数量的代表性词汇(名词),提取到的名词可能包含停用词,还需要在提取的名词词库基础上去除停用词,获得最终的名词词库;
(4)统计词频,至于为什么要统计词频,就不用说了吧,一个词在某类文本里出现的次数越多,越能代表这一类文本。当然如果某个词在这一类文本里出现次数很多而在其他类文本里根本不出现,就更能代表这一类文本了。
(5)计算特征值,其实词的频率只是文本最重要的特征之一,如果只靠词的频率去判断文本的类别的话,显然正确率是很低的。本项目使用TF-IDF(是一种用于资讯检索与资讯探勘的常用加权技术)来对文本进行更深层度的特征提取。
TF-IDF综合表征了该词在文档中的重要程度和文档区分度。但在文本分类中单纯使用TF-IDF来判断一个特征是否有区分度是不够的。它没有考虑特征词在分类间的分布。如果一个特征词,在各个类间分布比较均匀,这样的词对分类基本没有贡献;但是如果一个特征词比较集中的分布在某个类中,而在其它类中几乎不出现,这样的词却能够很好代表这个类的特征,而TF-IDF不能区分这两种情况。没有考虑特征词在类内部文档中的分布情况。在类内部的文档中,如果特征词均匀分布在其中,则这个特征词能够很好的代表这个类的特征,如果只在几篇文档中出现,而在此类的其它文档中不出现,显然这样的特征词不能够代表这个类的特征。这时就要通过卡方检验(Chi-square)的计算方法得到数据字典。(卡方校验如下图)
(6)借助机器学习算法库(Scikit-learn)中的函数对上面进行过数据挖掘的语料库进行自动拆分,拆分为训练集(train)和测试集(test)。(本项目采用的是朴素贝叶斯算法进行分类训练)得到测试结果,测试结果显示对新闻分类的准确率维持在70%到80%之间。
代码部分说明:(太长了这里就不贴了,下载地址:http://download.csdn.net/detail/qq_28155529/9890386)
第一步:通过PHP连接MySQL数据库,把数据库新闻表中的每条新闻记录读取到指定文件夹下的txt文件中,每条记录对应一个txt文件,并以每条新闻记录的id作为txt文件的名;(目的:方便后面使用Python语言编写的脚本对新闻进行分类去重操作)------此步操作代码对应operation.php文件
第二步:把第一步从数据库读取到硬盘上的每条新闻,进行分词,去停用词,计算词频等一系列操作,得到每条新闻的最终特征;------此步操作代码对应Most_powerful.py文件
提示:之前下载的搜狗语料库也是经过了上面两步进行特征提取后才投入使用的。比对的时候不是直接拿数据库中的新闻和原始语料库(搜狗语料库)中的新闻直接进行比对,而是拿对数据库中每条新闻进行提取后的特征与经过特征提取后的特征搜狗语料库进行比对的哦
第三步:分别从待分类的文件夹和已分好类作为标准的搜狗语料库加载数据,进行分类判断。------此步操作代码对应collect.py文件。
第四步:最后把分好类的信息,传递给PHP文件,利用PHP把分好类的信息写入到MySQL数据库,完成机器自动分类操作。-----此步操作代码对应operation.php文件。
好了搬砖完成!