Pohon konstituen dengan Python (NLTK)
Saya menemukan kode ini di sini :
# 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)
Seperti yang saya pahami, kode ini mendefinisikan PP, NP dan VP ... Keraguan saya adalah bahwa tag sintaksis sudah ditentukan di sini . Bukankah tag yang dibuat ini ditentukan dalam NLTK? Apakah itu intinya? Selanjutnya, pada baris terakhir dari chunker {<V> <NP|PP>*}, apakah menggunakan definisi di atas NP: {<DT>?<JJ>*<NN>}dan PP: {<P> <NP>}?
Jawaban
Dalam contoh yang Anda temukan, idenya adalah menggunakan nama konvensional untuk elemen konstituen sintaksis kalimat untuk membuat chunker - parser yang memecah kalimat ke tingkat yang diinginkan dari potongan berbutir kasar. Pendekatan sederhana (istic?) Ini digunakan untuk mendukung penguraian sintaksis penuh - yang akan memerlukan pemecahan ucapan ke tingkat kata dan memberi label pada setiap kata dengan fungsi yang sesuai dalam kalimat.
Tata bahasa yang ditentukan dalam parameter dari RegexParserharus dipilih secara sewenang-wenang tergantung pada kebutuhan (dan struktur ucapan yang akan diterapkan). Aturan ini dapat berulang - sesuai dengan tata bahasa formal BNF . Pengamatan Anda kemudian valid - aturan terakhir untuk VPmengacu pada aturan yang ditentukan sebelumnya.