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