Цикл по дереву для создания dictionary_NLTK - PullRequest
1 голос
/ 24 марта 2020

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

{количество = 1, еда = пицца}, {количество = 1, еда = кола}, {количество = 2, еда = пиво}, {количество = 1, еда = бутерброд}

Вот мой код, любая помощь очень ценится!

'' '

import nltk as nltk
nltk.download()


grammar = r""" Food:{<DT>?<VRB>?<NN.*>+}
                      }<>+{ 
              Quantity: {<CD>|<JJ>|<DT>} 
            """
rp = nltk.RegexpParser(grammar)


def RegPar(menu):
    grammar = r"""Food:{<DT>?<VRB>?<NN.*>+}
                      }<>+{ 
                  Quantity: {<CD>|<JJ>|<DT>} 
            """
    rp = nltk.RegexpParser(grammar)
    output = rp.parse(menu)
    return(output)

Sentences = [ 'A pizza margherita', 'one coke y 2 beers', 'Sandwich']

tagged_array =[]
output_array =[]

for s in Sentences:
    tokens = nltk.word_tokenize(s)
    tags = nltk.pos_tag(tokens)
    tagged_array.append(tags)
    output = rp.parse(tags)
    output_array.append(output)
    print(output)

dat = []

tree = RegPar(output_array)


for subtree in tree.subtrees():
    if subtree.label() == 'Food' or subtree.label() =='Quantity':
         dat.append({(subtree.label(),subtree.leaves()[0][0])})        
print(dat)



##[{('Food', 'A')}, {('Quantity', 'one')}, {('Food', 'coke')}, {('Quantity', '2')}, {('Food', 'beers')}, {('Food', 'Sandwich')}]*

'' '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...