Python'da kurucu ağaç (NLTK)

Sep 27 2020

Bu kodu burada buldum :

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

Anladığım kadarıyla, bu kod PP, NP ve VP'yi tanımlar ... Şüphem, sözdizimsel etiketlerin burada zaten tanımlanmış olmasıdır . Bu oluşturulmuş etiketler NLTK'da tanımlanmıyor mu? Konu bu mu? Ayrıca, chunker'ın son satırında {<V> <NP|PP>*}, yukarıda tanımlanan NP: {<DT>?<JJ>*<NN>}ve PP: {<P> <NP>}?

Yanıtlar

1 sophros Sep 28 2020 at 14:28

Örnekte bulduğunuz fikir, cümlelerin sözdizimsel kurucu unsurları için geleneksel isimleri kullanarak bir parçacı - cümleleri istenen düzeyde oldukça kaba parçalara ayıran bir ayrıştırıcı. Bu basit (istic?) Yaklaşım, tam bir sözdizimsel ayrıştırma lehine kullanılır - bu, ifadelerin kelime düzeyine indirgenmesini ve her bir kelimenin cümle içindeki uygun işlevle etiketlenmesini gerektirir.

Parametresinde tanımlanan dilbilgisi RegexParser, ihtiyaca (ve uygulanacağı ifadelerin yapısına) bağlı olarak keyfi olarak seçilecektir. Bu kurallar tekrarlanabilir - BNF resmi gramer kurallarına karşılık gelirler . Gözleminiz daha sonra geçerlidir - için son kural VPönceden tanımlanmış kurallara atıfta bulunur.