Это наблюдение на вопрос (Link)Последующие действия по итерация графа с использованием XML minidom
То, что я намерен делать это с помощью XML для создания графика, используя NetworkX. Если посмотреть на структуру DOM ниже, все узлы в одном узле должны иметь границу между ними, и все узлы, которые посетили ту же конференцию, должны иметь узел для этой конференции. Подводя итог, все авторы, которые работали вместе над документом, должны быть связаны друг с другом, и все авторы, которые посетили конкретную конференцию, должны быть связаны с этой конференцией.
<conference name="CONF 2009">
<paper>
<author>Yih-Chun Hu(UIUC)</author>
<author>David McGrew(Cisco Systems)</author>
<author>Adrian Perrig(CMU)</author>
<author>Brian Weis(Cisco Systems)</author>
<author>Dan Wendlandt(CMU)</author>
</paper>
<paper>
<author>Dan Wendlandt(CMU)</author>
<author>Ioannis Avramopoulos(Princeton)</author>
<author>David G. Andersen(CMU)</author>
<author>Jennifer Rexford(Princeton)</author>
</paper>
</conference>
Я понял, как подключить автор к конференции, но я не уверен о том, как подключить автор друг к другу. Я испытываю трудности с тем, как перебирать авторов, которые работали над одной и той же бумагой, и связывать их вместе.
dom = parse(filepath)
conference=dom.getElementsByTagName('conference')
for node in conference:
conf_name=node.getAttribute('name')
print conf_name
G.add_node(conf_name)
#The nodeValue is split in order to get the name of the author
#and to exclude the university they are part of
plist=node.getElementsByTagName('paper')
for p in plist:
author=str(p.childNodes[0].nodeValue)
author= author.split("(")
#Figure out a way to create edges between authors in the same <paper> </paper>
alist=node.getElementsByTagName('author')
for a in alist:
authortext= str(a.childNodes[0].nodeValue).split("(")
if authortext[0] in dict:
edgeQuantity=dict[authortext[0]]
edgeQuantity+=1
dict[authortext[0]]=edgeQuantity
G.add_edge(authortext[0],conf_name)
#Otherwise, add it to the dictionary and create an edge to the conference.
else:
dict[authortext[0]]= 1
G.add_node(authortext[0])
G.add_edge(authortext[0],conf_name)
i+=1
Есть много разных способов сделать большую часть того, что вы описываете, однако я думаю, вам нужно указать вашу цель немного более явно. почему граф? как вы планируете пересекать график? в контексте вашей проблемы, что означает «связанный»? например в зависимости от того, как вы построите график, подключение участников к конференции будет связывать их друг с другом по умолчанию, не предоставляя разрешение на уровне бумаги. – si28719e