探索TextRank提取文本關鍵詞

TextRank算法介紹

  先說一下自動文摘的方法。自動文摘(Automatic Summarization)的方法主要有兩種:Extraction和Abstraction。其中Extraction是抽取式自動文摘方法,通過提取文檔中已存在的關鍵詞,句子形成摘要;Abstraction是生成式自動文摘方法,通過建立抽象的語意表示,使用自然語言生成技術,形成摘要。由於生成式自動摘要方法需要複雜的自然語言理解和生成技術支持,應用領域受限。所以本人學習的也是抽取式的自動文摘方法。

  目前主要方法有:

  • 基於統計:統計詞頻,位置等信息,計算句子權值,再簡選取權值高的句子作爲文摘,特點:簡單易用,但對詞句的使用大多僅停留在表面信息。
  • 基於圖模型:構建拓撲結構圖,對詞句進行排序。例如,TextRank/LexRank
  • 基於潛在語義:使用主題模型,挖掘詞句隱藏信息。例如,採用LDA,HMM
  • 基於整數規劃:將文摘問題轉爲整數線性規劃,求全局最優解。

  textrank算法

  TextRank算法基於PageRank,用於爲文本生成關鍵字和摘要。

  

PageRank

 

PageRank最開始用來計算網頁的重要性。整個www可以看作一張有向圖圖,節點是網頁。如果網頁A存在到網頁B的鏈接,那麼有一條從網頁A指向網頁B的有向邊。

 

構造完圖後,使用下面的公式:

 

注意事項:

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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章