TextRank 关键词提取算法

一、TextRank 的算法原理: 其前身是PageRank。 二者的思想有相同之处,区别在于:PageRank算法根据网页之间的链接关系构造网络,而TextRank算法根据词之间的共现关系构造网络;PageRank算法构造的网络中的边是有向无权边,而TextRank算法构造的网络中的边是无向有权边。TextRank 一般模型可以表示为一个有向有权图 G =(V, E), 由点集合 V和边集合 E 组成, E 是V ×V的子集。图中任两点 Vi , Vj 之间边的权重为 wji , 对于一个给定的点 Vi, In(Vi) 为 指 向 该 点 的 点 集 合 , Out(Vi) 为点 Vi 指向的点集合。点 Vi 的得分定义如下:

其中, wji用于表示两个节点之间的边连接具有不同的重要程度;d 为阻尼系数, 取值范围为 0 到 1, 代表从图中某一特定点指向其他任意点的概率, 一般取值为 0.85。使用TextRank 算法计算图中各点的得分时, 需要给图中的点指定任意的初值, 并递归计算直到收敛, 即图中任意一点的误差率小于给定的极限值时就可以达到收敛, 一般该极限值取 0.0001。

 

二、TextRank 的应用:关键词提取。 textrank4zh模块是针对中文文本的TextRank算法的python实现,该模块的下载地址为:点击打开链接

# -*- coding: utf-8 -*-
import codecs
from textrank4zh import TextRank4Keyword, TextRank4Sentence 
text = codecs.open('D://data/tmall/origin_tmall_review.txt', 'r', 'utf-8').read()
tr4w = TextRank4Keyword()
tr4w.analyze(text=text, lower=True, window=2)
print( '关键词:' )
for item in tr4w.get_keywords(10, word_min_len=1):
    print("{} 出现的频率为:{:.6f}".format(item.word, item.weight)) 
print( '关键短语:' )
for phrase in tr4w.get_keyphrases(keywords_num=10, min_occur_num=5):
    print(phrase) 
tr4s = TextRank4Sentence()
tr4s.analyze(text=text, lower=True, source = 'all_filters') 
print()
print( '摘要:' )
for item in tr4s.get_key_sentences(num=3):
    #index是语句在文本中位置,weight是权重
    print("第{}句出现的频率为:{:.6f},内容为:{}".format(item.index, item.weight, item.sentence))  

 

你可能感兴趣的:(NLP)