Составляющее дерево в Python (NLTK)

Sep 27 2020

Я нашел здесь этот код :

# Import required libraries 
import nltk 
nltk.download('punkt') 
nltk.download('averaged_perceptron_tagger') 
from nltk import pos_tag, word_tokenize, RegexpParser 
   
# Example text 
sample_text = "The quick brown fox jumps over the lazy dog"
   
# Find all parts of speech in above sentence 
tagged = pos_tag(word_tokenize(sample_text)) 
   
#Extract all parts of speech from any text 
chunker = RegexpParser(""" 
                       NP: {<DT>?<JJ>*<NN>}    #To extract Noun Phrases 
                       P: {<IN>}               #To extract Prepositions 
                       V: {<V.*>}              #To extract Verbs 
                       PP: {<P> <NP>}          #To extract Prepostional Phrases 
                       VP: {<V> <NP|PP>*}      #To extarct Verb Phrases 
                       """) 
  
# Print all parts of speech in above sentence 
output = chunker.parse(tagged) 
print("After Extracting\n", output) 

Как я понимаю, этот код определяет PP, NP и VP ... Мои сомнения в том , что синтаксические теги уже определены здесь . Разве эти составные теги не определены в NLTK? В том-то и дело? Кроме того, в последней строке чанкера {<V> <NP|PP>*}используются определенные выше NP: {<DT>?<JJ>*<NN>}и PP: {<P> <NP>}?

Ответы

1 sophros Sep 28 2020 at 14:28

В примере, который вы обнаружили, идея состоит в том, чтобы использовать обычные имена для синтаксических составляющих элементов предложений для создания чанкера - парсера, который разбивает предложения до желаемого уровня на довольно грубые части. Этот простой (истичный?) Подход используется в пользу полного синтаксического анализа, который потребует разбиения высказываний до уровня слова и присвоения каждому слову соответствующей функции в предложении.

Грамматика, определенная в параметре, RegexParserдолжна быть выбрана произвольно в зависимости от потребности (и структуры высказываний, к которым она должна применяться). Эти правила могут быть повторяющимися - они соответствуют правилам формальной грамматики BNF . Тогда ваше наблюдение действительно - последнее правило VPотносится к ранее определенным правилам.