2012-02-12 37 views
5

hereと記述されている文章抽出のためのtextrankアルゴリズムを実装しようとしています。加重エッジを持つページランクアルゴリズムを補完し、それが無向グラフ上で動くようにする必要がある場合。 Networkxのpagerankアルゴリズムの実装により、加重されたエッジをeasely積分することができ、有向グラフを無向に変換すると言われています。hereを参照してください。 しかし、テストしたところでは、まだ有向グラフを使用しているようです。私はここで何が欠けていますか?ヘルプは非常にappriciated。Textrank:networkxを使用した文抽出のためのページランク補完

例:

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}

答えて

9

私はあなたがnetworkx上の注意を誤解だと思いますドキュメンテーション。しかし、私はそれが良いと言われるかもしれないと認めなければなりません。

のPageRankアルゴリズムは、有向グラフのために設計されたが、この アルゴリズムは、入力されたグラフが向けられているかどうかを確認しないと 二辺に 有向グラフにおいて、各配向エッジを変換することにより、無向グラフに実行されます。

PageRankアルゴリズムは、有向グラフ用に設計されていますが、無向グラフ用に使用することができます。そうするために、各エッジを2つの有向エッジ(イン/アウト)で置き換えることによって、無向ネットワークを有向ネットワークに変換します。

したがって、有向グラフを指定すると、有向グラフに従って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} 

をしたり、すでに有向ネットワークを持っている場合は、無向1に変換します:だからどちらか無向ネットワークで始まる

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} 
+0

私の間違い。解決していただきありがとうございます。 – root

0

PythonでTextRankアルゴリズムの素敵な実施を求めることができますhere。 このスクリプトを使用する場合は、事前にnltk.download()を実行して、hereのように必要なデータファイルをインストールする必要があります。

+0

その実装は文抽出のためではなく、キーワード抽出のためのものです。それはコードの下のコメントから見ることができます。 – UberAlex

関連する問題