【自然语言处理】基于TextRank算法的文本摘要

article/2025/8/28 14:32:21

基于TextRank算法的文本摘要

文本摘要是自然语言处理(NLP)的应用之一,一定会对我们的生活产生巨大影响。随着数字媒体的发展和出版业的不断增长,谁还会有时间完整地浏览整篇文章、文档、书籍来决定它们是否有用呢?

利用计算机将大量的文本进行处理,产生简洁、精炼内容的过程就是文本摘要,人们可通过阅读摘要来把握文本主要内容,这不仅大大节省时间,更提高阅读效率。但人工摘要耗时又耗力,已不能满足日益增长的信息需求,因此借助计算机进行文本处理的自动文摘应运而生。

这类任务到目前为止主要分为两类:

  • 抽取式摘要:这种方法依赖于从文本中提取几个部分,例如短语、句子,把它们堆叠起来创建摘要。因此,这种抽取型的方法最重要的是识别出适合总结文本的句子。
  • 生成式摘要:通过建立抽象的语意表示,使用自然语言生成技术,形成摘要。可能总结中的文本甚至没有在原文中出现。

目前主要方法有:

  • 基于统计: 统计词频,位置等信息,计算句子权值,再选取权值高的句子作为文摘。简单易用,但对词句的使用大多仅停留在表面信息。
  • 基于图模型: 构建拓扑结构图,对词句进行排序。例如,TextRank、LexRank 等。
  • 基于潜在语义: 使用主题模型,挖掘词句隐藏信息。例如,LDA、HMM 等。
  • 基于整数规划: 将文摘问题转为整数线性规划,求全局最优解。

TextRank 是一种从 PageRank 发展而来的抽取型摘要算法。关于 PageRank 的介绍可以查看 我的这篇博客。

基于 TextRank 的摘要算法在 PageRank 的基础上,用句子代替网页,把每个句子分别看做一个节点,如果两个句子有相似性,那么认为这两个句子对应的节点之间存在一条无向有权边,而句子的相似性方法是根据如下公式:

S i m i l a r i t y ( S i , S j ) = ∣ w k ∣ w k ∈ S i ∩ w k ∈ S j ∣ l o g ( ∣ S i ∣ ) + l o g ( ∣ S j ∣ ) Similarity(S_i,S_j)=\frac{|w_k|w_k\in S_i\cap w_k\in S_j|}{log(|S_i|)+log(|S_j|)} Similarity(Si,Sj)=log(Si)+log(Sj)wkwkSiwkSj

其中 S i S_i Si S j ​ S_j​ Sj 分别表示两个句子, w k ​ w_k​ wk 表示句子中的词,那么分子部分的意思是同时出现在两个句子中的同一个词的个数,分母是对句子中词的个数求对数和。分母这样的设计可以抑制较长的句子在相似度计算上的优势。不过通常在构造完句子词向量之后用余弦相似度就可以计算。

其主要的流程如下图。

在这里插入图片描述

  • 首先把文章合成文本数据。
  • 把文本分割成单个句子。
  • 为每个句子找到词向量表示。
  • 计算句子向量间的相似性。
  • 将相似性矩阵转换为以句子为节点,相似性得分为边的图结构,用于句子 TextRank 计算。
  • 最后一定数量的排名最高的句子构成最后的摘要。

SnowNLP 中的 文本摘要 使用的即是 TextRank 算法,源码如下所示。

from __future__ import unicode_literalsfrom ..sim.bm25 import BM25class TextRank(object):def __init__(self, docs):self.docs = docsself.bm25 = BM25(docs)self.D = len(docs)self.d = 0.85self.weight = []self.weight_sum = []self.vertex = []self.max_iter = 200self.min_diff = 0.001self.top = []def solve(self):for cnt, doc in enumerate(self.docs):scores = self.bm25.simall(doc)self.weight.append(scores)self.weight_sum.append(sum(scores)-scores[cnt])self.vertex.append(1.0)for _ in range(self.max_iter):m = []max_diff = 0for i in range(self.D):m.append(1-self.d)for j in range(self.D):if j == i or self.weight_sum[j] == 0:continuem[-1] += (self.d*self.weight[j][i]/ self.weight_sum[j]*self.vertex[j])if abs(m[-1] - self.vertex[i]) > max_diff:max_diff = abs(m[-1] - self.vertex[i])self.vertex = mif max_diff <= self.min_diff:breakself.top = list(enumerate(self.vertex))self.top = sorted(self.top, key=lambda x: x[1], reverse=True)def top_index(self, limit):return list(map(lambda x: x[0], self.top))[:limit]def top(self, limit):return list(map(lambda x: self.docs[x[0]], self.top))
from . import normal
from . import seg
from .summary import textrankclass SnowNLP(object):def __init__(self, doc):self.doc = doc......def summary(self, limit=5):doc = []sents = self.sentencesfor sent in sents:words = seg.seg(sent)words = normal.filter_stop(words)doc.append(words)rank = textrank.TextRank(doc)rank.solve()ret = []for index in rank.top_index(limit):ret.append(sents[index])return ret

http://chatgpt.dhexx.cn/article/V9CujFIm.shtml

相关文章

【自然语言处理】利用TextRank算法提取关键词

利用TextRank提取关键词 TextRank 是一种基于 PageRank 的算法&#xff0c;常用于关键词提取和文本摘要。在本文中&#xff0c;我将通过一个关键字提取示例帮助您了解 TextRank 如何工作&#xff0c;并展示 Python 的实现。 使用 TextRank、NER 等进行关键词提取 1.PageRank简…

【NLP】关键词提取:TFIDF、TextRank

前两天看到论文《Chinese Poetry Generation with Planning based Neural Network》中使用TextRank进行关键词提取。在阅读文章时也想到了除了TextRank之外&#xff0c;经常还使用TFIDF进行关键词提取。 一些算法的使用取决于业务场景和算法的特性。关键词提取是干什么的呢&am…

TF-IDF算法和TextRank算法的分析比较

TF-IDF算法 TF-IDF&#xff08;词频-逆文档频率&#xff09;算法是一种统计方法&#xff0c;用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加&#xff0c;但同时会随着它在语料库中出现的频率成反比下降…

Python文本处理工具——TextRank

背景 TextRank是用与从文本中提取关键词的算法&#xff0c;它采用了PageRank算法&#xff0c;原始的论文在这里。Github地址。 这个工具使用POS( part-of-speech tagging : 词性标注 )然后抽取名词&#xff0c;这种方法对于关键词提取独具特色。 注意&#xff1a; 先安装NL…

TextRank学习笔记

TextRank起源与PageRank TextRank的灵感来源于大名鼎鼎的PageRank算法&#xff0c;这是一个用作网页重要度排序的算法。 并且&#xff0c;这个算法也是基于图的&#xff0c;每个网页可以看作是一个图中的结点&#xff0c;如果网页A能够跳转到网页B&#xff0c;那么则有一条A-…

【TextRank】关键词提取 算法原理 公式推导 源码分析

1.前言 在介绍TextRank前&#xff0c;我想先给大家介绍下PageRank&#xff0c;实质上个人认为可以把TextRank当做PageRank2.0。 谷歌的两位创始人的佩奇和布林&#xff0c;借鉴了学术界评判学术论文重要性的通用方法&#xff0c;“那就是看论文的引用次数”。由此想到网页的重要…

NLP - 关键词提取 - TextRank

NLP - 关键词提取 - TextRank 一、TextRank介绍二、PageRank介绍三、PageRank计算过程四、关键词提取任务 一、TextRank介绍 TextRank算法则可以脱离语料库的基础&#xff0c;仅对单篇文档进行分析就可以提取该文档的关键词。这也是TextRank算法的重要特点。TextRank算法的基本…

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

首先介绍原理与概念 TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法&#xff08;其原理在本文在下面&#xff09;, 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本…

TextRank算法总结

TextRank算法总结 最近在调研自动生成文本方面的内容&#xff0c;突然想到了自动文摘里的textRank&#xff0c;这里我将参考了一些资料并对这些知识点进行了整理总结&#xff0c;初步总结如下&#xff1a; 目录 PageRank简介基于TextRank的关键词提取基于TextRank的关键词短语提…

TextRank算法实践

TextRank算法实践 PageRank算法思想 TextRank算法的思想主要源于PageRank算法&#xff0c;PageRank算法主要用于给互联网网页排序&#xff0c;根据网页之间的跳转来构造一个初始权重矩阵&#xff08;转移矩阵&#xff09;&#xff0c;默认每个网页质量都是1 使用一个向量v&…

TextRank算法的基本原理及textrank4zh使用实例

TextRank算法是一种文本排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它能够从一个给定的文本中提取出该文本的关键词、关键词组,并使用抽取式的自动文摘方法提取出该文本的关键句。其提出论文是: Mihalcea R, Tarau P. TextRank: Bringing order into texts[…

TextRank算法

TextRank算法理解 TextRank算法 TextRank算法基于PageRank&#xff0c;用于为文本生成关键字和摘要。其论文是&#xff1a; Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004. 先从PageRank讲起 在浅入浅出…

TextRank

TextRank与PageRank TextRank的灵感来源于大名鼎鼎的PageRank算法&#xff0c;这是一个用作网页重要度排序的算法。 这个算法是基于图的&#xff0c;每个网页可以看作是一个图中的结点&#xff0c;如果网页A能够跳转到网页B&#xff0c;那么则有一条A->B的有向边。这样&am…

TextRank算法介绍及实现

目录 1、PageRank算法 2、TextRank算法 &#xff08;1&#xff09;关键词抽取&#xff08;keyword extraction&#xff09; &#xff08;2&#xff09;关键短语抽取&#xff08;keyphrase extration&#xff09; &#xff08;3&#xff09;关键句抽取&#xff08;sentence…

TextRank原理解释

目录 1. PageRank原理 2. TextRank &#xff08;1&#xff09;TextRank需要满足的条件 &#xff08;2&#xff09;TextRank思想的简要理解 &#xff08;3&#xff09;TextRank原理及例子讲解 1. PageRank原理 在这里可以看我转载的PageRank原理链接&#xff0c;比较详细h…

TextRank算法原理简析、代码实现

前言—PageRank 注&#xff1a;PageRank原理另行查询 在介绍TextRank前&#xff0c;我想先给大家介绍下PageRank&#xff0c;实质上个人认为可以把TextRank当做PageRank2.0。   谷歌的两位创始人的佩奇和布林&#xff0c;借鉴了学术界评判学术论文重要性的通用方法&#xff0…

NLP学习笔记——TextRank算法

一、算法简介 TextRank算法是一种基于图的排序算法&#xff0c;由谷歌的网页重要性排序算法PageRank算法改进而来&#xff0c;主要应用有关键词提取、文本摘要抽取等。该算法的主要思想是&#xff1a;把文档中的词&#xff08;句&#xff09;看成一个网络&#xff0c;词&#…

机器学习——逻辑回归常见面试题整理

逻辑回归 1.介绍 逻辑回归假设数据服从伯努利分布&#xff0c;通过极大化似然函数的方法&#xff0c;运用梯队下降来求解参数&#xff0c;来达到将数据二分类的目的。 2.逻辑回归的损失函数和梯度下降参数迭代方法 逻辑回归的损失函数是它的极大似然函数 参数迭代方法 3.逻…

面试精选逻辑推理题总结

类似的杀人游戏 1、500张骨牌整齐地排成一行&#xff0c;按顺序编号为1、2、3、……、499、500。第一次拿走所有奇数位置上的骨牌&#xff0c;第二次再从剩余骨牌中拿走奇数位置上的骨牌&#xff0c;以此类推。请问最后剩下的一张骨牌的编号是&#xff1f;&#xff08;256&…

IT科技企业逻辑思维面试题

逻辑思维面试题 一、假设有一个池塘&#xff0c;里面有无穷多的水。现有2个空水壶&#xff0c;容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。【请描述操作过程】 答&#xff1a;&#xff08;1&#xff09;先用容积为6升的水壶装满水&#xff1b; &#…