人工智能自然语言处理—PageRank算法和TextRank算法详解
519 打赏
人工智能自然语言处理—PageRank算法和TextRank算法详解 上进小菜猪 2023-03-22 11:53:07

人工智能自然语言处理—PageRank算法和TextRank算法详解

一、PageRank算法

PageRank算法最初被用作互联网页面重要性的计算方法。它由佩奇和布林于1996年提出,并被用于谷歌搜索引擎的页面排名。事实上,PageRank可以在任何有向图上定义,然后应用于社会影响分析、文本摘要和其他问题。
PageRank算法的基本思想是在有向图上定义一个随机游动模型,即一阶马尔可夫链,以描述随机游动者沿着有向图随机访问每个节点的行为。在某些条件下,在极限情况下访问每个节点的概率收敛到一个平稳分布,然后每个节点的平稳概率值就是它的PageRank值,它表示节点的重要性。PageRank是递归定义的,PageRank的计算可以通过迭代算法进行。

算法公式如下:

原理如下图

PageRank算法的核心思想如下:

(1)链接数量:如果一个网页被越多的其他网页链接,说明这个网页越重要,即该网页的PR值(PageRank值)会相对较高;

(2)链接质量:如果一个网页被一个越高权值的网页链接,也能表明这个网页越重要,即一个PR值很高的网页链接到一个其他网页,那么被链接到的网页的PR值会相应地因此而提高。

代码实例:

  1. import numpy as np
  2. p = 0.85 #引入浏览当前网页的概率为p,假设p=0.8
  3. a = np.array([[1,0,0,0],
  4. [0,0,0,1],
  5. [0,0,0,1],
  6. [0,1,0,0]],dtype = float) #dtype指定为float
  7. length=a.shape[1] #网页数量
  8. #构造转移矩阵
  9. b = np.transpose(a) #b为a的转置矩阵
  10. m = np.zeros((a.shape),dtype = float)
  11. for i in range(a.shape[0]):
  12. for j in range(a.shape[1]):
  13. #如果一个节点没有任何出链,Dead Ends
  14. if b[j].sum()==0:
  15. b[j]=b[j]+np.array([1/length]*length)
  16. m[i][j] = a[i][j] / (b[j].sum()) #完成初始化分配
  17. #pr值得初始化
  18. v = np.zeros((m.shape[0],1),dtype = float) #构造一个存放pr值得矩阵
  19. for i in range(m.shape[0]):
  20. v[i] = float(1)/m.shape[0]
  21. count=0
  22. ee=np.array([[1/length]*length]).reshape(length,-1)
  23. # 循环100次计算pageRank值
  24. for i in range(100):
  25. # 解决spider traps问题,spider traps会导致网站权重向一个节点偏移,将转移矩阵加上打开其他网页的概率1-p
  26. v = p*np.dot(m,v) + (1-p)*ee
  27. count+=1
  28. print("第{}次迭代".format(count))
  29. #pageRank值
  30. print(v)

二、TextRank算法

TextRank算法是一种基于图的文本排序算法。它将文本分成几个组成单元(句子),构建节点连接图,使用句子之间的相似度作为边的权重,通过循环迭代计算句子的TextRank值,最后提取排名较高的句子,形成文本摘要。本文介绍了提取文本摘要的算法TextRank,并使用Python实现了TextRank算法的应用,从多个单域文本数据中提取句子以形成摘要。

TextRank算法的代码实例:

它是从Google的PageRank算法改进而来的,用于对网页的重要性进行排序。它使用文档中单词之间的共现信息(语义)来提取关键字。它可以从给定文本中提取关键词和关键短语,并使用提取自动摘要方法提取文本的关键句子。

  1. # coding=utf-8
  2. from textrank4zh import TextRank4Keyword, TextRank4Sentence
  3. import jieba.analyse
  4. from snownlp import SnowNLP
  5. import pandas as pd
  6. import numpy as np
  7. #关键词抽取
  8. def keywords_extraction(text):
  9. tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'nrfg', 'ns', 'nt', 'nz'])
  10. # allow_speech_tags --词性列表,用于过滤某些词性的词
  11. tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words',
  12. pagerank_config={'alpha': 0.85, })
  13. keywords = tr4w.get_keywords(num=6, word_min_len=2)
  14. # num -- 返回关键词数量
  15. # word_min_len -- 词的最小长度,默认值为1
  16. return keywords
  17. #关键短语抽取
  18. def keyphrases_extraction(text):
  19. tr4w = TextRank4Keyword()
  20. tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words',
  21. pagerank_config={'alpha': 0.85, })
  22. keyphrases = tr4w.get_keyphrases(keywords_num=6, min_occur_num=1)
  23. # keywords_num -- 抽取的关键词数量
  24. # min_occur_num -- 关键短语在文中的最少出现次数
  25. return keyphrases
  26. #关键句抽取
  27. def keysentences_extraction(text):
  28. tr4s = TextRank4Sentence()
  29. tr4s.analyze(text, lower=True, source='all_filters')
  30. keysentences = tr4s.get_key_sentences(num=3, sentence_min_len=6)
  31. return keysentences
  32. def keywords_textrank(text):
  33. keywords = jieba.analyse.textrank(text, topK=6)
  34. return keywords
  35. if __name__ == "__main__":
  36. text = "来源:中国科学报本报讯(记者肖洁)又有一位中国科学家喜获小行星命名殊荣!4月19日下午,中国科学院国家天文台在京举行“周又元星”颁授仪式," \
  37. "我国天文学家、中国科学院院士周又元的弟子与后辈在欢声笑语中济济一堂。国家天文台、" \
  38. "副台长赵刚在致辞一开始更是送上白居易的诗句:“令公桃李满天下,何须堂前更种花。”" \
  39. "据介绍,这颗小行星由国家天文台施密特CCD小行星项目组于1997年9月26日发现于兴隆观测站," \
  40. "获得国际永久编号第120730号。2018年9月25日,经国家天文台申报," \
  41. "国际天文合会小天体联合会小天体命名委员会批准,国际天文合会《小行星通报》通知国际社会," \
  42. "正式将该小行星命名为“周又元星”。"
  43. #关键词抽取
  44. keywords=keywords_extraction(text)
  45. print(keywords)
  46. #关键短语抽取
  47. keyphrases=keyphrases_extraction(text)
  48. print(keyphrases)
  49. #关键句抽取
  50. keysentences=keysentences_extraction(text)
  51. print(keysentences)

部分代码解释如下:

text — 文本内容,字符串

window — 窗口大小,int,用来构造单词之间的边。默认值为2

lower — 是否将英文文本转换为小写,默认值为False

vertex_source — 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点

默认值为'all_filters',可选值为`’no_filter’, ‘no_stop_words’, ‘all_filters’

edge_source — 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点之间的边

默认值为'no_stop_words',可选值为'no_filter', 'no_stop_words', 'all_filters'。边的构造要结合window参数

pagerank_config — pagerank算法参数配置,阻尼系数为0.85

lower — 是否将英文文本转换为小写,默认值为False

source — 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来生成句子之间的相似度。

默认值为'all_filters',可选值为`’no_filter’, ‘no_stop_words’, ‘all_filters’

sim_func — 指定计算句子相似度的函数

获取最重要的num个长度大于等于sentence_min_len的句子用来生成摘要

三、PageRank算法与TextRank算法的区别

  • PageRank算法根据网页之间的链接关系构造网络,TextRank算法根据词之间的共现关系构造网络;

    PageRank算法:

TextRank算法:

  • PageRank算法构造的网络中的边是有向无权边,TextRank算法构造的网络中的边是无向有权边。
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
评论
0个
时间排序
内容存在敏感词
    0 条记录 第 0 /
    相关专栏
    打赏作者
    易百纳技术社区
    上进小菜猪
    您的支持将鼓励我继续创作!
    打赏金额:
    ¥1 易百纳技术社区
    ¥5 易百纳技术社区
    ¥10 易百纳技术社区
    ¥50 易百纳技术社区
    ¥100 易百纳技术社区
    支付方式:
    微信支付
    支付宝支付
    易百纳技术社区 微信支付
    易百纳技术社区
    打赏成功!

    感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

    举报反馈

    举报类型

    • 内容涉黄/赌/毒
    • 内容侵权/抄袭
    • 政治相关
    • 涉嫌广告
    • 侮辱谩骂
    • 其他

    详细说明

    审核成功

    发布时间设置
    发布时间:
    是否关联周任务-专栏模块

    审核失败

    失败原因
    备注
    Loading...
    易百纳技术社区
    确定要删除此文章、专栏、评论吗?
    确定
    取消
    易百纳技术社区
    易百纳技术社区
    在专栏模块发布专栏,可获得其他E友的打赏
    易百纳技术社区
    回答悬赏问答,被题主采纳后即可获得悬赏金
    易百纳技术社区
    在上传资料时,有价值的资料可设置为付费资源
    易百纳技术社区
    达到一定金额,收益即可提现~
    收益也可用来充值ebc,下载资料、兑换礼品更容易
    易百纳技术社区
    活动规则
    • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
    • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准,专栏需为原创文章且首次在社区发布
    • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
    易百纳技术社区
    升级提醒
    升级

    恭喜您的社区称号由 升级为 “社区游民”

    同时为了感谢您对社区的支持,我们将送出xxx礼品一份, 记得领取哦~

    升级提醒
    易百纳技术社区