天天看点

关键词提取算法TextRank背景相关TF-IDF:思想具体实现: 代码实现:

 用TextRank提取来提取关键词,用PageRank的思想来解释它:

  • 如果一个单词出现在很多单词后面的话,那么说明这个单词比较重要
  • 一个TextRank值很高的单词后面跟着的一个单词,那么这个单词的TextRank值会相应地因此而提高

背景相关TF-IDF:

仅仅从词的统计信息出发,而没有充分考虑词之间的语义信息。现在本文将介绍一种考虑了相邻词的语义关系、基于图排序的关键词提取算法TextRank。 

思想

其思想非常简单:通过词之间的相邻关系构建网络,然后用PageRank迭代计算每个节点的rank值,排序rank值即可得到关键词。PageRank本来是用来解决网页排名的问题,网页之间的链接关系即为图的边,迭代计算公式如下

关键词提取算法TextRank背景相关TF-IDF:思想具体实现: 代码实现:

网页之间的链接关系可以用图表示,那么怎么把一个句子(可以看作词的序列)构建成图呢?

TextRank将某一个词与其前面的N个词、以及后面的N个词均具有图相邻关系(类似于N-gram语法模型)。 

具体实现:

设置一个长度为N的滑动窗口,所有在这个窗口之内的词都视作词结点的相邻结点;则TextRank构建的词图为无向图。下图给出了由一个文档构建的词图(去掉了停用词并按词性做了筛选)

关键词提取算法TextRank背景相关TF-IDF:思想具体实现: 代码实现:

考虑到不同词对可能有不同的共现(co-occurrence),TextRank将共现作为无向图边的权值。那么,TextRank的迭代计算公式如下: 

关键词提取算法TextRank背景相关TF-IDF:思想具体实现: 代码实现:

 代码实现:

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: Jia ShiLin

from jieba import analyse

# 引入关键词提取接口
textrank = analyse.textrank  #

# 原始文本
path = 'TextRank.txt'
with open(path, ) as f:
    text = str(f.read())
    print('\nkeywords by textrank:')  # 基于TextRank算法进行关键词提取


    #可以到定义的系统textrank.py原函数中修改默然值,查看值,topK表示最高多少个词了列出,allowPOS表示允许保留的词性词
    ##  def textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False):
    keywords = textrank(text,topK=10,withWeight=True,allowPOS=('n','a','ns'))

    #输出提取出的关键词 f
    words = [keywords for keywords,w in keywords if w >0.2]
    print(' '.join(words)+'\n')
           

refrence:

https://www.cnblogs.com/en-heng/p/6626210.html

NLP

继续阅读