输入关键字 抓取所有网页(极简工具X一站式开发,七大领域400页场景化应用构建最佳宝典(图))

优采云 发布时间: 2021-12-13 14:08

  输入关键字 抓取所有网页(极简工具X一站式开发,七大领域400页场景化应用构建最佳宝典(图))

  极简工具X一站式开发,7个领域400页场景化应用打造最佳合集,点击获取>>>

  

  这篇文章也发表在我的博客上:

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

  Mihalcea R, Tarau P. TextRank:将秩序带入文本[C]。计算语言学协会,2004.

  让我们从 PageRank 开始。

  网页排名

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

  构建图形后,使用以下公式:

  

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

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

  例如:

  

  上图展示了三个网页之间的链接关系。直观上,网页 A 是最重要的。你可以得到下表:

  结束\开始

  一个

  乙

  C

  一个

  1

  1

  乙

  C

  水平条代表实际节点,垂直条代表结束节点。如果两个节点之间存在链接关系,则对应的值为1。

  根据公式,每一列都需要归一化(每个元素/元素的总和),归一化的结果为:

  结束\开始

  一个

  乙

  C

  一个

  1

  1

  乙

  C

  上面的结果就构成了矩阵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提取关键词》提取多个关键词。如果原文中存在多个关键词相邻格,那么这些关键词就可以构成一个关键短语。

  比如在一篇关于《支持向量机》文章的文章中,可以找到三个关键词 support, vector, machine,通过关键词提取,就可以得到支持向量机。

  使用 TextRank 提取摘要

  将每个句子视为图中的一个节点。如果两个句子之间存在相似性,则认为对应的两个节点之间存在无向幂边,权重为相似度。

  pagerank算法计算出的最重要的句子可以作为摘要。

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

  

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

  因为是右图,所以对PageRank公式稍作修改:

  

  实施 TextRank

  因为需要测试多种情况,我实现了一个基于Python2.7的TextRank库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 还实现了 关键词 提取和摘要生成。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线