【问题标题】:Allowing Duplicate Nodes in Networkx / Preventing a node from having two Parents in a Tree graph允许 Networkx 中的重复节点/防止节点在树图中有两个父节点
【发布时间】:2019-01-02 18:25:15
【问题描述】:

我试图将选区解析树表示为 networkx DiGraph。我有一个显示节点之间边缘的二进制元组列表:

[('S', 'NP'), ('S', 'VP'), ('NP', "'I'"), ('VP', 'V'), ('VP', 'NP'), ('V', "'saw'"), ('NP', "'him'")]

到目前为止,我已经设法将其表示为:Here's what I have

使用以下命令:

tree2graph = nx.DiGraph()
tree2graph.add_edges_from(parsed_tree)
p= nx.drawing.nx_pydot.to_pydot(tree2graph)

但是,networkx 删除了重复的节点,这产生了不良影响。 我想成为: This

即如何通过允许两个副本来防止节点 NP 有两个父节点?

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    图表中的节点标识符是字符串(例如,“NP”)。由于您不能有两个具有相同标识符的不同节点,因此同一字符串的不同实例会发生冲突。您可以通过分隔节点的标识符和节点的字符串来解决它。保留一个唯一的整数来标识每个节点,并将其映射到适当的字符串。例如:

    import networkx as nx
    import matplotlib.pyplot as plt
    
    parsed_tree = [(0,1), (0,2), (1,3), (2,4), (2,5), (4,6), (5,7)]
    id_to_str = {0: 'S', 1: 'NP', 2: 'VP', 3: 'I', 4: 'V', 5: 'NP', 6: "'saw'", 7: "'him'"}
    
    tree2graph = nx.DiGraph()
    tree2graph.add_edges_from(parsed_tree)
    for node in tree2graph.nodes():
        tree2graph.nodes[node]['label'] = id_to_str[node]
    pos = nx.nx_pydot.pydot_layout(tree2graph, prog='dot')
    nx.draw_networkx(tree2graph, pos=pos, arrows= True, with_labels=True, labels=id_to_str)
    plt.show()
    

    结果如下:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多