Textrank:使用networkx补充用于句子提取的pagerank

时间:2012-02-12 08:48:09

标签: python pagerank networkx summarization

我正在尝试使用textrank算法进行句子提取,如here所述。对于需要补充带有加权边的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)

Outpunt:{'A':0.25974025929223499,'C':0.40692640737443164,'B':0.33333333333333331}

2 个答案:

答案 0 :(得分:9)

我认为你误解了关于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}

答案 1 :(得分:0)

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