TextRank算法基于PageRank,用于为文本生成关键字和摘要。其论文是:

Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004.

先从PageRank讲起。

PageRank

PageRank最开始用来计算网页的重要性。整个www可以看作一张有向图图,节点是网页。如果网页A存在到网页B的链接,那么有一条从网页A指向网页B的有向边。

构造完图后,使用下面的公式:

S(Vi)是网页i的中重要性(PR值)。d是阻尼系数,一般设置为0.85。In(Vi)是存在指向网页i的链接的网页集合。Out(Vj)是网页j中的链接存在的链接指向的网页的集合。|Out(Vj)|是集合中元素的个数。

PageRank需要使用上面的公式多次迭代才能得到结果。初始时,可以设置每个网页的重要性为1。上面公式等号左边计算的结果是迭代后网页i的PR值,等号右边用到的PR值全是迭代前的。

举个例子:

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

结束\起始

A

B

C

A

0

1

1

B

0

0

0

C

0

0

0

横栏代表其实的节点,纵栏代表结束的节点。若两个节点间有链接关系,对应的值为1。

根据公式,需要将每一竖栏归一化(每个元素/元素之和),归一化的结果是:

结束\起始

A

B

C

A

0

1

1

B

0

0

0

C

0

0

0

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

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

运行结果(省略部分):

......

95

0.4050

0.1500

0.1500

96

0.4050

0.1500

0.1500

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。

如果把上面的有向边看作无向的(其实就是双向的),那么:

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

运行结果(省略部分):

.....

98

1.4595

0.7703

0.7703

99

1.4595

0.7703

0.7703

100

1.4595

0.7703

0.7703

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

使用TextRank提取关键字

将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。

每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:

w1, w2, w3, w4, w5, ..., wn

w1, w2, ..., wk、w2, w3, ...,wk+1、w3, w4, ...,wk+2等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。

基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。

使用TextRank提取关键短语

参照“使用TextRank提取关键词”提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键短语。

例如,在一篇介绍“支持向量机”的文章中,可以找到三个关键词支持、向量、机,通过关键短语提取,可以得到支持向量机。

使用TextRank提取摘要

将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。

通过pagerank算法计算得到的重要性最高的若干句子可以当作摘要。

论文中使用下面的公式计算两个句子Si和Sj的相似度:

分子是在两个句子中都出现的单词的数量。|Si|是句子i的单词数。

由于是有权图,PageRank公式略做修改:

实现TextRank

因为要用测试多种情况,所以自己实现了一个基于Python 2.7的TextRank针对中文文本的库TextRank4ZH。位于:

https://github.com/someus/TextRank4ZH

下面是一个例子:

#-*- encoding:utf-8 -*-

import codecs

from textrank4zh import TextRank4Keyword, TextRank4Sentence

text = codecs.open('./text/01.txt', 'r', 'utf-8').read()

tr4w = TextRank4Keyword(stop_words_file='./stopword.data') # 导入停止词

#使用词性过滤,文本小写,窗口为2

tr4w.train(text=text, speech_tag_filter=True, lower=True, window=2)

print '关键词:'

# 20个关键词且每个的长度最小为1

print '/'.join(tr4w.get_keywords(20, word_min_len=1))

print '关键短语:'

# 20个关键词去构造短语,短语在原文本中出现次数最少为2

print '/'.join(tr4w.get_keyphrases(keywords_num=20, min_occur_num= 2))

tr4s = TextRank4Sentence(stop_words_file='./stopword.data')

# 使用词性过滤,文本小写,使用words_all_filters生成句子之间的相似性

tr4s.train(text=text, speech_tag_filter=True, lower=True, source = 'all_filters')

print '摘要:'

print '\n'.join(tr4s.get_key_sentences(num=3)) # 重要性最高的三个句子

运行结果如下:

关键词:

媒体/高圆圆/微/宾客/赵又廷/答谢/谢娜/现身/记者/新人/北京/博/展示/捧场/礼物/张杰/当晚/戴/酒店/外套

关键短语:

微博

摘要:

中新网北京12月1日电(记者 张曦) 30日晚,高圆圆和赵又廷在京举行答谢宴,诸多明星现身捧场,其中包括张杰(微博)、谢娜(微博)夫妇、何炅(微博)、蔡康永(微博)、徐克、张凯丽、黄轩(微博)等

高圆圆身穿粉色外套,看到大批记者在场露出娇羞神色,赵又廷则戴着鸭舌帽,十分淡定,两人快步走进电梯,未接受媒体采访

记者了解到,出席高圆圆、赵又廷答谢宴的宾客近百人,其中不少都是女方的高中同学

另外, jieba分词提供的基于TextRank的关键词提取工具。 snownlp也实现了关键词提取和摘要生成。

python textrank_使用TextRank算法为文本生成关键字和摘要相关推荐

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

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

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

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

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

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

  4. py之textgenrnn:Python利用textgenrnn库实现训练文本生成网络

    py之textgenrnn:Python利用textgenrnn库实现训练文本生成网络 目录 输出结果 实现代码 输出结果 实现代码 #textgenrnn:利用textgenrnn实现训练文本生成网 ...

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

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

  6. textrank算法提取文本摘要

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

  7. 【自然语言处理】TextRank算法

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

  8. TextRank算法学习及使用

    文章目录 一.算法思想 二.python代码实现 三.TextRank算法使用 1.textrank4zh模块的安装 2.实例介绍 总结 参考资料:    文本关键词抽取.文本摘要生成是自然语言处理( ...

  9. python提取关键词前后原文_python提取文本关键词

    python提取关键词textrank算法,将数据库中的数据提取出来,然后进行分析,代码如下 import pymysql import jieba from textrank4zh import T ...

最新文章

  1. c语言编译开头,#includestdio.h,为什么C语言代码开头都有这一行?
  2. Windows10下如何安装配置 perl 环境
  3. Java基础:JDK1.5新特性
  4. mysql-二进制日志
  5. Cert manager自动签发/更新证书
  6. 混凝土墙开洞_新乐专业混凝土切割报价适中
  7. K8S+Harbor+gluster+haproxy 实践加坑
  8. __call__()和call的区别_python中的__init__ 、__new__、__call__小结
  9. 您知道您客户的数据价值几何吗?
  10. 计算机主机前声音口怎么设置吗,电脑前面的插孔没声音怎么设置
  11. 关于使用Curvy插件实现物体沿指定路径移动的方法
  12. 澳洲八大计算机专业读研条件,澳洲读研条件
  13. [转]IE Javascript 脚本失效解决办法
  14. 没错,我在用JBOD,它真的很好
  15. Ubuntu安装Beyond Compare(五)
  16. 处女作真人语音计算器上线了
  17. matlab cui,阻力汽车论文,关于基于Matlab-CUI的汽车动力性相关参考文献资料-免费论文范文...
  18. Linux磁盘挂载、扩容、删除
  19. 网页flv视频播放代码
  20. 【实用工具系列】(5) 在RHEL7.x中安装MySQL8

热门文章

  1. 微信小程序支付:下单账号与支付账号不一致
  2. 利用QSS自由控制QPushButton中图片和文字的位置
  3. AOM+EXCEL 批量运行脚本的应用
  4. 爬虫工程师的进阶一览图(爬虫工程师水平对照表)根据崔庆才崔大神的文章总结的
  5. sqlserver数据库排序规则
  6. XSSFWorkbook 设置单元格边框
  7. 【SHM】Semantic Human Matting抠图算法调试
  8. 2022年京东年货节时间表和年货节活动攻略
  9. 树莓派 python 录音_树莓派 录音问题
  10. Python报错: 解决matplotlib绘图中文显示成框框问题