本文主要是介绍使用RAKE简单实现关键词提取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 算法说明
- 算法步骤
- 提取可能的关键词
- spacy处理文本
- 注意:关键词不是token
- 对关键词所含的每个token进行评分
- 对于关键词进行评分计算和排序返回
- 算法分析
算法说明
RAKE的全称叫做Rapid Automatic Keyword Extraction,是一个用来自动从文章中抽取关键词的简单的算法。它的思想是对文本进行切分得到可能的关键词,对于关键词中所含的token根据频率等角度进行评分,最后对于关键词进行评分返回评分最高的作为选择的关键词。
算法步骤
提取可能的关键词
第一步是需要把句子切分成为可能的关键词。一般使用停用词和标点进行切分。认为停用词和标点之间的内容就是可能的关键词。
spacy处理文本
在处理文本的时候,我们手动处理的效率和正确率都不一定准确,这个时候比较好的方式就是可以借用spacy库来处理。
import spacy
sentence = "today is a sunny day!"
nlp = spacy.load("en_core_web_sm", disable=['parse', 'ner'])
doc = nlp(sentence)
spacy会帮助我们对于句子进行tokenization, 并且有对于每个token,可以使用token.is_stop, token.is_punct的方式来去掉停用词或者标点符号。
想要查看包含的停用词有哪些?
stop_words = nlp.Defaults.stop_words
stop_words
注意:关键词不是token
我们用token处理但是不代表关键词就是token。关键词可能是多个token组成的
对关键词所含的每个token进行评分
第二步就是对于第一步抽取出来的每个关键词中包含的token进行评分,评分的公式为:
score ( t ) = deg ( t ) freq ( t ) \text{score}(t) = \frac{\text{deg}(t)}{\text{freq}(t)} score(t)=freq(t)deg(t)
其中freq(t)指的是某个token在文档中出现的总的次数,deg(t)指的是这个tokne和其他的token一起出现的次数。简单的解释就是,如果一共有两个关键词
key1和key2
key1中有token1, token2, token3, token4
key2中有token2, token6, token5
那么和token1一起出现的词的个数就是4个,和token2一起出现的词的个数就是4+3 = 7个
对于关键词进行评分计算和排序返回
在计算得到上述的评分之后,我们可以发现,其实这个评分是针对于token的,但是我们想要的其实是对于关键词的评分,计算的方式是将每个关键词中的token的得分进行加和就能得到最后的关键词的评分。最后将这个评分进行排序,选出评分较高的作为关键词。
算法分析
(1)优势
相比于TextRank的方法来说,RAKE的计算更快
Rose S, Engel D, Cramer N, et al. Automatic keyword extraction from individual documents[J]. Text mining: applications and theory, 2010: 1-20.
(2)劣势
当文本的停用词不全面的时候,输出的词可能是非常长并且不相关的
M. G. Thushara, T. Mownika and R. Mangamuru, “A Comparative Study on different Keyword Extraction Algorithms,” 2019 3rd International Conference on Computing Methodologies and Communication (ICCMC), Erode, India, 2019, pp. 969-973, doi: 10.1109/ICCMC.2019.8819630.
这篇关于使用RAKE简单实现关键词提取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!