1

我在这里找到了这段代码:

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

4

1 回答 1

1

在示例中,您发现的想法是使用句子的句法组成元素的常规名称来创建分块器- 一种将句子分解为所需级别的相当粗粒度的片段的解析器。这种简单的(istic?)方法用于支持完整的句法分析——这需要将话语分解到单词级别,并在句子中用适当的功能标记每个单词。

参数中定义的语法将RegexParser根据需要(以及要应用的话语结构)任意选择。这些规则可以重复出现——它们对应于BNF形式语法的规则。然后您的观察是有效的 - 最后一个规则是VP指先前定义的规则。

于 2020-09-28T07:28:39.537 回答