【问题标题】:Networkx: how to add edges to graph using node attributesNetworkx:如何使用节点属性向图形添加边
【发布时间】:2017-10-29 01:32:32
【问题描述】:

我在 csv 文件中有一个单词的 pos-tag 列表,例如每个单词都有他的 pos 标签:

[(什么,WP) (制作,VBZ) (他们,PRP) (做,VB) (它,PRP)] 等等……

我希望节点是 TAG(WP、VBZ、PRP..),并且边缘的属性是连续形式的,例如边缘列表将是:

[(什么,做什么) (使,他们) (他们,做) (做,它)] 它... 所以我可以删除重复的节点,但仍然有所有属性从节点出去并进入.. 到目前为止我有这个

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)

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    使用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')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多