Python'da kurucu ağaç (NLTK)
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
Ö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.