中文分詞庫:TextRank4ZH

jopen 10年前發布 | 56K 次閱讀 中文分詞 TextRank4ZH

TextRank4ZH 用于自動從中文文本中提取關鍵詞和摘要,基于 TextRank 算法,使用 Python 編寫。


TextRank 算法可以用來從文本中提取關鍵詞和摘要(重要的句子)。TextRank4ZH是針對中文文本的TextRank算法的python算法實現。

安裝

本程序使用python 2.7測試沒有問題,暫時不兼容python 3。

先確定已經有jieba、numpy、networkx這三個庫。可以使用pip安裝:

$ sudo pip install numpy
$ sudo pip install jieba
$ sudo pip install networkx

關于庫版本,以下作為參考:

$ pip show jieba
---
Name: jieba
Version: 0.35
Location: /usr/local/lib/python2.7/dist-packages
Requires: 
$ pip show numpy
---
Name: numpy
Version: 1.7.1
Location: /usr/lib/python2.7/dist-packages
Requires: 
$ pip show networkx
---
Name: networkx
Version: 1.9.1
Location: /usr/local/lib/python2.7/dist-packages
Requires: decorator

另外,請確保安裝最新版本的jieba分詞,TextRank4ZH需要新版本jieba提供的詞性標注功能。

$ sudo pip install jieba --upgrade

TextRank4ZH暫不支持使用easy_install、pip來安裝,使用者可以將textrank4zh拷貝到項目目錄,或者環境變量PYTHONPATH指向的目錄中。

目錄結構

├── LICENSE         #許可證
├── README.md       #使用說明
├── stopword.data   #停止詞詞典
├── test.py         #測試
├── text            #存放測試所需要的文本
│   ├── 01.txt
│   ├── 02.txt
│   ├── 03.txt
│   ├── 04.txt
│   └── 05.txt
└── textrank4zh     #!main
    ├── __init__.py
    ├── Segmentation.py
    ├── TextRank4Keyword.py
    └── TextRank4Sentence.py

原理

TextRank的詳細原理請參考:

Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004.

關鍵詞提取

將原文本拆分為句子,在每個句子中過濾掉停用詞(可選),并只保留指定詞性的單詞(可選)。由此可以得到句子的集合和單詞的集合。

每個單詞作為pagerank中的一個節點。設定窗口大小為k,假設一個句子依次由下面的單詞組成:

w1, w2, w3, w4, w5, ..., wn

w1, w2, ..., wk、w2, w3, ...,wk+1、w3, w4, ...,wk+2等都是一個窗口。在一個窗口中的任兩個單詞對應的節點之間存在一個無向無權的邊。

基于上面構成圖,可以計算出每個單詞節點的重要性。最重要的若干單詞可以作為關鍵詞。

關鍵短語提取

參照關鍵詞提取提取出若干關鍵詞。若原文本中存在若干個關鍵詞相鄰的情況,那么這些關鍵詞可以構成一個關鍵詞組。

例如,在一篇介紹支持向量機的文章中,可以找到關鍵詞支持、向量、機,通過關鍵詞組提取,可以得到支持向量機。

摘要生成

將每個句子看成圖中的一個節點,若兩個句子之間有相似性,認為對應的兩個節點之間有一個無向有權邊,權值是相似度。

通過pagerank算法計算得到的重要性最高的若干句子可以當作摘要。

測試

test.py提供了使用的示例:

#-*- encoding:utf-8 -*-

import codecs
from textrank4zh import TextRank4Keyword, TextRank4Sentence

text = codecs.open('./text/01.txt', 'r', 'utf-8').read()
tr4w = TextRank4Keyword(stop_words_file='./stopword.data')  # 導入停止詞

#使用詞性過濾,文本小寫,窗口為2
tr4w.train(text=text, speech_tag_filter=True, lower=True, window=2)  

print '關鍵詞:'
# 20個關鍵詞且每個的長度最小為1
print '/'.join(tr4w.get_keywords(20, word_min_len=1))  

print '關鍵短語:'
# 20個關鍵詞去構造短語,短語在原文本中出現次數最少為2
print '/'.join(tr4w.get_keyphrases(keywords_num=20, min_occur_num= 2))  

tr4s = TextRank4Sentence(stop_words_file='./stopword.data')

# 使用詞性過濾,文本小寫,使用words_all_filters生成句子之間的相似性
tr4s.train(text=text, speech_tag_filter=True, lower=True, source = 'all_filters')

print '摘要:'
print '\n'.join(tr4s.get_key_sentences(num=3)) # 重要性最高的三個句子

得到的關鍵詞:

媒體/高圓圓/微/賓客/趙又廷/答謝/謝娜/現身/記者/新人/北京/博/展示/捧場/禮物/張杰/當晚/戴/酒店/外套

得到的關鍵短語:

微博

得到的摘要:

中新網北京12月1日電(記者 張曦) 30日晚,高圓圓和趙又廷在京舉行答謝宴,諸多明星現身捧場,其中包括張杰(微博)、謝娜(微博)夫婦、何炅(微博)、蔡康永(微博)、徐克、張凱麗、黃軒(微博)等
高圓圓身穿粉色外套,看到大批記者在場露出嬌羞神色,趙又廷則戴著鴨舌帽,十分淡定,兩人快步走進電梯,未接受媒體采訪
記者了解到,出席高圓圓、趙又廷答謝宴的賓客近百人,其中不少都是女方的高中同學

使用說明

類TextRank4Keyword、TextRank4Sentence在處理一段文本時會將文本拆分成4種格式:

sentences:由句子組成的列表。

words_no_filter:對sentences中每個句子分詞而得到的兩級列表。

words_no_stop_words:去掉words_no_filter中的停止詞而得到的兩級列表。

words_all_filters:保留words_no_stop_words中指定詞性的單詞而得到的兩級列表。

例如,對于:

這間酒店位于北京東三環,里面擺放很多雕塑,文藝氣息十足。答謝宴于晚上8點開始。

對類TextRank4Sentence,在speech_tag_filter=True, lower=True, source = 'all_filters'時,

sentences:

['這間酒店位于北京東三環,里面擺放很多雕塑,文藝氣息十足', 
'答謝宴于晚上8點開始']

words_no_filter:

[
    [ '這', '間, '酒店, '位于, '北京, '東三環, '里面, '擺放, '很多, '雕塑, '文藝, '氣息, '十足'],
    [ '答謝', '宴于, '晚上, '8, '點, '開始' ]
]

words_no_stop_words:

[
    [ '間', '酒店, '位于, '北京, '東三環, '里面, '擺放, '很多, '雕塑, '文藝, '氣息, '十足' ],
    [ '答謝', '宴于, '晚上, '8, '點' ]
]

words_all_filters:

[
    [ '酒店', '位于, '北京, '東三環, '擺放, '雕塑, '文藝, '氣息' ],
    [ '答謝', '宴于, '晚上' ]
]

類TextRank4Keyword位于textrank4zh/TextRank4Keyword.py中,類TextRank4Sentence位于textrank4zh/TextRank4Sentence.py中,類的實現、函數的參數請參考源碼注釋。

項目主頁:http://www.baiduhome.net/lib/view/home/1417489927682

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!