用TextRank提取来提取关键词,用PageRank的思想来解释它:
- 如果一个单词出现在很多单词后面的话,那么说明这个单词比较重要
- 一个TextRank值很高的单词后面跟着的一个单词,那么这个单词的TextRank值会相应地因此而提高
背景相关TF-IDF:
仅仅从词的统计信息出发,而没有充分考虑词之间的语义信息。现在本文将介绍一种考虑了相邻词的语义关系、基于图排序的关键词提取算法TextRank。
思想
其思想非常简单:通过词之间的相邻关系构建网络,然后用PageRank迭代计算每个节点的rank值,排序rank值即可得到关键词。PageRank本来是用来解决网页排名的问题,网页之间的链接关系即为图的边,迭代计算公式如下
网页之间的链接关系可以用图表示,那么怎么把一个句子(可以看作词的序列)构建成图呢?
TextRank将某一个词与其前面的N个词、以及后面的N个词均具有图相邻关系(类似于N-gram语法模型)。
具体实现:
设置一个长度为N的滑动窗口,所有在这个窗口之内的词都视作词结点的相邻结点;则TextRank构建的词图为无向图。下图给出了由一个文档构建的词图(去掉了停用词并按词性做了筛选)
考虑到不同词对可能有不同的共现(co-occurrence),TextRank将共现作为无向图边的权值。那么,TextRank的迭代计算公式如下:
代码实现:
#!/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