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で定義されていませんか?それがポイントですか?さらに、チャンカの最後の行では{<V> <NP|PP>*}、それは上記定義を使用しているNP: {<DT>?<JJ>*<NN>}とPP: {<P> <NP>}?

回答

1 sophros Sep 28 2020 at 14:28

この例では、文の構文構成要素に従来の名前を使用してチャンカーを作成するというアイデアが見つかりました。これは、文を目的のレベルのかなり粗い部分に分解するパーサーです。この単純な(主義的な?)アプローチは、完全な構文解析を優先して使用されます。これには、発話を単語レベルに分解し、文内の適切な機能で各単語にラベルを付ける必要があります。

のパラメータで定義された文法RegexParserは、必要性(およびそれが適用される発話の構造)に応じて任意に選択されます。これらの規則は繰り返し発生する可能性があります。BNF形式文法の規則に対応しています。その後、観察が有効になりVPます。最後のルールは、以前に定義されたルールを参照します。