ต้นไม้องค์ประกอบใน Python (NLTK)

Sep 27 2020

ฉันพบรหัสนี้ที่นี่ :

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

ตามที่ผมเข้าใจรหัสนี้กำหนด PP, NP และรองประธานฝ่าย ... ข้อสงสัยของฉันอยู่ที่แท็กประโยคจะถูกกำหนดไว้แล้วที่นี่ แท็กที่ประกอบด้วยเหล่านี้ไม่ได้กำหนดไว้ใน NLTK ใช่หรือไม่ นั่นคือประเด็น? นอกจากนี้ในแถวสุดท้ายของ chunker {<V> <NP|PP>*}มันคือการใช้สูงกว่าที่กำหนดไว้NP: {<DT>?<JJ>*<NN>}และPP: {<P> <NP>}?

คำตอบ

1 sophros Sep 28 2020 at 14:28

ในตัวอย่างที่คุณพบความคิดที่จะใช้ชื่อธรรมดาสำหรับองค์ประกอบของประโยคประโยคเพื่อสร้างchunker - parser ที่แบ่งลงประโยคให้อยู่ในระดับที่ต้องการของชิ้นค่อนข้างเนื้อหยาบ วิธีง่ายๆ (istic?) นี้ใช้เพื่อสนับสนุนการแยกวิเคราะห์วากยสัมพันธ์แบบเต็มซึ่งจะต้องมีการทำลายคำพูดลงไปที่ระดับคำและติดป้ายกำกับแต่ละคำด้วยฟังก์ชันที่เหมาะสมในประโยค

ไวยากรณ์ที่กำหนดไว้ในพารามิเตอร์ของRegexParseris จะถูกเลือกโดยพลการขึ้นอยู่กับความต้องการ (และโครงสร้างของคำพูดที่จะนำไปใช้) กฎเหล่านี้สามารถเกิดซ้ำได้ซึ่งสอดคล้องกับกฎไวยากรณ์ทางการของBNF จากนั้นการสังเกตของคุณก็ถูกต้อง - กฎสุดท้ายสำหรับการVPอ้างถึงกฎที่กำหนดไว้ก่อนหน้านี้