TextRank算法的基本思想是将文档看作一个词的网络(一种基于图的排序方法,用于提取相关句子或查找关键字),该网络中的链接表示词与词之间的语义关系。

TextRank算法主要包括:关键词抽取、关键短语抽取、关键句抽取。

(1)关键词抽取(keyword extraction)

关键词抽取是指从文本中确定一些能够描述文档含义的术语的过程。对关键词抽取而言,用于构建顶点集的文本单元可以是句子中的一个或多个字;根据这些字之间的关系(比如:在一个框中同时出现)构建边。根据任务的需要,可以使用语法过滤器(syntactic filters)对顶点集进行优化。语法过滤器的主要作用是将某一类或者某几类词性的字过滤出来作为顶点集。

(2)关键短语抽取(keyphrase extration)

关键词抽取结束后,我们可以得到的N个关键词,在原始文本中相邻的关键词构成关键短语。因此,从get_keyphrases函数的源码中我们可以看到,它先调用get_keywords抽取关键词,然后分析关键词是否存在相邻的情况,最后确定哪些是关键短语。

(3)关键句抽取(sentence extraction)

句子抽取任务主要针对的是自动摘要这个场景,将每一个sentence作为一个顶点,根据两个句子之间的内容重复程度来计算他们之间的“相似度”,以这个相似度作为联系,由于不同句子之间相似度大小不一致,在这个场景下构建的是以相似度大小作为edge权重的有权图。

这是利用TextRank提取的一些摘要

效果很差:

from snownlp import SnowNLP
import re
import jieba.analyse
import jieba.posseg
import os
import jsonimport re
import jieba.analyse
import jieba.possegclass TextSummary:def __init__(self, text):self.text = textdef splitSentence(self):sectionNum = 0self.sentences = []for eveSection in self.text.split("\n"):if eveSection:sentenceNum = 0for eveSentence in re.split("!|。|?", eveSection):if eveSentence:mark = []if sectionNum == 0:mark.append("FIRSTSECTION")if sentenceNum == 0:mark.append("FIRSTSENTENCE")self.sentences.append({"text": eveSentence,"pos": {"x": sectionNum,"y": sentenceNum,"mark": mark}})sentenceNum = sentenceNum + 1sectionNum = sectionNum + 1self.sentences[-1]["pos"]["mark"].append("LASTSENTENCE")for i in range(0, len(self.sentences)):if self.sentences[i]["pos"]["x"] == self.sentences[-1]["pos"]["x"]:self.sentences[i]["pos"]["mark"].append("LASTSECTION")def getKeywords(self):self.keywords = jieba.analyse.extract_tags(self.text, topK=100, withWeight=False, allowPOS=('n', 'vn', 'v'))def sentenceWeight(self):# 计算句子的位置权重for sentence in self.sentences:mark = sentence["pos"]["mark"]weightPos = 0if "FIRSTSECTION" in mark:weightPos = weightPos + 2if "FIRSTSENTENCE" in mark:weightPos = weightPos + 2if "LASTSENTENCE" in mark:weightPos = weightPos + 1if "LASTSECTION" in mark:weightPos = weightPos + 1sentence["weightPos"] = weightPos# 计算句子的线索词权重index = [" 总之 ", " 总而言之 "]for sentence in self.sentences:sentence["weightCueWords"] = 0sentence["weightKeywords"] = 0for i in index:for sentence in self.sentences:if sentence["text"].find(i) >= 0:sentence["weightCueWords"] = 1for keyword in self.keywords:for sentence in self.sentences:if sentence["text"].find(keyword) >= 0:sentence["weightKeywords"] = sentence["weightKeywords"] + 1for sentence in self.sentences:sentence["weight"] = sentence["weightPos"] + 2 * sentence["weightCueWords"] + sentence["weightKeywords"]def getSummary(self, ratio=0.1):self.keywords = list()self.sentences = list()self.summary = list()# 调用方法,分别计算关键词、分句,计算权重self.getKeywords()self.splitSentence()self.sentenceWeight()# 对句子的权重值进行排序self.sentences = sorted(self.sentences, key=lambda k: k['weight'], reverse=True)length = 0# 根据排序结果,取排名占前 ratio% 的句子作为摘要for i in range(len(self.sentences)):if length<3:if i < ratio * len(self.sentences):sentence = self.sentences[i]self.summary.append(sentence["text"])length+=1return self.summarydef get_abstract(text):    testSummary = TextSummary(text)abstract_content = ".".join(testSummary.getSummary())return abstract_contentif __name__ == '__main__':sample = ''abstract_content = get_abstract(sample)

textrank算法提取文本摘要相关推荐

  1. 基于TextRank算法的文本摘要(附Python代码)

    基于TextRank算法的文本摘要(附Python代码): https://www.jiqizhixin.com/articles/2018-12-28-18

  2. 使用TextRank算法进行文本摘要提取(python代码)

    文本摘要是自然语言处理(NLP)的一种应用,随着人工智能的发展文本提取必将对我们的生活产生巨大的影响.随着网络的发展我们处在一个信息爆炸的时代,通读每天更新的海量文章/文档/书籍会占用我们大量的时间, ...

  3. 独家 | 基于TextRank算法的文本摘要(附Python代码)

    作者:Prateek Joshi 翻译:王威力 校对:丁楠雅 本文约3300字,建议阅读10分钟. 本文介绍TextRank算法及其在多篇单领域文本数据中抽取句子组成摘要中的应用. TextRank ...

  4. python textrank_TextRank算法提取文本摘要

    原理 所谓自动摘要,就是从文章中自动抽取关键句.何谓关键句?人类的理解是能够概括文章中心的句子,机器的理解只能模拟人类的理解,即拟定一个权重的评分标准,给每个句子打分,之后给出排名靠前的几个句子. T ...

  5. python中文文本分词_SnowNLP:?中文分词?词性标准?提取文本摘要,?提取文本关键词,?转换成拼音?繁体转简体的 处理中文文本的Python3 类库...

    SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...

  6. 使用TextRank算法为文本生成关键字和摘要

    使用TextRank算法为文本生成关键字和摘要 发表于1年前(2014-12-01 21:31)   阅读(10282) | 评论(27) 155人收藏此文章, 我要收藏 赞15 摘要 TextRan ...

  7. NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)

    NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary) 目录 输出结果 设计思路 核心代码 输出结果 1.测试文本 ...

  8. 文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)

    文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱(含pyltp安装使用教程) 1. 项目介绍 目标:输入一篇文档,将文档进行关键信息提取,进行结构化,并最终组织成图谱组织 ...

  9. python textrank_使用TextRank算法为文本生成关键字和摘要

    TextRank算法基于PageRank,用于为文本生成关键字和摘要.其论文是: Mihalcea R, Tarau P. TextRank: Bringing order into texts[C] ...

最新文章

  1. c++队列指针 结构体指针
  2. FFT IP核调用与仿真之SCALE压缩因子设置
  3. 操作系统:Android(Google公司开发的操作系统)
  4. 可迭代对象、迭代器与生成器
  5. sqlmap参数说明
  6. Python __name__ == ‘__main__’详细解释-Python零基础入门教程
  7. Python学习笔记-猜数字游戏(学习语法)
  8. 《VMware vSphere 6.5企业运维实战》已经出版
  9. java 求集合真子集_【每日打卡】新高一数学必修打卡第二天教学视频—集合的基本运算...
  10. 优酷用户触达平台技术大揭秘
  11. docker及入门使用(centos7.6)
  12. 我的世界基岩版种子和java版种子_我的世界:当前基岩版最强村庄神种,村庄下面集合所有要素...
  13. 快应用采坑(3)-使用差别
  14. FPGA实现BT.1120编码
  15. EXCEL高版本求解分布、临界值表→正态分布、正态分位数、X方、F分布、t分布
  16. LeetCode995.Minimum Number of K Consecutive Bit Flips(K 连续位的最小翻转次数 )
  17. 11.计算机基础之计算机网络基础
  18. PDF怎么编辑注释? 5 个免费好用的 PDF 注释器
  19. 苹果iOS系统下的推送机制及实现
  20. 桌面宠物:天选姬官方下载指南和游玩体验

热门文章

  1. 字节跳动进场,二手车没等来新故事
  2. Forest 使用简介
  3. 研一Python基础课程第三周课后习题分享(下)(含源代码)
  4. FICO 创建会计凭证并自动计算税率
  5. 十分钟学会 xmind 思维导图的使用
  6. 曝光和点击都挺高,亚马逊Listing转化率却很低!问题出在哪?
  7. Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作
  8. 推荐引擎的基本入门知识
  9. oracle+中子分类账,Oracle EBS R12 总帐和子分类账关系详解[转载]
  10. 基于JAVA解决淘宝爬虫限制