【python】爬虫篇:通过文章内容使用TF-IDF算法对文章进行分类(五)

本人菜鸡一只,八百多年前(当然这是夸张的手法),在我写下第一个爬虫篇的博客的时候,我给自己挖了一个坑!

在我的爬虫篇的第一篇文章中(链接如下,该系列总共有六篇文章)

【python】爬虫篇:python连接postgresql(一):https://blog.csdn.net/lsr40/article/details/83311860

【python】爬虫篇:python对于html页面的解析(二):https://blog.csdn.net/lsr40/article/details/83380938

【python】爬虫篇:python使用psycopg2批量插入数据(三):https://blog.csdn.net/lsr40/article/details/83537974

【pykafka】爬虫篇:python使用python连接kafka介绍(四):https://blog.csdn.net/lsr40/article/details/83754406

【python】爬虫篇:通过文章内容使用TF-IDF算法对文章进行分类(五): https://blog.csdn.net/lsr40/article/details/87281966

还有本文中提到的处理方式有具体整理过的代码:

【python】爬虫篇:最后一篇之TF-IDF分类代码篇(六):https://blog.csdn.net/lsr40/article/details/87385105

另外因为用到了kafka,所以对kafka做了些简单的介绍

【kafka】一、kafka框架介绍(消费者篇):https://blog.csdn.net/lsr40/article/details/84029034

【kafka】二、kafka框架介绍(消费者篇):https://blog.csdn.net/lsr40/article/details/84034394

 

 

其实爬虫篇从头到尾都在说爬取文章的正文和相关信息,然后存入数据库,其实这个步骤是为了后面分类做准备!!

1、前言:

文本的分类是根据著名学者吴军的著作《数学之美》中的第14章 余弦定理和新闻的分类中提供的思路来实现的,所以我是踩在前人帮大家搬的凳子上看世界的(在这里还是要向各位前辈们说声谢谢!),希望各位有机会可以拜读下他的作品

现有爬虫爬到的文章300W篇,约有50W是有分类标签的,其余的250W篇是没有标签的,由于该分析需要将正文文本内容做分析,因此从50W篇有分类的文章中抽取出25W(文章内容长度大于10)进行分析。

2、正文:

开始说说实现步骤:

2.1、分词

通过python的结巴分词,将25W(已有分类的文章)篇文章做分词,保留TF-IDF算法排名前五的名词(什么动词,停顿词基本都去掉了)

2.2、字典

将每篇文章生成的5个名词做去重,得到9W(具体是95206)个词,将这些词做成字典,存入表中

2.3、根据字典生成向量

根据字典将已有分类的文章做成一个高度为1,长度有95206的向量。

举例说明:

文章一包含的词有弹唱(该词的tf-idf值为0.67)

文章二包含的词有中国(0.08)和赛季(0.35)

字典词汇

中国

赛季

弹唱

香油

文章一0.00.00.670.0
文章二0.080.350.00.0

通过如上的方式可以获得25W个已有分类的向量

并且再选择正文内容长度大于10的未分类文章,也通过相同的字典,做成向量,不过抽取了20个词做向量(本次抽取了58W个)

2.4、到现在我有25W条已经有分类的向量,还有一部分没有分类的向量,接下来就是比较问题了!一条一条比较明显不现实(因为肯定很慢)。所以我用了一个看起来蠢但是确实能解决问题而且有点效果的方法,将所有相同分类的向量相加,然后求出该分类的平均向量,假设我有20个分类,那样每条数据只需要比较20次,然后其实我不太有把握程序会多准,所以我保留了匹配度高的前三个分类!

结果大概如下(我就截了一条数据):

字段

分类(前面的数字是匹配度,数字越大匹配度越高)

content(正文)

数据
{"(8.2,旅游)","(0.94,科技互联网)","(0.54,工业农业)"}
唐山景点特惠电子门票明细周边游:特惠电子门票明细80元

我粗略的看了下结果,个人感觉还是很靠谱的(能用,可行)!

 

缺陷和需要提升的地方:

-1.优化了余弦公式的计算(效果不明显,书中有说,其实就是分母计算一次,然后存成一个变量,不进行每次重复的计算)

-2.再次筛选了向量(筛选后剩下22W),主要去掉了分类有乱码,分类为“其他”的向量(效果不明显)

-3.现有的分类并不能囊括所有情况,例如,游戏类的文章,没有游戏的分类,因此被强行分到体育类中,所以,分类初期还是需要人工的判断

-4.比较的时间还是较长,虽然优化了比较算法,但是现在24小时也只能比较4W--5W篇新文章,速度还是很差(是否要使用多线程或者多进程的方式或者采用其他的语言来处理,因为我觉得python虽然好写,但是运算偏慢,当然只是我的个人见解,也可能是我确实对python不了解)

好了,这篇文章其实把总体的实现思路都说明了,如果有问题欢迎留言,我会写这篇文章,也是因为这个分类方式可行,精准度还是可以接受的,当然也是有可以优化的地方,下一篇文章中,我会附上具体代码!敬请期待~

本人菜鸡一只,如果有什么说错的地方,还请各位批评指出,本人坚决改正!如果有疑问欢迎留言讨论~


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值