探索TextRank提取文本关键词

TextRank算法介绍

  先说一下自动文摘的方法。自动文摘(Automatic Summarization)的方法主要有两种:Extraction和Abstraction。其中Extraction是抽取式自动文摘方法,通过提取文档中已存在的关键词,句子形成摘要;Abstraction是生成式自动文摘方法,通过建立抽象的语意表示,使用自然语言生成技术,形成摘要。由于生成式自动摘要方法需要复杂的自然语言理解和生成技术支持,应用领域受限。所以本人学习的也是抽取式的自动文摘方法。

  目前主要方法有:

  • 基于统计:统计词频,位置等信息,计算句子权值,再简选取权值高的句子作为文摘,特点:简单易用,但对词句的使用大多仅停留在表面信息。
  • 基于图模型:构建拓扑结构图,对词句进行排序。例如,TextRank/LexRank
  • 基于潜在语义:使用主题模型,挖掘词句隐藏信息。例如,采用LDA,HMM
  • 基于整数规划:将文摘问题转为整数线性规划,求全局最优解。

  textrank算法

  TextRank算法基于PageRank,用于为文本生成关键字和摘要。

  

PageRank

 

PageRank最开始用来计算网页的重要性。整个www可以看作一张有向图图,节点是网页。如果网页A存在到网页B的链接,那么有一条从网页A指向网页B的有向边。

 

构造完图后,使用下面的公式:
探索TextRank提取文本关键词_第1张图片

 

注意事项:

userdict.txt  :是我需要增加专业性的词汇的词库
data.data     :数据集
#! /usr/bin/python
# -*- coding: utf8 -*-
# @Time    : 2019/3/4 15:40
# @Author  : yukang
# 来源:https://blog.csdn.net/a2099948768/article/details/89189908

import sys
import pandas as pd
import jieba.analyse
"""
TextRank权重;
    1,将待抽取关键词的文本进行分词,去停用词,刷选词性
    2,以固定窗口大小,词之间的共现关系,构建图
    3,计算图中节点的PageRank,注意是无向带权图
"""
# 处理标题和摘要,提取关键词
def getKeywords_textrank(data,topK):
    idList, titleList, abstractList = data['id'], data['title'], data['abstract']
    ids, titles, keys = [], [], []
    for index in range(len(idList)):
        text = '%s。%s'%(titleList[index],abstractList[index])
        jieba.analyse.set_stop_words('./stop_words.txt') # 加载停用词
        print(titleList[index],"  10 Keywords - TextRank:")
        keywords = jieba.analyse.textrank(text,topK=topK,allowPOS=('n','nz','v','vd','vn','l','a','d'))
        word_split = " ".join(keywords)
        print(word_split)
        keys.append(word_split.encode("utf-8"))
        ids.append(idList[index])
        titles.append(titles[index])
    result = pd.DataFrame({"id":ids,"title":titles,"key":keys},columns=["id","title","key"])
    return result

def main():
    dataFile = "./data.data"
    data = pd.read_csv(dataFile)
    result = getKeywords_textrank(data,10)
    print(result)

if __name__ == '__main__':
    main()

 

你可能感兴趣的:(自然语言处理)