当前位置:   article > 正文

文本摘要 - 使用 TextRank4ZH 抽取中文文本摘要_textrank4sentence

textrank4sentence


关于 TextRank4ZH

TextRank算法可以用来从文本中提取关键词和摘要(重要的句子)。
TextRank4ZH是针对中文文本的TextRank算法的python算法实现。


安装

依赖

  • jieba >= 0.35
  • numpy >= 1.7.1
  • networkx >= 1.9.1
pip install textrank4zh
  • 1

关键词提取

将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。

由此可以得到句子的集合和单词的集合。

每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:

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

w1, w2, ..., wkw2, w3, ...,wk+1w3, w4, ...,wk+2等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。

基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。


关键短语提取

参照关键词提取提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键词组。

例如,在一篇介绍支持向量机的文章中,可以找到关键词支持向量,通过关键词组提取,可以得到支持向量机


摘要生成

将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。

通过 pagerank 算法计算得到的重要性最高的若干句子可以当作摘要。


使用示例

类TextRank4Keyword、TextRank4Sentence在处理一段文本时会将文本拆分成4种格式:

  • sentences:由句子组成的列表。
  • words_no_filter:对sentences中每个句子分词而得到的两级列表。
  • words_no_stop_words:去掉words_no_filter中的停止词而得到的二维列表。
  • words_all_filters:保留words_no_stop_words中指定词性的单词而得到的二维列表。
#-*- encoding:utf-8 -*-
from __future__ import print_function
import sys
import codecs
from textrank4zh import TextRank4Keyword, TextRank4Sentence

try:
    reload(sys)
    sys.setdefaultencoding('utf-8')
except:
    pass


text = codecs.open('../test/doc/01.txt', 'r', 'utf-8').read()
tr4w = TextRank4Keyword()

# py2中text必须是utf8编码的str或者unicode对象,py3中必须是utf8编码的bytes或者str对象
tr4w.analyze(text=text, lower=True, window=2)  

print('\n-- 关键词:' )
for item in tr4w.get_keywords(20, word_min_len=1):
    print(item.word, item.weight)


print('\n-- 关键短语:' )
for phrase in tr4w.get_keyphrases(keywords_num=20, min_occur_num= 2):
    print(phrase)
 
print('\n-- sentences:')
for s in tr4w.sentences:
    print(s)        

    
print('\n-- words_no_filter')
for words in tr4w.words_no_filter:
    print('/'.join(words))  

print('\n-- words_no_stop_words')
for words in tr4w.words_no_stop_words:
    print('/'.join(words))    

    
print('\n-- words_all_filters')
for words in tr4w.words_all_filters:
    print('/'.join(words))   
    

tr4s = TextRank4Sentence()
tr4s.analyze(text=text, lower=True, source = 'all_filters')

print( '\n-- 摘要:' )
for item in tr4s.get_key_sentences(num=3):
    # index是语句在文本中位置,weight是权重
    print(item.index, item.weight, item.sentence)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

报错处理

报错1

AttributeError: module ‘networkx’ has no attribute ‘from_numpy_matrix’

使用 networkx 3.0 及以上版本,可能会报这个错误;暂时可将版本降低到 1.9.1。

pip3 install networkx==1.9.1
  • 1

报错2

ImportError: cannot import name ‘escape’ from ‘cgi’ (/Users/xx/miniconda3/lib/python3.8/cgi.py)

解决方法:修改文件

/Users/xx/miniconda3/lib/python3.8/site-packages/networkx/readwrite/gml.py

from cgi import escape
  • 1

替换为

from html import escape
  • 1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/443294
推荐阅读
相关标签
  

闽ICP备14008679号