Пространство, как изменить syntacti c правила дерева - PullRequest
0 голосов
/ 18 апреля 2020

Я использую Spacy для разбора предложений.

С этим предложением на английском языке sh 'Аристотель - человек.' и с моделью en_core_web_sm

я получаю дерево

{
    {
        Aristote dep_ [nsubj] tag_ (NNP) pos_ (PROPN)
    }
    is dep_ [ROOT] tag_ (VBZ) pos_ (AUX)
    {
        {
            a dep_ [det] tag_ (DT) pos_ (DET)
        }
        man dep_ [attr] tag_ (NN) pos_ (NOUN)
    }
    {
        . dep_ [punct] tag_ (.) pos_ (PUNCT)
    }
}

узел root - это глагол 'is' Это то, что я хочу.

С то же самое предложение на французском «Aristote est un homme». и с моделью 'fr_core_news_sm' я получаю дерево

{
    {
        Aristote dep_ [nsubj] tag_ (NOUN__Gender=Masc|Number=Sing) pos_ (NOUN)
    }
    {
        est dep_ [cop] tag_ (AUX__Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin) pos_ (AUX)
    }
    {
        un dep_ [det] tag_ (DET__Definite=Ind|Gender=Masc|Number=Sing|PronType=Art) pos_ (DET)
    }
    homme dep_ [ROOT] tag_ (NOUN__Gender=Masc|Number=Sing) pos_ (NOUN)
    {
        . dep_ [punct] tag_ (PUNCT___) pos_ (PUNCT)
    }
}

Узлом root является имя 'homme'

Глагол 'est' считается вспомогательным и не root

Как настроить Spacy таким образом, чтобы «is» считался глаголом и чтобы это было root?

Дерево отображается со следующим кодом

def showTree(sent):
    def __showTree(token, level):
        tab = "\t" * level
        sys.stdout.write("\n%s{" % (tab))
        [__showTree(t, level+1) for t in token.lefts]
        sys.stdout.write("\n%s\t%s dep_ [%s] tag_ (%s) pos_ (%s)" % (tab, token, token.dep_, token.tag_, token.pos_))
        [__showTree(t, level+1) for t in token.rights]
        sys.stdout.write("\n%s}" % (tab))
    return __showTree(sent.root, 1)
...