使用RAKE简单实现关键词提取

2024-04-06 03:04

本文主要是介绍使用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简单实现关键词提取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878844

相关文章

Java StringBuilder 实现原理全攻略

《JavaStringBuilder实现原理全攻略》StringBuilder是Java提供的可变字符序列类,位于java.lang包中,专门用于高效处理字符串的拼接和修改操作,本文给大家介绍Ja... 目录一、StringBuilder 基本概述核心特性二、StringBuilder 核心实现2.1 内部

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——