繁体   English   中英

Networkx:如何使用节点属性向图形添加边

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM