Textrank:使用networkx补充pagerank以进行句子提取

Posted

技术标签:

【中文标题】Textrank:使用networkx补充pagerank以进行句子提取【英文标题】:Textrank: complementing pagerank for sentence extraction using networkx 【发布时间】:2012-03-04 02:07:32 【问题描述】:

我正在尝试按照here 的描述实现用于句子提取的 textrank 算法。为此,需要用加权边来补充 pagerank 算法并让它在无向图上运行。 Networkx pagerank 算法实现允许我轻松集成加权边,据说可以将有向图转换为无向图:参见here。 但是,当我测试时,它似乎仍然使用有向图。我在这里想念什么?非常感谢。

例子:

import networkx as nx
D=nx.DiGraph()
D.add_weighted_edges_from([('A','B',0.5),('A','C',1)])
print nx.pagerank(D)

输出:'A':0.25974025929223499,'C':0.40692640737443164,'B':0.33333333333333331

【问题讨论】:

【参考方案1】:

可以在here 中找到 Python 中 TextRank 算法的一个很好的实现。 如果你想使用这个脚本,你必须事先运行 nltk.download() 来安装必要的数据文件,如here所述。

【讨论】:

该实现不是针对句子提取,而是针对关键字提取。您可以从代码下方的 cmets 中看到。【参考方案2】:

我认为您误解了 networkx 文档中的注释。不过,我必须承认它的措辞可能更好。

PageRank 算法是为有向图设计的,但是这 算法不检查输入图是否有向并且将 通过转换每个有向边在无向图上执行 有向图到两条边。

这说明,PageRank 算法是为有向图设计的,但它也可以用于无向图。为此,它将无向网络转换为有向网络,方法是将每条边替换为两条有向边(输入和输出)。

因此,如果给它一个有向网络,它会根据有向结构计算PageRank。所以要么从无向网络开始:

import networkx as nx

# Undirected Network
D = nx.Graph()
D.add_weighted_edges_from([('A', 'B', 0.5),('A', 'C', 1)])

# Default max number of iterations failed to converge for me
print nx.pagerank(D, max_iter=200)

# Outputs:
'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982

或者如果您已经有一个有向网络,请将其转换为无向网络:

import networkx as nx

# Directed Network
D = nx.DiGraph()
D.add_weighted_edges_from([('A', 'B', 0.5), ('A', 'C', 1)])

# Convert to undirected
G = D.to_undirected()

# Default max number of iterations failed to converge for me
print nx.pagerank(G, max_iter=200)

# Outputs:
'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982

【讨论】:

我的错误。感谢您的解决方案。

以上是关于Textrank:使用networkx补充pagerank以进行句子提取的主要内容,如果未能解决你的问题,请参考以下文章

关键字提取算法TF-IDF和TextRank(python3)————实现TF-IDF并jieba中的TF-IDF对比,使用jieba中的实现TextRank

NLP之使用TextRank和TFIDF进行关键字自动提取

文本自动摘要:基于TextRank的中文新闻摘要

基于TextRank提取关键词关键短语摘要

NLP | TextRank文章摘要提取算法流程

学习TextRank算法