RAKE-无监督英文关键词提取算法

没想到吧,在深度学习大行其道的当今,我突然写了一篇上古时代的文章(其实也就2010年,奈何知识更新真快…)
话不多说,一起来看一下RAKE算法

RAKE

RAKE全称为Rapid Automatic Keyword Extraction,突出两个亮点:1. 快速,线上部署非常友好;2. 无监督,也即不需要大量有标签数据,0成本~

提取候选词

首先,使用停用词进行候选关键词的提取和切分,这里的停用词表非常关键,决定你候选词组切分的效果,候选词组切分不好,最终提取到的效果也会受影响。
候选词提取方法其实很简单:首先,构造停用词表,对一个句子中,两个停用词之间的短语进行切分(切分得到的,可能是短语,也可能是单词),从而得到多个候选词。
首先,构造停用词正则项:

stop_word_pattern = re.compile('|'.join(stop_word_regex_list), re.IGNORECASE)

其次,按停用词进行切分:

tmp = re.sub(stopword_pattern, '|', s.strip())

举个例子,原始句子如下:

text = "Compatibility of systems of linear constraints over the set of natural numbers. Criteria of compatibility of a system of linear Diophantine equations, strict inequations, and nonstrict inequations are considered. "

linear constraints前为停用词of, 后为停用词over,所以linear constraints会被切分成一个短语,上述句子切分后得到的候选关键词如下:

tmp_candidate_keywords = ["Compatibility", "systems", "linear constraints", "set", "natural numbers", "Criteria", "compatibility", "system", "linear Diophantine equations" "strict inequations", "nonstrict inequations", "considered".]

计算候选词得分

首先,分别计算(1)词频(freq(w)),即单词出现次数;(2)词组总长(deg(w)),即单词所在词组长度总和;(3)词组总长与词频的比例(deg(w)/freq(w))。
如上述例子tmp_candidate_keywords中,linear的词频freq(w)=2,词组总长deg(w)=2+3=5,因此该单词得分为deg(w)/freq(w)=5/2=2.5。
对每个单词都按上述方法计算得分后,可以得到每个单词的分数。
在这里插入图片描述
其次,计算短语得分:按每个单词的分数相加,得到短语得分。(由此可见,RAKE算法比较强调短语的结果,因为短语短语分数是由多个单词分词直接相加的,可以得到更高分数)
在这里插入图片描述
最后,按照得分进行排序,取前1/3的词组进行输出,作为最后的关键词结果。

实测效果

最后,来看一下效果。下图是在我们实际业务场景中提取到的关键词,总体效果还是很不错的:
在这里插入图片描述

参考:
Paper: Automatic keyword extraction from individual documents
Code: https://github.com/mpk001/RAKE-keywordsExtraction

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值