2012-02-12 11 views
5

Próbuję zaimplementować algorytm tekstranu do ekstrakcji zdań zgodnie z opisem here. Do tego potrzebujemy dopełnienia algorytmu PageRank z ważonymi krawędziami i uruchamiamy je na nieukierunkowanych wykresach. Implementacja algorytmu sieciowego pagerank pozwala mi na łatwą integrację ważonych krawędzi i mówi się, że konwertuje ukierunkowane wykresy na nieokierunkowane: patrz here. Jednak, kiedy testowałem, nadal wydaje się używać ukierunkowanego wykresu. Czego tu mi brakuje? Bardzo pomocna pomoc.Tekst: uzupełnianie PageRank dla wyodrębniania zdań przy użyciu networkx

Przykład:

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': ,25974025929223499, 'C' +0,40692640737443164, 'B': ,33333333333333331}

Odpowiedz

9

Chyba błędnie interpretowane notatkę na NetworkX dokumentacja. Chociaż, muszę przyznać, że może być lepiej napisany.

Algorytm PageRank zostało zaprojektowane dla wykresów ale algorytm nie sprawdza czy wykres wejściowego jest skierowany i wykonania na nieukierunkowane wykresów konwersję wszystkich krawędzi zorientowanej w skierowanej wykres dwóch krawędziach.

Co to oznacza, że ​​algorytm PageRank jest przeznaczony do grafów skierowanych, ale może być użyty do grafów niekierowanych. Aby to zrobić, przekształca sieć niedoorientowaną w kierowaną sieć, zastępując każdą krawędź dwoma skierowanymi krawędziami (do i z zewnątrz).

Dlatego, jeśli dasz mu skierowaną sieć, obliczy ona ranking PageRank zgodnie z kierunkową strukturą. Więc albo zacząć undirected sieci:

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} 

lub jeśli masz już skierowany sieci, konwertować je do undirected jeden:

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

Mój błąd. Dziękuję za rozwiązanie. – root

0

Miła implementacja algorytmu TextRank w Pythonie można znaleźć here. Jeśli chcesz użyć tego skryptu, musisz wcześniej uruchomić nltk.download(), aby zainstalować niezbędne pliki danych zgodnie z opisem here.

+0

Ta implementacja nie służy do ekstrakcji zdań, ale raczej do ekstrakcji słów kluczowych. Widać to z komentarzy poniżej kodu. – UberAlex

Powiązane problemy