Árvore constituinte em Python (NLTK)

Sep 27 2020

Encontrei este código aqui :

# 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) 

Pelo que entendi, esse código define PP, NP e VP ... Minha dúvida é que as tags sintáticas já estão definidas aqui . Essas tags compostas não são definidas em NLTK? É esse o ponto? Além disso, na última linha do chunker {<V> <NP|PP>*}, ele está usando o NP: {<DT>?<JJ>*<NN>}e PP: {<P> <NP>}?

Respostas

1 sophros Sep 28 2020 at 14:28

No exemplo que você encontrou, a ideia é usar os nomes convencionais para elementos sintáticos constituintes de sentenças para criar um chunker - um analisador que divide as sentenças em um nível desejado de partes bastante granuladas. Esta abordagem simples (istica?) É usada em favor de uma análise sintática completa - que exigiria quebrar as expressões até o nível da palavra e rotular cada palavra com a função apropriada na frase.

A gramática definida no parâmetro de RegexParserdeve ser escolhida arbitrariamente dependendo da necessidade (e da estrutura dos enunciados aos quais se aplica). Essas regras podem ser recorrentes - elas correspondem às da gramática formal BNF . A sua observação é então válida - a última regra para VPrefere-se às regras previamente definidas.