2017-10-29 252 views
2

我有一個CSV文件中單詞的POS標籤列表,每個字與他的POS標籤,例如:Networkx:如何添加邊緣使用節點圖的屬性

[(什麼,WP) (品牌,VBZ) (其中,PRP) (做,VB) (它,PRP)] 等等

我想要的節點是TAG(WP,VBZ,PRP ..)和例如,邊緣列表將屬於:

[(what,make) (make s,他們) (他們,做) (do,it)] 它... 所以我可以刪除重複的節點,但仍然有所有的屬性走出節點和.. 我有這個遠

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) 

回答

0

使用zip在句子中創造連續字之間的適當配對,使這個簡單的。我也使用add_edge,因爲它也會自動添加節點。請注意,add_edge的第三個參數允許您輸入key參數,該參數可用於識別nx.MultiGraph對象中的唯一邊沿。我不確定.csv文件的格式是什麼,所以我只是將一個句子作爲包含(word, POS)的元組的列表傳遞給以下示例。希望這可以幫助!

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')] 
+0

感謝您的回答!我會嘗試這種方法 –

相關問題