原贴地址:https://xercis.blog.csdn.net/article/details/104677317
TextRank4ZHTextRank算法可以用来从文本中提取关键词和摘要(重要的句子)。TextRank4ZH是针对中文文本的TextRank算法的python算法实现。 [color=var(--color-accent-fg)]安装方式1: $ python setup.py install --user
方式2: $ sudo python setup.py install
方式3: $ pip install textrank4zh --user
方式4: $ sudo pip install textrank4zh
Python 3下需要将上面的python改成python3,pip改成pip3。 [color=var(--color-accent-fg)]卸载$ pip uninstall textrank4zh
[color=var(--color-accent-fg)]依赖jieba >= 0.35
numpy >= 1.7.1
networkx >= 1.9.1 [color=var(--color-accent-fg)]兼容性在Python 2.7.9和Python 3.4.3中测试通过。 [color=var(--color-accent-fg)]原理TextRank的详细原理请参考: Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004. [color=var(--color-accent-fg)]关键词提取将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。 每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成: w1, w2, w3, w4, w5, ..., wn
w1, w2, ..., wk、w2, w3, ...,wk+1、w3, w4, ...,wk+2等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。 基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。 [color=var(--color-accent-fg)]关键短语提取参照[color=var(--color-accent-fg)]关键词提取提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键词组。 例如,在一篇介绍支持向量机的文章中,可以找到关键词支持、向量、机,通过关键词组提取,可以得到支持向量机。 [color=var(--color-accent-fg)]摘要生成将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。 通过pagerank算法计算得到的重要性最高的若干句子可以当作摘要。 [color=var(--color-accent-fg)]示例见[color=var(--color-accent-fg)]example、[color=var(--color-accent-fg)]test。 example/example01.py: [color=var(--color-prettylights-syntax-comment)]#-*- encoding:utf-8 -*-[color=var(--color-prettylights-syntax-keyword)]from __future__ [color=var(--color-prettylights-syntax-keyword)]import print_function[color=var(--color-prettylights-syntax-keyword)]import sys[color=var(--color-prettylights-syntax-keyword)]try: [color=var(--color-prettylights-syntax-entity)]reload(sys) sys.[color=var(--color-prettylights-syntax-entity)]setdefaultencoding([color=var(--color-prettylights-syntax-string)]'utf-8')[color=var(--color-prettylights-syntax-keyword)]except: [color=var(--color-prettylights-syntax-keyword)]pass[color=var(--color-prettylights-syntax-keyword)]import codecs[color=var(--color-prettylights-syntax-keyword)]from textrank4zh [color=var(--color-prettylights-syntax-keyword)]import [color=var(--color-prettylights-syntax-variable)]TextRank4Keyword, [color=var(--color-prettylights-syntax-variable)]TextRank4Sentencetext [color=var(--color-prettylights-syntax-constant)]= codecs.[color=var(--color-prettylights-syntax-entity)]open([color=var(--color-prettylights-syntax-string)]'../test/doc/01.txt', [color=var(--color-prettylights-syntax-string)]'r', [color=var(--color-prettylights-syntax-string)]'utf-8').[color=var(--color-prettylights-syntax-entity)]read()tr4w [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-variable)]TextRank4Keyword()tr4w.[color=var(--color-prettylights-syntax-entity)]analyze(text[color=var(--color-prettylights-syntax-constant)]=text, lower[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]True, window[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]2) [color=var(--color-prettylights-syntax-comment)]# py2中text必须是utf8编码的str或者unicode对象,py3中必须是utf8编码的bytes或者str对象[color=var(--color-prettylights-syntax-entity)]print( [color=var(--color-prettylights-syntax-string)]'关键词:' )[color=var(--color-prettylights-syntax-keyword)]for item [color=var(--color-prettylights-syntax-constant)]in tr4w.[color=var(--color-prettylights-syntax-entity)]get_keywords([color=var(--color-prettylights-syntax-constant)]20, word_min_len[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]1): [color=var(--color-prettylights-syntax-entity)]print(item.word, item.weight)[color=var(--color-prettylights-syntax-entity)]print()[color=var(--color-prettylights-syntax-entity)]print( [color=var(--color-prettylights-syntax-string)]'关键短语:' )[color=var(--color-prettylights-syntax-keyword)]for phrase [color=var(--color-prettylights-syntax-constant)]in tr4w.[color=var(--color-prettylights-syntax-entity)]get_keyphrases(keywords_num[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]20, min_occur_num[color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-constant)]2): [color=var(--color-prettylights-syntax-entity)]print(phrase)tr4s [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-variable)]TextRank4Sentence()tr4s.[color=var(--color-prettylights-syntax-entity)]analyze(text[color=var(--color-prettylights-syntax-constant)]=text, lower[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]True, source [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-string)]'all_filters')[color=var(--color-prettylights-syntax-entity)]print()[color=var(--color-prettylights-syntax-entity)]print( [color=var(--color-prettylights-syntax-string)]'摘要:' )[color=var(--color-prettylights-syntax-keyword)]for item [color=var(--color-prettylights-syntax-constant)]in tr4s.[color=var(--color-prettylights-syntax-entity)]get_key_sentences(num[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]3): [color=var(--color-prettylights-syntax-entity)]print(item.index, item.weight, item.sentence) [color=var(--color-prettylights-syntax-comment)]# index是语句在文本中位置,weight是权重
运行结果如下: 关键词:媒体 0.02155864734852778高圆圆 0.020220281898126486微 0.01671909730824073宾客 0.014328439104001788赵又廷 0.014035488254875914答谢 0.013759845912857732谢娜 0.013361244496632448现身 0.012724133346018603记者 0.01227742092899235新人 0.01183128428494362北京 0.011686712993089671博 0.011447168887452668展示 0.010889176260920504捧场 0.010507502237123278礼物 0.010447275379792245张杰 0.009558332870902892当晚 0.009137982757893915戴 0.008915271161035208酒店 0.00883521621207796外套 0.008822082954131174关键短语:微博摘要:摘要:0 0.0709719557171 中新网北京12月1日电(记者 张曦) 30日晚,高圆圆和赵又廷在京举行答谢宴,诸多明星现身捧场,其中包括张杰(微博)、谢娜(微博)夫妇、何炅(微博)、蔡康永(微博)、徐克、张凯丽、黄轩(微博)等6 0.0541037236415 高圆圆身穿粉色外套,看到大批记者在场露出娇羞神色,赵又廷则戴着鸭舌帽,十分淡定,两人快步走进电梯,未接受媒体采访27 0.0490428312984 记者了解到,出席高圆圆、赵又廷答谢宴的宾客近百人,其中不少都是女方的高中同学
[color=var(--color-accent-fg)]使用说明类TextRank4Keyword、TextRank4Sentence在处理一段文本时会将文本拆分成4种格式: - sentences:由句子组成的列表。
- words_no_filter:对sentences中每个句子分词而得到的两级列表。
- words_no_stop_words:去掉words_no_filter中的停止词而得到的二维列表。
- words_all_filters:保留words_no_stop_words中指定词性的单词而得到的二维列表。
例如,对于: 这间酒店位于北京东三环,里面摆放很多雕塑,文艺气息十足。答谢宴于晚上8点开始。
[color=var(--color-prettylights-syntax-comment)]#-*- encoding:utf-8 -*-[color=var(--color-prettylights-syntax-keyword)]from __future__ [color=var(--color-prettylights-syntax-keyword)]import print_function[color=var(--color-prettylights-syntax-keyword)]import codecs[color=var(--color-prettylights-syntax-keyword)]from textrank4zh [color=var(--color-prettylights-syntax-keyword)]import [color=var(--color-prettylights-syntax-variable)]TextRank4Keyword, [color=var(--color-prettylights-syntax-variable)]TextRank4Sentence[color=var(--color-prettylights-syntax-keyword)]import sys[color=var(--color-prettylights-syntax-keyword)]try: [color=var(--color-prettylights-syntax-entity)]reload(sys) sys.[color=var(--color-prettylights-syntax-entity)]setdefaultencoding([color=var(--color-prettylights-syntax-string)]'utf-8')[color=var(--color-prettylights-syntax-keyword)]except: [color=var(--color-prettylights-syntax-keyword)]passtext [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-string)]"这间酒店位于北京东三环,里面摆放很多雕塑,文艺气息十足。答谢宴于晚上8点开始。"tr4w [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-variable)]TextRank4Keyword()tr4w.[color=var(--color-prettylights-syntax-entity)]analyze(text[color=var(--color-prettylights-syntax-constant)]=text, lower[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]True, window[color=var(--color-prettylights-syntax-constant)]=[color=var(--color-prettylights-syntax-constant)]2)[color=var(--color-prettylights-syntax-entity)]print()[color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'sentences:')[color=var(--color-prettylights-syntax-keyword)]for s [color=var(--color-prettylights-syntax-constant)]in tr4w.sentences: [color=var(--color-prettylights-syntax-entity)]print(s) [color=var(--color-prettylights-syntax-comment)]# py2中是unicode类型。py3中是str类型。[color=var(--color-prettylights-syntax-entity)]print()[color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'words_no_filter')[color=var(--color-prettylights-syntax-keyword)]for words [color=var(--color-prettylights-syntax-constant)]in tr4w.words_no_filter: [color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'/'.[color=var(--color-prettylights-syntax-entity)]join(words)) [color=var(--color-prettylights-syntax-comment)]# py2中是unicode类型。py3中是str类型。[color=var(--color-prettylights-syntax-entity)]print()[color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'words_no_stop_words')[color=var(--color-prettylights-syntax-keyword)]for words [color=var(--color-prettylights-syntax-constant)]in tr4w.words_no_stop_words: [color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'/'.[color=var(--color-prettylights-syntax-entity)]join(words)) [color=var(--color-prettylights-syntax-comment)]# py2中是unicode类型。py3中是str类型。[color=var(--color-prettylights-syntax-entity)]print()[color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'words_all_filters')[color=var(--color-prettylights-syntax-keyword)]for words [color=var(--color-prettylights-syntax-constant)]in tr4w.words_all_filters: [color=var(--color-prettylights-syntax-entity)]print([color=var(--color-prettylights-syntax-string)]'/'.[color=var(--color-prettylights-syntax-entity)]join(words)) [color=var(--color-prettylights-syntax-comment)]# py2中是unicode类型。py3中是str类型。
运行结果如下: sentences:这间酒店位于北京东三环,里面摆放很多雕塑,文艺气息十足答谢宴于晚上8点开始words_no_filter这/间/酒店/位于/北京/东三环/里面/摆放/很多/雕塑/文艺/气息/十足答谢/宴于/晚上/8/点/开始words_no_stop_words间/酒店/位于/北京/东三环/里面/摆放/很多/雕塑/文艺/气息/十足答谢/宴于/晚上/8/点words_all_filters酒店/位于/北京/东三环/摆放/雕塑/文艺/气息答谢/宴于/晚上
[color=var(--color-accent-fg)]APITODO. 类的实现、函数的参数请参考源码注释。 [color=var(--color-accent-fg)]License[color=var(--color-accent-fg)]MIT
|