Как вывести только строковый результат чанкинга с помощью NLTK? - PullRequest
0 голосов
/ 30 октября 2019

Я использую NLTK и RegEx для анализа моего текста. Модель правильно идентифицирует блок, который я определил, но в конце все слова с тегами и «My_Chunk» отображаются в результатах печати. Вопрос в том, как я могу напечатать только фрагментированную часть текста («My_Chunk»)?

Вот мой пример кода:

import re
import nltk

text = ['The absolutely kind professor asked students out whom he met in class']

for item in text:
    tokenized = nltk.word_tokenize(item)
    tagged = nltk.pos_tag(tokenized)

    chunk = r"""My_Chunk: {<RB.?>*<NN.?>*<VBD.?>}"""
    chunkParser = nltk.RegexpParser(chunk)

    chunked = chunkParser.parse(tagged)
    print(chunked)
    chunked.draw()

И результат печати:

(S
  The/DT
  (My_Chunk absolutely/RB kind/NN professor/NN asked/VBD)
  students/NNS
  out/RP
  whom/WP
  he/PRP
  (Chunk met/VBD)
  in/IN
  class/NN)

1 Ответ

1 голос
/ 30 октября 2019

Это должно сделать это:

for a in chunked:
    if isinstance(a, nltk.tree.Tree):
        if a.label() == "My_Chunk":
            print(a)
            print(" ".join([lf[0] for lf in a.leaves()]))
            print()

#(My_Chunk absolutely/RB kind/NN professor/NN asked/VBD)
#absolutely kind professor asked

#(My_Chunk met/VBD)
#met


...