2 votes

Networkx : comment ajouter des arêtes à un graphique en utilisant les attributs des nœuds

J'ai une liste de mots avec des balises pos dans un fichier csv, chaque mot avec sa balise pos par exemple :

[(quoi,WP) (fait,VBZ) (ils,PRP) (font,VB) (il,PRP)] etc...

Je veux que les noeuds soient les TAG (WP,VBZ,PRP..) et les attributs les arêtes sous une forme consécutive ; par exemple la liste des arêtes sera :

[(quoi,fait) (fait, eux) (ils, font) (font, il)] il... Ainsi, je pourrais supprimer les noeuds dupliqués mais avoir encore tous les attributs sortant du noeud et entrant... J'ai ceci jusqu'à présent

G=nx.MultiGraph()
files = glob.glob('C:/Users/Sebastian/Desktop/prueba3/*.csv')
for path in files:
dirname, filename = os.path.split(path)
with open ('C:/Users/Sebastian/Desktop/prueba3/%s' %filename) as csvfile:
        csv_reader = csv.reader(csvfile, delimiter=',')
        for row in csv_reader:
            new_node = row[1]               
            new_attributes = row[:1]
            G.add_node(new_node, my_attributes=new_attributes)

0voto

CodeSurgeon Points 1488

Utilisation de zip pour créer les paires appropriées entre les mots consécutifs de la phrase rend cela simple. J'utilise également add_edge à la place, car cela ajoute automatiquement les nœuds. Notez le troisième paramètre de add_edge vous permet de profiter d'un key qui peut être utilisé pour identifier cette arête unique dans une nx.MultiGraph objet. Je ne suis pas sûr de savoir quel est le format exact de votre .csv donc je passe juste une phrase comme une liste contenant des tuples de (word, POS) pour l'exemple suivant. J'espère que cela vous aidera !

from collections import defaultdict
import networkx as nx

G = nx.MultiGraph()

sentence = [
    ("what", "WP"), 
    ("makes", "VBZ"),
    ("them", "PRP"), 
    ("do", "VB"),
    ("it", "PRP"),
]

for pair0, pair1 in zip(sentence[:-1], sentence[1:]):
    w0, t0 = pair0
    w1, t1 = pair1
    edge_key = "{0} {1}".format(w0, w1)
    G.add_edge(t0, t1, edge_key)

print(G.nodes)#['WP', 'VBZ', 'PRP', 'VB']
print(G.edges)#[('WP', 'VBZ', 'what makes'), ('VBZ', 'PRP', 'makes them'), ('PRP', 'VB', 'them do'), ('PRP', 'VB', 'do it')]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X