Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >textrank算法原理与提取关键词、自动提取摘要PYTHON

textrank算法原理与提取关键词、自动提取摘要PYTHON

作者头像
学到老
发布于 2018-03-19 08:01:47
发布于 2018-03-19 08:01:47
5.5K00
代码可运行
举报
运行总次数:0
代码可运行

首先介绍原理与概念

TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法(其原理在本文在下面), 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练, 因其简洁有效而得到广泛应用。

TextRank 一般模型可以表示为一个有向有权图 G =(V, E), 由点集合 V和边集合 E 组成, E 是V ×V的子集。图中任两点 Vi , Vj 之间边的权重为 wji , 对于一个给定的点 Vi, In(Vi) 为 指 向 该 点 的 点 集 合 , Out(Vi) 为点 Vi 指向的点集合。点 Vi 的得分定义如下:

  其中, d 为阻尼系数, 取值范围为 0 到 1, 代表从图中某一特定点指向其他任意点的概率, 一般取值为 0.85。使用TextRank 算法计算图中各点的得分时, 需要给图中的点指定任意的初值, 并递归计算直到收敛, 即图中任意一点的误差率小于给定的极限值时就可以达到收敛, 一般该极限值取 0.0001。   举个例子:

  上图表示了三张网页之间的链接关系,直觉上网页A最重要。可以得到下面的表:

  横栏代表其实的节点,纵栏代表结束的节点。若两个节点间有链接关系,对应的值为1。根据公式,需要将每一竖栏归一化(每个元素/元素之和),归一化的结果是:

上面的结果构成矩阵M。我们用matlab迭代100次看看最后每个网页的重要性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
M = [0 1 1 
     0 0 0
     0 0 0];
PR = [1; 1 ; 1];
for iter = 1:100
    PR = 0.15 + 0.85*M*PR;
    disp(iter);
    disp(PR);
end

运行结果(省略部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   97---
    0.4050
    0.1500
    0.1500
    98---
    0.4050
    0.1500
    0.1500
    99---
    0.4050
    0.1500
    0.1500
    100---
    0.4050
    0.1500
    0.1500

最终A的PR值为0.4050,B和C的PR值为0.1500 如果把上面的有向边看作无向的(其实就是双向的),那么:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
M = [0 1 1 
    0.5 0 0
    0.5 0 0];

PR = [1; 1 ; 1];

for iter = 1:100
    PR = 0.15 + 0.85*M*PR;
    disp(iter);
    disp(PR);
end

运行结果(省略部分):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.....
    98
    1.4595
    0.7703
    0.7703
    99
    1.4595
    0.7703
    0.7703
   100
    1.4595
    0.7703
    0.7703

依然能判断出A、B、C的重要性。

  1. 基于TextRank的关键词提取   关键词抽取的任务就是从一段给定的文本中自动抽取出若干有意义的词语或词组。TextRank算法是利用局部词汇之间关系(共现窗口)对后续关键词进行排序,直接从文本本身抽取。其主要步骤如下:   (1)把给定的文本T按照完整句子进行分割,即   (2)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即,其中是保留后的候选关键词。   (3)构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。   (4)根据上面公式,迭代传播各节点的权重,直至收敛。   (5)对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。   (6)由(5)得到最重要的T个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。例如,文本中有句子“Matlab code for plotting ambiguity function”,如果“Matlab”和“code”均属于候选关键词,则组合成“Matlab code”加入关键词序列。 TextRank的Java实现

原理思路整理: 程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。 我取出了百度百科关于“程序员”的定义作为测试用例,很明显,这段定义的关键字应当是“程序员”并且“程序员”的得分应当最高。 首先对这句话分词,这里可以借助各种分词项目,比如HanLP分词,得出分词结果: [程序员/n, (, 英文/nz, programmer/en, ), 是/v, 从事/v, 程序/n, 开发/v, 、/w, 维护/v, 的/uj, 专业/n, 人员/n, 。/w, 一般/a, 将/d, 程序员/n, 分为/v, 程序/n, 设计/vn, 人员/n, 和/c, 程序/n, 编码/n, 人员/n, ,/w, 但/c, 两者/r, 的/uj, 界限/n, 并/c, 不/d, 非常/d, 清楚/a, ,/w, 特别/d, 是/v, 在/p, 中国/ns, 。/w, 软件/n, 从业/b, 人员/n, 分为/v, 初级/b, 程序员/n, 、/w, 高级/a, 程序员/n, 、/w, 系统/n, 分析员/n, 和/c, 项目/n, 经理/n, 四/m, 大/a, 类/q, 。/w] 然后去掉里面的停用词,这里我去掉了标点符号、常用词、以及“名词、动词、形容词、副词之外的词”。得出实际有用的词语: [程序员, 英文, 程序, 开发, 维护, 专业, 人员, 程序员, 分为, 程序, 设计, 人员, 程序, 编码, 人员, 界限, 特别, 中国, 软件, 人员, 分为, 程序员, 高级, 程序员, 系统, 分析员, 项目, 经理] 之后建立两个大小为5的窗口,每个单词将票投给它身前身后距离5以内的单词: {开发=[专业, 程序员, 维护, 英文, 程序, 人员], 软件=[程序员, 分为, 界限, 高级, 中国, 特别, 人员], 程序员=[开发, 软件, 分析员, 维护, 系统, 项目, 经理, 分为, 英文, 程序, 专业, 设计, 高级, 人员, 中国], 分析员=[程序员, 系统, 项目, 经理, 高级], 维护=[专业, 开发, 程序员, 分为, 英文, 程序, 人员], 系统=[程序员, 分析员, 项目, 经理, 分为, 高级], 项目=[程序员, 分析员, 系统, 经理, 高级], 经理=[程序员, 分析员, 系统, 项目], 分为=[专业, 软件, 设计, 程序员, 维护, 系统, 高级, 程序, 中国, 特别, 人员], 英文=[专业, 开发, 程序员, 维护, 程序], 程序=[专业, 开发, 设计, 程序员, 编码, 维护, 界限, 分为, 英文, 特别, 人员], 特别=[软件, 编码, 分为, 界限, 程序, 中国, 人员], 专业=[开发, 程序员, 维护, 分为, 英文, 程序, 人员], 设计=[程序员, 编码, 分为, 程序, 人员], 编码=[设计, 界限, 程序, 中国, 特别, 人员], 界限=[软件, 编码, 程序, 中国, 特别, 人员], 高级=[程序员, 软件, 分析员, 系统, 项目, 分为, 人员], 中国=[程序员, 软件, 编码, 分为, 界限, 特别, 人员], 人员=[开发, 程序员, 软件, 维护, 分为, 程序, 特别, 专业, 设计, 编码, 界限, 高级, 中国]}

2. 基于TextRank的自动文摘

  基于TextRank的自动文摘属于自动摘录,通过选取文本中重要度较高的句子形成文摘,其主要步骤如下:

  (1)预处理:将输入的文本或文本集的内容分割成句子得

,构建图G =(V,E),其中V为句子集,对句子进行分词、去除停止词,得

,其中

是保留后的候选关键词。

  (2)句子相似度计算:构建图G中的边集E,基于句子间的内容覆盖率,给定两个句子

,采用如下公式进行计算:

  若两个句子之间的相似度大于给定的阈值,就认为这两个句子语义相关并将它们连接起来,即边的权值;

  (3)句子权重计算:根据公式,迭代传播权重计算各句子的得分;

  (4)抽取文摘句:将(3)得到的句子得分进行倒序排序,抽取重要度最高的T个句子作为候选文摘句。

  (5)形成文摘:根据字数或句子数要求,从候选文摘句中抽取句子组成文摘。 三. 其它

  分析研究可知,相似度的计算方法好坏,决定了关键词和句子的重要度排序,如果在相似度计算问题上有更好的解决方案,那么结果也会更加有效。其它计算相似度的方法有:基于编辑距离,基于语义词典,余弦相似度等。这里不一一描述。

  网络上实现了一个简单的文摘系统,旗代码可参考ASExtractor`, 其他参考文献: 1.textrank:github: 2.Automatic Summarization :https://en.wikipedia.org/wiki/Automatic_summarization 3.someus github:TextRank4ZH 4.结

最后附录:pagerank算法原理

参考文献:http://www.hankcs.com/nlp/textrank-algorithm-java-implementation-of-automatic-abstract.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一个Python自动提取内容摘要的实践
利用计算机将大量的文本进行处理,产生简洁、精炼内容的过程就是文本摘要,人们可通过阅读摘要来把握文本主要内容,这不仅大大节省时间,更提高阅读效率。但人工摘要耗时又耗力,已不能满足日益增长的信息需求,因此借助计算机进行文本处理的自动文摘应运而生。近年来,自动摘要、信息检索、信息过滤、机器识别、等研究已成为了人们关注的热点。
IT派
2018/07/30
1.9K0
一个Python自动提取内容摘要的实践
【NLP自然语言处理】TextRank揭秘:文本摘要与关键词提取的强大算法
小言从不摸鱼
2025/01/17
1550
【NLP自然语言处理】TextRank揭秘:文本摘要与关键词提取的强大算法
爬到的数据不处理怎么行?大话TextRank自动关键词与摘要生成
PageRank是谷歌发明的,最开始用来计算网页的重要性。整个www可以看作一张有向图图,节点是网页。如果网页A存在到网页B的链接,那么有一条从网页A指向网页B的有向边。
羽翰尘
2019/11/20
7080
Hanlp自然语言处理工具的使用演练
Hanlp是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。Hanlp具备功能完善、性能高效、架构清洗、语料时新、可自定义的特点;提供词法分析(中文分词、磁性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。
IT小白龙
2018/09/19
6970
Hanlp自然语言处理工具的使用演练
简单NLP分析套路(2)----分词,词频,命名实体识别与关键词抽取
google 近期发布了颠覆性的NLP模型–BERT ,大家有空可以了解一下, 这是张俊林博士写的科普文章: https://mp.weixin.qq.com/s/EPEsVzbkOdz9GovrAM-p7g
流川疯
2019/01/17
3.5K0
独家 | 基于TextRank算法的文本摘要(附Python代码)
TextRank 算法是一种用于文本的基于图的排序算法,通过把文本分割成若干组成单元(句子),构建节点连接图,用句子之间的相似度作为边的权重,通过循环迭代计算句子的TextRank值,最后抽取排名高的句子组合成文本摘要。本文介绍了抽取型文本摘要算法TextRank,并使用Python实现TextRank算法在多篇单领域文本数据中抽取句子组成摘要的应用。
数据派THU
2018/12/29
3.4K0
独家 | 基于TextRank算法的文本摘要(附Python代码)
爱奇艺NLP:BiLSTM_CRF的关键词自动抽取
https://github.com/macanv/BERT-BiLSTM-CRF-NER
机器学习AI算法工程
2019/10/28
2.4K0
爱奇艺NLP:BiLSTM_CRF的关键词自动抽取
游戏文本关键词提取工作的尝试和探索
如何将合适的游戏文本打上正确的关键词标签,并将内容推送给恰当的用户成为一个重要的课题。
腾讯知文实验室
2018/02/08
3K0
游戏文本关键词提取工作的尝试和探索
算法教程:能够体现文本语义关系的关键词提取算法
本文介绍了基于LDA主题概率模型的关键词提取方法,该方法利用语料库中词汇的出现频次和文档的主题分布计算主题权重,并基于主题权重计算文档中每个单词的主题概率权重。通过计算主题概率权重和单词在文档中的出现频次,可以得到每个单词对文档主题的贡献度,从而提取出关键词。该方法具有较高的准确性和鲁棒性,能够有效地处理大量文档和词汇,同时能够处理文档的稀疏性和不完整性,可以广泛应用于信息检索、文本挖掘、自然语言处理等领域。
人工智能的秘密
2017/12/25
1.8K0
Python爬虫:对科技新闻的数据分析
大数据时代到来,网络数据正成为潜在宝藏,大量商业信息、社会信息以文本等存储在网页中,这些具有相当大价值的信息不同于传统的结构化数据,属于非结构化数据,需要我们使用一定的技术和方法将其转化为计算机能够理解的特征信息,然后我们才能对其进行分析。这里我们采用python爬虫提取腾讯网站科技新闻的标题,通过文本分析,来进行分析。
Yolandarrrrr
2020/07/02
2.5K1
Python爬虫:对科技新闻的数据分析
中文NLP笔记:3. 关键词提取的几个方法
  TF-IDF :用于反映一个词对于某篇文档的重要性。过滤掉常见的词语,保留重要的词语
杨熹
2019/01/28
3.6K0
中文NLP笔记:3. 关键词提取的几个方法
自然语言处理工具hanlp关键词提取图解TextRank算法
看一个博主(亚当-adam)的关于hanlp关键词提取算法TextRank的文章,还是非常好的一篇实操经验分享,分享一下给各位需要的朋友一起学习一下!
IT小白龙
2019/02/20
1K0
自然语言处理工具hanlp关键词提取图解TextRank算法
使用TextRank算法为文本生成关键字和摘要
TextRank算法基于PageRank,用于为文本生成关键字和摘要。 目录[-] PageRank 使用TextRank提取关键字 使用TextRank提取关键短语 使用TextRank提取摘要 实现TextRank TextRank算法基于PageRank,用于为文本生成关键字和摘要。其论文是: Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics,
机器学习AI算法工程
2018/03/13
1.9K0
使用TextRank算法为文本生成关键字和摘要
HanLP《自然语言处理入门》笔记--9.关键词、关键句和短语提取
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP
mantch
2020/02/21
3.3K0
HanLP《自然语言处理入门》笔记--9.关键词、关键句和短语提取
HanLP 关键词提取算法分析详解
l 参考论文:《TextRank: Bringing Order into Texts》
IT小白龙
2018/11/05
1K0
HanLP 关键词提取算法分析详解
【算法】TextRank算法为文本生成关键字和摘要
TextRank算法基于PageRank,用于为文本生成关键字和摘要。其论文是:
陆勤_数据人网
2018/07/30
7100
【算法】TextRank算法为文本生成关键字和摘要
NLP中关键字提取方法总结和概述
关键字提取是从文本文档中检索关键字或关键短语。这些关键词从文本文档的短语中选择出来的并且表征了文档的主题。在本文中,我总结了最常用的自动提取关键字的方法。
deephub
2021/10/09
2.1K0
NLP中关键字提取方法总结和概述
用 Python 从单个文本中提取关键字的四种超棒的方法
在我之前的文章中,我介绍了使用 Python 和 TFIDF 从文本中提取关键词,TFIDF 方法依赖于语料库统计来对提取的关键字进行加权,因此它的缺点之一是不能应用于单个文本。
数据STUDIO
2022/05/24
6.5K0
用 Python 从单个文本中提取关键字的四种超棒的方法
TF-IDF应用:自动提取关键词、找相似文章、自动摘要
这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到? 这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是我今天想要介绍的TF-IDF (https://en.wikipedia.org/wiki/Tf%
机器学习AI算法工程
2018/03/13
4.3K0
TF-IDF应用:自动提取关键词、找相似文章、自动摘要
技术干货 | 如何做好文本关键词提取?从三种算法说起
在自然语言处理领域,处理海量的文本文件最关键的是要把用户最关心的问题提取出来。而无论是对于长文本还是短文本,往往可以通过几个关键词窥探整个文本的主题思想。与此同时,不管是基于文本的推荐还是基于文本的搜索,对于文本关键词的依赖也很大,关键词提取的准确程度直接关系到推荐系统或者搜索系统的最终效果。因此,关键词提取在文本挖掘领域是一个很重要的部分。 关于文本的关键词提取方法分为有监督、半监督和无监督三种: 1 有监督的关键词抽取算法 它是建关键词抽取算法看作是二分类问题,判断文档中的词或者短语是或者不是关键词
达观数据
2018/04/02
5.5K0
技术干货 | 如何做好文本关键词提取?从三种算法说起
推荐阅读
相关推荐
一个Python自动提取内容摘要的实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验