5

here で説明されているように、文抽出用の 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)

出力: {'A': 0.25974025929223499、'C': 0.40692640737443164、'B': 0.3333333333333331}

4

2 に答える 2

9

networkx ドキュメントの注記を誤解していると思います。しかし、私はそれがより良い言葉遣いかもしれないことを認めなければなりません.

PageRank アルゴリズムは有向グラフ用に設計されていますが、このアルゴリズムは入力グラフが有向かどうかをチェックせず、有向グラフの各有向エッジを 2 つのエッジに変換することによって無向グラフで実行します。

これが示すことは、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}

または、すでに有向ネットワークがある場合は、無向ネットワークに変換します。

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}
于 2012-02-12T09:35:13.487 に答える
0

Python での TextRank アルゴリズムの優れた実装は、ここにあります。このスクリプトを使用する場合は、事前に nltk.download() を実行して、必要なデータ ファイルをインストールする必要があります。ここで説明します。

于 2012-10-02T10:18:58.170 に答える