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 및 VP를 정의합니다 ... 내 의심은 구문 태그가 이미 여기에 정의되어 있다는 것 입니다. 이러한 구성 태그가 NLTK에 정의되어 있지 않습니까? 그게 요점인가요? 또한 chunker의 마지막 행 {<V> <NP|PP>*}에서 위에 정의 된 NP: {<DT>?<JJ>*<NN>}및 PP: {<P> <NP>}?

답변

1 sophros Sep 28 2020 at 14:28

예제에서 아이디어는 문장의 구문 구성 요소에 대한 일반적인 이름을 사용하여 청커 ( 문장을 원하는 수준의 거친 조각으로 나누는 파서) 를 만드는 것입니다. 이 단순한 (istic?) 접근 방식은 완전한 구문 구문 분석을 위해 사용됩니다. 이는 발화를 단어 수준으로 나누고 문장에서 적절한 기능으로 각 단어에 레이블을 지정해야합니다.

의 매개 변수에 정의 된 문법 RegexParser은 필요 (및 적용 할 발화의 구조)에 따라 임의로 선택됩니다. 이러한 규칙은 반복적 일 수 있습니다 . BNF 형식 문법 의 규칙에 해당합니다 . 그러면 관찰이 유효합니다. 마지막 규칙 VP은 이전에 정의 된 규칙 을 참조합니다.