TextRank 算法

第1关:Jieba 在关键词提取中的应用

任务描述

本关任务:根据本关所学有关使用 Jieba 库进行关键词提取的知识,编写使用 Jieba 模块进行关键词提取的程序,并通过所有测试用例。

相关知识

为了完成本关任务,你需要掌握:

  1. Jieba 模块的使用;

  2. Jieba 提取关键词的方法。

Jieba 关键词提取

jieba 库是一款优秀的 Python 第三方自然语言处理库,在我们的实际开发过程中,jieba 库是我们的好帮手,本实训将介绍 jieba 在关键词提取方面的应用。再利用 jieba 进行关键词提取时,有两种方式,一种是基于 TF-IDF 算法,一种是基于 TextRank 算法。接下来我们具体介绍这两种方式。

基于 TF-IDF 算法的关键词抽取

TF-IDF 算法是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的一份文件的重要程度,即一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能够代表该文章。

示例:使用 jieba 中的 TF-IDF

 
  1. import jieba.analyse
  2. jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

函数中各个参数的具体含义为:

  • sentence 为待提取的文本;

  • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为20;

  • withWeight 为是否一并返回关键词权重值,默认值为 False ;

  • allowPOS 仅包括指定词性的词,默认值为空,即不筛选。

在使用 jieba 的 TF-IDF 算法时,需要注意的是,idf 的值是通过语料库统计得到的,所以,实际使用时,可能需要依据使用环境,替换为对应的语料库统计所得 idf 值;需要从分词结果中去除停用词;如果指定了仅提取指定词性的关键词,则词性分割非常重要,词性分割中准确程度,影响关键字的提取。

基于 TextRank 算法的关键词抽取

TextRank 采用图的思想,将文档中的词表示成一张无向有权图,词为图的节点,词之间的联系紧密程度体现为图的边的权值;计算词的权重等价于计算图中节点的权重;提取关键字,等价于找出图中权重排名 TopK 的节点。

示例:使用 jieba 中的 TextRank

 
  1. jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=("ns","n","vn","v")) # 直接使用,接口相同,注意默认过滤词性。
  2. jieba.analyse.TextRank() # 新建自定义 TextRank 实例

函数中各个参数的具体含义为:

  • sentence 为待提取的文本;

  • topK 为返回几个 TextRank 权重最大的关键词,默认值为20;

  • withWeight 为是否一并返回关键词权重值,默认值为 False ;

  • allowPOS 仅包括指定词性的词,默认值非空。

其基本思想为:将待抽取关键词的文本进行分词;以固定窗口大小(默认为5,通过 span 属性调整)、词之间的共现关系构建图;计算图中节点的 PageRank ,注意是无向带权图。

编程要求

在右侧编辑器中的 Begin-End 之间补充 Python 代码,使用 jieba 模块对所输入文本进行关键词提取,并输出前三个关键词。其中文本内容通过 input 从后台获取。

测试说明

测试输入: 以上信息提示,武汉疫情快速上升态势得到控制,湖北除武汉外,局部爆发的态势也得到控制,湖北以外省份疫情形势积极向好。下一步要从统筹推进疫情防控和经济社会发展出发,紧紧围绕社区防控和医疗救治两个重点,由全面防控向群专结合,精准防控转变。

预期输出:

 
  1. Building prefix dict from the default dictionary ...
  2. Dumping model to file cache /tmp/jieba.cache
  3. Loading model cost 1.309 seconds.
  4. Prefix dict has been built successfully. # 接口调用附加信息
  5. 疫情 武汉 湖北
import jieba.analyse
import warnings
warnings.filterwarnings("ignore")
sentence = input()# 任务:基于jieba中的TF-IDF算法完成对sentence的关键词提取,提取前三个关键词并以一行输出
# ********** Begin *********#kw = jieba.analyse.extract_tags(sentence,topK=3,withWeight=False,allowPOS=())
ans = ''
for w in kw:ans += w + ' 'print(ans)
# ********** End **********#

第2关:TextRank 算法

任务描述

本关任务:根据所学有关 TextRank 算法的知识,完成 TextRank 算法程序的编写并通过所有测试用例。

相关知识

为了完成本关任务,你需要掌握:

  1. PageRank 算法的思想;

  2. TextRank 算法的步骤与特点。

PageRank 算法

TextRank 算法的基本思想来源于 Google 的 PageRank 算法。因此在介绍TextRank 算法之前,我们先了解一下 PageRank 算法。PageRank 算法主要用于对在线搜索结果中的网页进行排序。让我们通过一个例子快速理解这个算法的基础。

图1

假设我们有4个网页——w1​,w2​,w3​,w4​。这些页面包含指向彼此的链接。有些页面可能没有链接,这些页面被称为悬空页面。

webpagelinks
w1[w4,w2]
w2[w3,w1]
w3[ ]
w4[w1]

如上表所示,各个网页之间的关系有:

  • w1​ 有指向 w2​、w4​ 的链接;

  • w2​ 有指向 w3​ 和 w1​ 的链接;

  • w4​ 仅指向 w1​ ;

  • w3​ 没有指向的链接,因此为悬空页面。

为了对这些页面进行排名,我们必须计算一个称为 PageRank 的分数。这个分数是用户访问该页面的概率。

为了获得用户从一个页面跳转到另一个页面的概率,我们将创建一个正方形矩阵 M,如图2所示,它有 n 行和 n 列,其中 n 是网页的数量。

图 2 正方形矩阵

矩阵中的每个元素表示从一个页面链接进另一个页面的可能性。如图3所示,高亮的方格包含的是从 w1​跳转到 w2​ 的概率。

图 3 概率正方形矩阵

如下是概率初始化的步骤:

  1. 从页面 i 连接到页面 j 的概率,也就是 M[i][j] ,初始化为1/页面i的出链接总数wi

  2. 如果页面 i 没有到页面 j 的链接,那么 M[i][j] 初始化为 0 ;

  3. 如果一个页面是悬空页面,那么假设它链接到其他页面的概率为等可能的,因此 M[i][j] 初始化为1/页面总数

因此在本例中,矩阵 M 初始化后如图4所示:

图 4 初始化后的矩阵

最后,这个矩阵中的值将以迭代的方式更新,以获得网页排名。

TextRank 算法

掌握了 PageRank 算法后,让我们理解 TextRank 算法。两种算法的相似之处列举如下:

  • 用句子代替网页;

  • 任意两个句子的相似性等价于网页转换概率;

  • 相似性得分存储在一个方形矩阵中,类似于 PageRank 的矩阵 M 。

图 5 TextRank 算法

TextRank 算法是一种抽取式的无监督的文本摘要方法。其步骤如下:

  1. 把所有文章整合成文本数据;

  2. 把文本分割成单个句子;

  3. 为每个句子找到向量表示(词向量);

  4. 计算句子向量间的相似性并存放在矩阵中;

  5. 将相似矩阵转换为以句子为节点、相似性得分为边的图结构,用于句子 TextRank 计算;

  6. 一定数量的排名最高的句子构成最后的摘要。

编程要求

在右侧编辑器中的 Begin-End 之间补充 Python 代码,实现 TextRank 算法,完成对所输入文本的关键词提取,输出前三个关键词。其中文本内容通过 input 从后台获取。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

测试输入: 在抗击新型冠状病毒的特殊时期,有这样一群人,面对疫情,他们逆向而行,穿梭在辖区的街头巷尾。一只口罩、一双手套,简单的防护措施,就是他们为自己武装的勇气。作为抗击疫情战场上不可或缺的组成部分,社区工作者们用爱筑起了疫情防控的第一道防线。

预期输出:

 
  1. Building prefix dict from the default dictionary ...
  2. Dumping model to file cache /tmp/jieba.cache
  3. Loading model cost 1.259 seconds.
  4. Prefix dict has been built successfully.# 接口调用的附加信息
  5. 疫情 防护 手套
from jieba import analyse
text = input() # 原始文本
# 任务:使用jieba模块中有关TextRank算法的模块完成对text中前三个关键字的提取并输出
# ********** Begin *********#kws = analyse.textrank(text)
ans = ''
i = 0 
for w in kws:ans+=w+' 'i+=1if i > 2:breakprint(ans)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/362564.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle12c到19c adg搭建(六)切换后12c备库服务器安装19c软件在19c主库升级数据字典后尝试同步

一、安装19c软件 参考文章oracle12c到19c adg搭建(三)oracle19c数据库软件安装 二、原主库尝试通过19c软件启动数据库 2.1复制12c的相关参数文件和密码文件到19c目录 注意:密码文件需要从已切换主库19c传过来 [oracleo12u19p ~]$ cd /u01/app/oracle…

ubuntu多版本cuda如何指定cuda版本

本文作者: slience_me ubuntu多版本cuda如何指定cuda版本 文章目录 ubuntu多版本cuda如何指定cuda版本1. 关于cuda设置1.1 查看当前安装的 CUDA 版本1.2 下载并安装所需的 CUDA 版本1.3 设置环境变量1.4 验证切换1.5 安装对应的 NVIDIA 驱动程序 2. 设置环境变量2.1…

提取url中的参数

let url https://alibaba.com?a1&b2&c3#hash function queryUrlParams(URL){let url URL.split(?)[1];const urlSearchParams new URLSearchParams(url);console.log(url1, urlSearchParams);console.log(entries,urlSearchParams.entries())const params Object…

.hmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 在当今数字化时代,勒索病毒已经成为网络安全的一大威胁,其中包括了最近出现的.hmallox勒索病毒。这类恶意软件不仅能够对计算机系统进行加密,还会要求用户支付赎金以换取解密密钥,给个人用户和企业带来了严重的…

HTTP详解

目录 1.定义 2.工作流程 3.Fiddler 3.1 使用 3.2 工作原理 4.URL 5.请求和响应 5.1 请求 5.2 响应 6.GET和POST 6.1 经典面试题:GET和POST的区别 6.2 GET 6.3 POST 7.请求报头(Header) 7.1 HOST 7.2 Content-Length 7.3 …

说一说ABAP CDS View的发展历史与特性

1. 背景 随着SAP Fiori应用程序的兴起,SAP领域的小伙伴接触和使用ABAP CDS View的机会也是越来越多。今天,让我们花些时间,一起在了解下这项技术的设计初衷和发展历史。 2. 设计初衷 说起ABAP CDS View,就不得不提及SAP HANA。…

指针并不是用来存储数据的,而是用来存储数据在内存中地址(内存操作/函数指针/指针函数)

推荐:1、4、5号书籍 1. 基本概念 首先,让小明了解指针的基本概念: 指针的定义:指针是一个变量,它存储的是另一个变量的地址。指针的声明:例如,int *p表示一个指向整数的指针变量p。 2. 形象…

编程入门指南

一、了解编程与编程语言 编程:编程是使计算机按照人类编写的指令进行工作的过程。这些指令被编写成计算机可以理解的代码,称为程序。编程语言:编程语言是人与计算机交流的工具。常见的编程语言有Python、Java、C、JavaScript等。 二、选择编…

docker换源

文章目录 前言1. 查找可用的镜像源2. 配置 Docker 镜像源3. 重启 Docker 服务4. 查看dock info是否修改成功5. 验证镜像源是否更换成功注意事项 前言 在pull镜像时遇到如下报错: ┌──(root㉿kali)-[/home/longl] └─# docker pull hello-world Using default …

ADC位数、增益调制与参考电压

位数:12bit、10bit、8bit 一般就是对应的ADC值分别为:4095、1023、255,也就选用对应位数时ADC的最大值。 增益的作用 增益设置用于放大或缩小输入信号,使其适配到ADC的输入范围。增益设置可以通过配置SAADC的通道配置寄存器来实…

mysql数据库切换成kingbase(人大金仓)数据库时遇到的字段不存在问题

一、问题描述 mysql数据库切换成国产数据库人大金仓(kingbase)数据库的遇到的字段不存在的问题,根本原因其实是没有找到相对应的表,报错示例如下图所示: 二、问题解决 1、如果所有的表都发生上述的错误,kingbase的…

Markdown的使用

这里写自定义目录标题 欢迎使用Markdown新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注…

【系统架构设计师】计算机组成与体系结构 ③ ( 层次化存储结构 | 寄存器 | 高速缓存 | 内存 | 外存 )

文章目录 一、层次化存储结构1、层次化存储结构2、层次化存储结构 - 示例说明3、程序员可操作的部分 计算机 采用 分级存储结构 , 主要目的是 为了 解决 容量 / 价格 / 速度 之间的矛盾 ; 一、层次化存储结构 1、层次化存储结构 计算机 存储器 按照存储速度 由快到慢 进行排序 …

SpringCloud Alibaba Sentinel规则持久化实践总结

默认情况下&#xff0c;一旦我们重启应用&#xff0c;sentinel规则将消失&#xff0c;生产环境需要将配置规则进行持久化。这里我们实践将Sentinel持久化到Nacos中。 ① pom依赖 我们引入sentinel-datasource-nacos&#xff1a; <dependency><groupId>com.aliba…

关于0xc000007b的一种解决方案

今天我在安装qview并运行时时&#xff0c;遇到了这个问题。 我在网上查找了许多解决方案&#xff0c;但它们大多都说是某些dll缺失或错误引起的。 这些说法应该是正确的&#xff0c;但我用了dll修复工具后&#xff0c;一点用都没有。 后来捣鼓半天后&#xff0c;我发现很可能…

SAP PP学习笔记22 - 生产订单(制造指图)的元素1

前面几章讲了PP 里面生产计划的各种策略以及策略的Customize。 SAP PP学习笔记20 - 复习总结一下MTS&#xff0c;MTO&#xff0c;ATO的各种生产策略-CSDN博客 SAP PP学习笔记21 - 计划策略的Customize&#xff1a;策略组 &#xff1e; 策略 &#xff1e; 需求类型 &#xff1…

Studying-代码随想录训练营day22| 回溯理论基础、77.组合、216.组合总和II、17.电话号码的字母组合

第22天&#xff0c;回溯章节开始&#xff01;一大算法难点&#xff0c;加油加油&#xff01; 回溯理论基础组合问题的剪枝操作 文档讲解&#xff1a;代码随想录回溯理论基础 视频讲解&#xff1a;回溯理论基础 回溯法也叫回溯搜索法&#xff0c;它是一种搜索&#xff0c;遍历的…

Shell 编程入门

优质博文&#xff1a;IT-BLOG-CN 【1】x.sh文件内容编写&#xff1a; 固定开头&#xff1a;#&#xff01;/bin/sh&#xff1b; 【2】学习的第一个命令就是echo输出的意思&#xff1b; 【3】其实shell脚本也就是在文件中写命令&#xff0c;但是我们要写的是绝对路径&#xff1a…

鸿蒙开发设备管理:【@ohos.batteryInfo (电量信息)】

电量信息 该模块主要提供电池状态和充放电状态的查询接口。 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import batteryInfo from ohos.batteryInfo;属性 描述电池信息。 系统能…

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…