Учитывая предложение, я хотел бы начать с его 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 слов вместе, поэтому я не могу получить (например, сливки, больше, чем, печенье,).
Как я могу получить вывод, как в примере?