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

news2024/11/24 3:08:24

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

一、PageRank算法

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

算法公式如下:

image-20230202130143219

原理如下图

image-20230202125738923

PageRank算法的核心思想如下:

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

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

代码实例:

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

二、TextRank算法

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

TextRank算法的代码实例:

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

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

    image-20230202130548357

TextRank算法:
在这里插入图片描述

  • PageRank算法构造的网络中的边是有向无权边,TextRank算法构造的网络中的边是无向有权边。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公司企业如何设计微信小程序?

​很多公司企业在制作小程序的时候都会考虑一个事情,就是如何设计微信小程序。有些公司企业希望把小程序设计得非常炫酷、抓人眼球。那么问题是:公司企业微信小程序的设计是否做得越酷炫、越抓人眼球就越好呢? 答案:非也&#xf…

基于SIFT的图像Matlab拼接教程

前言图像拼接技术,将普通图像或视频图像进行无缝拼接,得到超宽视角甚至360度的全景图,这样就可以用普通数码相机实现场面宏大的景物拍摄。利用计算机进行匹配,将多幅具有重叠关系的图像拼合成为一幅具有更大视野范围的图像&#x…

(一)Spring源码解析:容器的基本实现

一、Spring的整体架构 Spring的整体架构图如下所示: 二、容器的基本实现 2.1> 核心类介绍 2.1.1> DefaultListableBeanFactory DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现。 XmlBeanFactory集成自…

【FLASH存储器系列十四】固态硬盘结构和FTL初探

固态硬盘是一种典型的nand flash产品应用。与传统硬盘相化,固态硬盘内部没有移动的机械磁头,而是由固态电子存储芯片(闪存芯片)阵列级联组成,下图给出了固态硬盘的内部组成。现阶段,几乎所有基于闪存的固态…

ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)

随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生。本文主要基于ASP.NET CoreElementSql Server开发一个校园图书管理系统为例,简述基于MVC三层架构开发的常见知识点,前两篇文章简单介绍…

Nvidia深度学习环境安装

深度学习大型模型训练和部署,需要使用GPU,使用Pytorch、Tensorflow等深度学习框架之前需要安装驱动环境,本文系统环境:ubuntu22.04系统,四张3090显卡安装显卡驱动下载:选择显卡类型,下载驱动驱动下载路径&a…

Wireshark解析协议不匹配

Wireshark解析协议不匹配 1、问题 现有TLS/SSL over TCP的客户端、服务端相互通信,其中,服务端监听TCP端口6000。 使用tcpdump抓包6000端口,生成pcap文件6000.pcap: 使用Wireshark打开6000.pcap,显示如下&#xff1…

Hive(番外):Hive可视化工具IntelliJ IDEA

1 Hive CLI、Beeline CLI Hive自带的命令行客户端 优点:不需要额外安装 缺点:编写SQL环境恶劣,无有效提示,无语法高亮,误操作几率高 2 文本编辑器 Sublime、Emacs 、EditPlus、UltraEdit、Visual Studio Code等 有…

基于Seam Carving实现图像的重定位 附完整代码

相比于算法目标的复杂,算法步骤却异常的简单,下面具体介绍利用 SeamCarving 算法进行图像剪裁的步骤:1.计算图像中每个像素的“重要程度”(能量),生成能量图。在绝大多数情况下,我们可以做出如下…

【string 类的使用方法(总结)】

1. 为什么学习string类? C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要…

采用NVIDIA Jetson Orin NX 系统的视觉边缘计算机

边缘计算机采用NVIDIA Jetson Orin NX模块化系统和高带宽图像采集卡,用于实时图像采集计算和人工智能处理。虹科的合作伙伴Gidel是一家专注于高速图像采集和处理的以色列科技公司,今天宣布新的NVIDIA Jetson Orin NX™ 16GB模块化系统(SoM)将被添加到Gid…

SpringSecurity配置及使用

Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security 模块,进行少量的配置,即…

什么是渲染农场,渲染农场一般怎么收费?

对于用3D软件创作效果图或影视动画的艺术家们来说,应该对渲染农场并不陌生,但是对于初入CG行业的人来说,看到网上很多人说渲染农场,肯定会疑惑,什么是渲染农场?渲染农场也叫“分布式并行集群计算系统”&…

【6】【vue3+elementplus+springboot】 管理系统 【前后端实践】

第一部分: elementplus官网:一个 Vue 3 UI 框架 | Element Plus (element-plus.org) 1、安装elementplus npm install element-plus --save查看package.json中存在依赖表示成功安装 2、引入elementplus import ElementPlus from element-plus import …

论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第5部分,完结篇)

文章目录🚗 V. Vehicle Control(车辆控制)🔴 A. Path Stabilization for the Kinematic Model(基于运动学模型的路径稳定)🟥 1)Pure Pursuit(纯追踪)&#x1…

H3C SecParh堡垒机任意用户登录与远程执行代码漏洞

H3C SecParh堡垒机任意用户登录与远程执行代码漏洞1.H3C SecParh堡垒机任意用户登录漏洞1.1.漏洞描述1.2.漏洞影响1.3.漏洞复现1.3.1.登录页面1.3.2.构建URL1.4.总结2.H3C SecParh堡垒机远程命令执行漏洞2.1.漏洞描述2.2.漏洞影响2.3.漏洞复现2.3.1.登录页面2.3.2.构建URL2.4.总…

python-pptx 操作PPTx幻灯片文件删除并替换图片

python-pptx 操作PPTx幻灯片文件删除并替换图片 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、原理 通过查找ppt中的图片指纹替换 二、操作流程 原始ppt如下: 根据…

[单片机] MCU串口发送C方案优化

应用场景: 主频不高非操作系统的单片机,需要在while循环中发送 数据到上位机,当数据较长时,会让发送的过程会让其他操作有卡顿感。为了解决这个问题,需采用一种方法:在每次大循环中只发一个字节数据&#x…

HTML5+CSS3(一)-全面详解(学习总结---从入门到深化)

目录 ​编辑 第一个前端程序 学习效果反馈 前端工具的选择与安装 前端常见开发者工具 浏览器 VSCode中文语言包安装: 学习效果反馈 VSCode开发者工具快捷键 VSCode常用快捷键列表 学习效果反馈 HTML5简介与基础骨架 HTML5的DOCTYPE声明 HTML5基本骨架 html…

Linux(CentOS Stream 9)安装MySQL8.0

mysql8下载链接 链接:https://pan.baidu.com/s/1yBCDbDYUmQWjcM1SdS7Xng 提取码:t37m 上传到服务器上并解压 cd /usr/localtar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz解压包重命名为mysql mv mysql-8.0.21-linux-glibc2.12-x86_64 /usr/l…