Наименьший общий предок при разборе дерева зависимостей - PullRequest
0 голосов
/ 20 сентября 2018

Я вижу этот похожий пост: Как сделать дерево из вывода анализатора зависимостей? , где люди помогли мне получить путь от корня к листу.Я хотел найти наименьшего общего предка двух слов, так как я хочу найти путь между двумя узлами.

До сих пор у меня есть:

def lowestcommonancestor(categories,p,q):
    for category in categories:
        if category['Name']==p or category['Name']==q or category['Name']==None:
            return category
        if 'children' in category:
            node1=lowestcommonancestor(category['children'],p,q)
            if node1 is not None: #to see if the other word is present as a child
                if 'children' in node1:
                    node2=lowestcommonancestor(node1['children'],p,q)
                    if node2 is not None:
                        return node1
                else:# if not then we need to return the root
                    return category
    return None

категории:

[{'Name': 'arrested', 'Relationship': 'ROOT', 'children': [{'Name': 'week', 'Relationship': 'nmod:tmod', 'children': [{'Name': 'U', 'Relationship': 'compound'}, {'Name': 'smoke', 'Relationship': 'compound'}]}, {'Name': 'you', 'Relationship': 'nsubjpass'}, {'Name': 'could', 'Relationship': 'aux'}, {'Name': 'be', 'Relationship': 'auxpass'}, {'Name': 'fuck', 'Relationship': 'dobj', 'children': [{'Name': 'U', 'Relationship': 'compound'}, {'Name': 'dumb', 'Relationship': 'amod'}]}]}]

Когда я звоню lowestcommonancestor(categories,'fuck','U'), я получаю week, который является родителемU но не fuck.Следовательно, я должен получить arrested в качестве узла.

Я не могу завершить функцию и думаю, что не возвращаю правильный узел.Пожалуйста, помогите.

...