TextRank是PageRank算法在文本处理中的应用,通过将PageRank中的节点从网站替换为单词。

每个单词的“外链”均来自于单词前后固定大小的窗口内的所有单词。

给 你 形容 美好 今后 你 常常 眼睛 会 红

例如,当窗口大小而2时,上面的句子中的“美好”一词,它的窗口内就包含“你”、“形容”、“今后”、“你”这个四个词;以此类推。

在计算TextRank的过程中,窗口内的每个词都相当于给中心词投了一篇,那一票的权重等于该词投出去的所有票平分。

这样的投票方式会产生如下的效果:

  • 一个词语左右搭配越多(信息熵越高),给这个词投票的词就越多,这个词的得分就越高。
  • 一个词出现频率越高,就越有机会被更多的词投票,这个词的得分也会越高。

下面,我们将朱自清的《春》作为例子,使用HanLP提供的extractKeyword静态函数实现TextRank算法,提取其中的前10个关键词:

from pyhanlp import HanLP

if __name__ == '__main__':
    content = "盼望着,盼望着,东风来了,春天的脚步近了。......"

    keyword_list = HanLP.extractKeyword(content, 10)
    print(keyword_list)

运行结果

[春天, 里, 眼, 起来, 风, 雨, 乡下, 小草, 味儿, 刚]

而使用词频统计的方法提取《春》的关键词的结果如下:

[里=4, 春天=4, 起来=3, 眼=3, 风=2, 雨=2, 赶趟儿=2, 花=2, 眨=2, 盼望着=2]

相比之下,TextRank有效判断出了“春天”是比“里”更重要的关键词,但同样也存在一些问题。

学习参考文献:《自然语言处理入门》(何晗):9.2.3