Я могу искать по дереву и получать кратчайший путь между узлами, используя просто:
nx.shortest_path(G, source=, target=)
Но как мне выбрать путь, проходящий через узел со значением определенного атрибута?
У меня есть простой граф с узлами
G = nx.Graph()
for token in document:
G.add_node(token.orth_, item = token.i, tag = token.tag_, dep = token.dep_)
и ребрами:
for token in document:
for child in token.children:
G.add_edge(token.orth_, child.orth_, pitem = token.i, citem = child.i,
ptag = token.tag_, pdep = token.dep_, ctag = child.tag_, cdep = child.dep_)
Могу ли я найти простое решение, потому что сейчас я пытаюсь построить сложную функцию.
РЕДАКТИРОВАТЬ
Идея состоит в том, чтобы иметь такую функцию: (схематично)
def getPathByNode(betw_word, betw_attr, src_word, src_attr, trg_word, trg_attr):
nx.shortest_path(G, source=src, source_attr=src_attr, target=trg, target_attr=trg_attr, through=betw_word, through_attr=betw_attr)
....
Но, конечно, не все параметры должны быть переданы.В качестве входных данных я бы взял, например:
source_attr = {'dep_': 'ROOT'}
target_attr = {'tag_': 'NN'}
through = "of"
или through = "from"
или through_attr = {'tag_': 'IN'}
и так далее.В настоящее время я пытаюсь построить рекурсию, начиная с середины (through='from'
) и ища соседей, но в той же ситуации - отсутствующие атрибуты.
for i in G.neighbors("from"):
print(i)
я просто строка.