当前位置:   article > 正文

机器学习-TextRank算法学习_textrank 算法

textrank 算法

一、算法简介

TextRank算法是一种基于图的排序算法,用于为文本生成关键字和摘要。该算法的基本思想来源于谷歌的PageRank算法,通过将文本分割成若干组成单元(单词、句子)并建立图模型,利用投票机制对文本中的重要成分进行排序,仅利用单篇文档本身的信息即可实现关键词提取、文摘。

二、算法运用

  • 摘要生成:TextRank算法可以根据给定文本生成摘要,通过对文本进行分词、构建词图和传播权重等步骤,提取出文本中的重要信息,生成简洁明了的摘要。
  • 关键词提取:通过分析文本中词汇的共现关系和权重,TextRank算法可以提取出文本中的关键词或短语,有助于对文本进行分类、索引和主题分析。
  • 文本分类:TextRank算法也可以用于文本分类任务,通过对文本进行分词和权重计算,提取出文本的特征,并根据特征对文本进行分类。
  • 信息抽取:TextRank算法可以用于从大量文本中抽取关键信息,例如从新闻报道中提取事件、时间、地点等关键要素。
  • 社交媒体分析:在社交媒体分析中,TextRank算法可以用于分析用户发布的文本内容,提取出话题、趋势和关键人物等信息。
  • 跨语言应用:TextRank算法也可以应用于跨语言场景,例如机器翻译和跨语言信息检索等任务

三、算法步骤

TextRank算法的计算公式是利用局部词汇之间关系(共现窗口)对后续关键词进行排序,直接从文本本身抽取。其基本步骤如下:
  • 把给定的文本T按照完整句子进行分割。
  • 对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词。
  • 构建候选关键词图G = (V,E),其中V为节点集,由上一步生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。
  • 根据公式迭代传播各节点的权重,直至收敛。
  • 对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。
  • 由上一步得到最重要的T个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词

四、算法实现代码

import jieba  
from collections import defaultdict  
  
def textrank(text, top_k=10):  
    # 分词  
    words = list(jieba.cut(text))  
      
    # 过滤停用词(可选步骤,需要提供停用词列表)  
    # stopwords = set(['的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一个', '上', '到', '也'])  
    # words = [word for word in words if word not in stopwords]  
      
    # 构建词图  
    graph = defaultdict(set)  
    for i in range(len(words)):  
        for j in range(i+1, len(words)):  
            # 在实际应用中,通常设置一个窗口大小,这里为了简化,直接取相邻的词  
            if j == i + 1:  
                graph[words[i]].add(words[j])  
                graph[words[j]].add(words[i])  
      
    # 初始化权重  
    weights = defaultdict(float)  
    for node in graph:  
        weights[node] = 1.0  
      
    # 迭代传播权重  
    for _ in range(10):  # 迭代次数可以根据需要调整  
        new_weights = defaultdict(float)  
        for node in graph:  
            for neighbor in graph[node]:  
                new_weights[node] += weights[neighbor] / len(graph[neighbor])  
        weights = new_weights  
      
    # 对权重进行排序,提取关键词  
    ranked_words = sorted(weights.items(), key=lambda x: x[1], reverse=True)  
      
    # 输出前top_k个关键词  
    print("Keywords:")  
    for word, weight in ranked_words[:top_k]:  
        print(f"{word}: {weight}")  
  
# 示例文本  
text = "这是一个关于TextRank算法的示例文本,我们将使用这段文本来提取关键词。"  
  
# 调用TextRank函数并输出结果  
textrank(text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

在这里插入图片描述

五、算法优缺点

TextRank算法的优点:
  • 无监督方式,无需构造数据集训练。
  • 算法原理简单且部署简单。
  • 继承了PageRank的思想,效果相对较好,相对于TF-IDF方法,可以更充分的利用文本元素之间的关系。
TextRank算法的缺点:
  • 结果受分词、文本清洗影响较大,即对于某些停用词的保留与否,直接影响最终结果。
  • 虽然与TF-IDF比,不止利用了词频,但是仍然受高频词的影响,因此,需要结合词性和词频进行筛选,以达到更好效果,但词性标注显然又是一个问题。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/532386
推荐阅读
相关标签
  

闽ICP备14008679号