[英]Networkx: how to add edges to graph using node attributes
我在 csv 文件中有一個單詞的 pos-tag 列表,每個單詞都帶有他的 pos 標簽,例如:
[(what,WP) (makes,VBZ) (them,PRP) (do,VB) (it,PRP)] 等等...
我希望節點是 TAG (WP,VBZ,PRP ..) 並且屬性是連續形式的邊,例如邊列表將是:
[(what,makes) (makes,them) (them,do) (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)
使用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')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.