Albero costituente in Python (NLTK)

Sep 27 2020

Ho trovato questo codice qui :

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

Da quanto ho capito, questo codice definisce PP, NP e VP ... Il mio dubbio è che i tag sintattici siano già definiti qui . Questi tag composti non sono definiti in NLTK? È questo il punto? Inoltre, nell'ultima riga del chunker {<V> <NP|PP>*}, sta usando il sopra definito NP: {<DT>?<JJ>*<NN>}e PP: {<P> <NP>}?

Risposte

1 sophros Sep 28 2020 at 14:28

Nell'esempio che hai trovato l'idea è quella di usare i nomi convenzionali per gli elementi sintattici costituenti delle frasi per creare un chunker , un parser che scompone le frasi a un livello desiderato di pezzi piuttosto grossolani. Questo semplice approccio (istico?) Viene utilizzato a favore di un'analisi sintattica completa, che richiederebbe la suddivisione delle espressioni a livello di parola e l'etichettatura di ciascuna parola con la funzione appropriata nella frase.

La grammatica definita nel parametro di RegexParserdeve essere scelta arbitrariamente a seconda delle necessità (e della struttura delle espressioni a cui deve applicarsi). Queste regole possono essere ricorrenti: corrispondono a quelle della grammatica formale BNF . La tua osservazione è quindi valida: l'ultima regola per si VPriferisce alle regole definite in precedenza.