roo*_*oot 5 python pagerank summarization networkx
我试图描述实行textrank算法句子抽取这里.对于需要补充带有加权边的pagerank算法并使其在无向图上运行的需要.Networkx pagerank算法实现允许我轻松地集成加权边缘,据说将有向图转换为无向图:请参见此处.但是,当我测试它时似乎仍然使用有向图.我在这里错过了什么?帮助大大减少.
例:
import networkx as nx
D=nx.DiGraph()
D.add_weighted_edges_from([('A','B',0.5),('A','C',1)])
print nx.pagerank(D)
Run Code Online (Sandbox Code Playgroud)
Outpunt:{'A':0.25974025929223499,'C':0.40692640737443164,'B':0.33333333333333331}
我认为你误解了关于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}
Run Code Online (Sandbox Code Playgroud)
或者如果您已经有定向网络,请将其转换为无向网络:
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}
Run Code Online (Sandbox Code Playgroud)