2012-02-12 8 views
5

here과 같이 문장 추출을위한 textrank 알고리즘을 구현하려고합니다. 가중 에지를 가진 페이지 랭크 알고리즘을 보완하고 그것을 무향 그래프에서 실행해야하는 경우. Networkx PageRank 알고리즘 구현을 통해 웨이팅 된 에지를 easely 통합 할 수 있으며 방향성 그래프를 무향으로 변환한다고합니다 : here을 참조하십시오. 그러나 내가 테스트했을 때 여전히 유향 그래프를 사용하는 것 같습니다. 내가 여기서 무엇을 놓치고 있니? 도움이 크게 appriciated.Textrank : 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) 

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

답변

9

나는 당신이 networkx에 메모를 잘못 해석 생각 선적 서류 비치. 나는 그것이 더 잘 표현 될 수 있음을 인정해야한다.

랭크 알고리즘 유향 그래프를 위해 설계되었지만, 본 알고리즘은 입력 그래프 지시 여부를 확인하지 않고 두 가장자리에 방향 그래프에서 각각의 배향 경계를 변환하여 무향 그래프에 실행된다.

이것이 말하는 것은 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} 
+0

내 실수. 해결책을 가져 주셔서 감사합니다. – root

0

파이썬에서 TextRank 알고리즘의 좋은 구현을 찾을 수 있습니다 here. 이 스크립트를 사용하려면 먼저 here과 같이 필요한 데이터 파일을 설치하려면 nltk.download()를 실행해야합니다.

+0

그 구현은 문장 추출을위한 것이 아니라 키워드 추출입니다. 코드의 주석 아래에서 확인할 수 있습니다. – UberAlex