Обход предложения в Spacy - PullRequest
       38

Обход предложения в Spacy

0 голосов
/ 05 апреля 2020

Учитывая предложение, я хотел бы начать с его root и пройти через его детей, а затем детей, пока не останется детей.

Пример

Итак, для предложения "Я люблю шоколадное мороженое больше, чем печенье", я хотел бы получить следующий вывод:

( как, я), (как, крем, шоколад), (как, крем, лед), (как, крем, больше, чем, печенье,), (как,.)

doc = nlp('I like chocolate ice creams more than the cookies')

def getLastChildren(token):
childrenList = []
grandChildren = []
out = []

for child in token.children:
    childrenList.append(child)

for item in childrenList:    
    out.append((token,item))
    for child in item.children:
        if (child is not None):
            out.append((token,item,child))
return out

def parseWholeDoc(doc):
Children = []
for token in doc:
    if token.dep_ == "ROOT":
        if(Children is not None):
            Children.extend(getLastChildren(token))
return Children

allPairList = parseWholeDoc(doc)
print(allPairList)

вывод, который я получаю сейчас (например, я), (например, кремы), (например, кремы, шоколад), (например, кремы, лед), (например, кремы, больше), (например,.)

Мой метод имеет два недостатка: 1. он имеет повторы, так как он хранит (и возвращает) как два элемента (например, I), так и три элемента (например, кремы, шоколад). 2. Он хранит только до 3 слов вместе, поэтому я не могу получить (например, сливки, больше, чем, печенье,).

Как я могу получить вывод, как в примере?

...