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ます。最後のルールは、以前に定義されたルールを参照します。