用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