Arbre des constituants en Python (NLTK)

Sep 27 2020

J'ai trouvé ce code ici :

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

Si je comprends bien, ce code définit PP, NP et VP ... Mon doute est que les balises syntaxiques sont déjà définies ici . Ces balises composées ne sont-elles pas définies dans NLTK? Est-ce là le point? De plus, dans la dernière ligne du bloc {<V> <NP|PP>*}, utilise-t-il le NP: {<DT>?<JJ>*<NN>}et défini ci-dessus PP: {<P> <NP>}?

Réponses

1 sophros Sep 28 2020 at 14:28

Dans l'exemple que vous avez trouvé, l'idée est d'utiliser les noms conventionnels des éléments constitutifs syntaxiques des phrases pour créer un bloc - un analyseur qui décompose les phrases à un niveau souhaité de morceaux plutôt grossiers. Cette approche simple (istic?) Est utilisée en faveur d'une analyse syntaxique complète - ce qui nécessiterait de décomposer les énoncés au niveau du mot et d'étiqueter chaque mot avec la fonction appropriée dans la phrase.

La grammaire définie dans le paramètre de RegexParserest à choisir arbitrairement en fonction du besoin (et de la structure des énoncés auxquels elle doit s'appliquer). Ces règles peuvent être récurrentes - elles correspondent à celles de la grammaire formelle BNF . Votre observation est alors valide - la dernière règle pour se VPréfère aux règles précédemment définies.