一种根据关键字进行分类的文本分类算法

这样我们可以得出这个算法的重点:

1.提取关键字

如何自动提取关键字呢?我们知道IDF值在一定程度上可以表达一个词的重要程度,像“我的”,“你的”这样的关键字肯定无法判断出文章的类别,他们的IDF值也是较低的。而“AK47”,“火箭炮”这样的关键字可以判断出文章类别,他们的IDF也比一般的词要高。所以,我们只需要选择IDF高于一定值的词,就可以提取出绝大多数关键字了。

2.关键字分类

识别关键字的类别也是一个大问题,如果手工识别是不现实的,网上也没有什么算法是进行关键字分类的。想来想去,最后还是用IDF值把这个问题给解决了。其实思路很简单,可以说是上面一个问题的一种延续。假设现在我们有军事,经济,人文的文本各100篇。将经济,人文的文章复制4次,这样,我们就有军事文本100篇,经济,人文的文本各500篇(注意,经济人文的文章都是有重复的,每篇文章存在4个完全相同的副本)。

然后我们计算这些文章的IDF值,想想会出现什么结果?我们知道IDF的计算公式是log(总文章数/出现次数)。假设关键字“AK47”在没进行处理之前,在10篇文章中出现,那么它的值为log(300/10)=log30=1.47.

处理之后,“AK47”出现的次数不变,但是总文章数已经变为1100篇,那么AK47的IDF值为:log(1100/10)=log110=2.04。我们可以看到,经过这样的处理,军事的关键字都得到了加权,但是经济,文化的关键字的IDF值变化很小。这样,我们就能够把军事的关键字同其他的关键字区分开来。

我做的实验中,分出的关键字至少80%是军事类别的,实际的例子就不贴出来了。有的朋友就会问了,那你是怎么进行文本分类的?难道也是手工分?

嘿嘿,这个当然不是了。分好类的文本来自于搜狗实验室(http://www.sogou.com/labs/dl/c.html)。上面的类别也只有几种,如果要做其他类别的样本,只要用爬虫抓取某个专业网站或者某一类新闻,然后进行分析出正文就OK了。我们的目标是尽量偷懒,呵呵。


解决了这两个难题,再回到算法本身来。首先,提取关键字,使得要比较的词语大大减少(我只提取15%~20%的关键字)。一篇1000字的文章词语也就那么300~400个,也就是说和一个类别比较50个关键字左右就可以判断出来了,也就是50次的hashmapping操作。然后,有几个类别就做几次判断,所以算法复杂度是O(m*n)。一般分成十几个类别已经很细了,整个算法复杂度不会很高。但是这个实验我没能做就申请离职了,伤心啊,我的心血都没了,如果以后有时间再实验下吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值