我是NLP的新手,目前正在尝试使用Python NLTK。关于NLTK的一个更令人困惑的事情是语法结构。 在NLTK书中提供的示例中,语法是专门为每个正在分析的句子编写的。
grammar1 = nltk.CFG.fromstring("""
S -> NP VP
VP -> V NP | V NP PP
PP -> P NP
V -> "saw" | "ate" | "walked"
NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
Det -> "a" | "an" | "the" | "my"
N -> "man" | "dog" | "cat" | "telescope" | "park"
P -> "in" | "on" | "by" | "with"
""")
sent = "Mary saw Bob".split()
rd_parser = nltk.RecursiveDescentParser(grammar1)
for tree in rd_parser.parse(sent):
print(tree)
(S (NP Mary) (VP (V saw) (NP Bob)))
我想分析大量的报纸文章,显然每句话都写一个专门的语法不是一个可行的任务。具体来说,我需要知道每个句子的条款数量。这样的任务是否已经存在语法,或者如果不是,那么如何去做一个?
我的所有句子都经过解析和POS标记 - 例如
[(u'Her', 'PRP$'),
(u'first', 'JJ'),
(u'term', 'NN'),
(u'followed', 'VBN'),
(u'a', 'DT'),
(u'string', 'NN'),
(u'of', 'IN'),
(u'high', 'JJ'),
(u'profile', 'NN'),
(u'police', 'NNS'),
(u'abuse', 'VBP'),
(u'cases', 'NNS'),
(u'including', 'VBG'),
(u'the', 'DT'),
(u'choking', 'NN'),
(u'death', 'NN'),
(u'of', 'IN'),
(u'a', 'DT'),
(u'Hispanic', 'NNP'),
(u'man', 'NN'),
(u'in', 'IN'),
(u'1994', 'CD'),
(u'the', 'DT'),
(u'Louima', 'NNP'),
(u'case', 'NN'),
(u'in', 'IN'),
(u'1997', 'CD'),
(u'and', 'CC'),
(u'the', 'DT'),
(u'shooting', 'NN'),
(u'deaths', 'NNS'),
(u'of', 'IN'),
(u'a', 'DT'),
(u'West', 'NNP'),
(u'African', 'NNP'),
(u'immigrant', 'NN'),
(u'in', 'IN'),
(u'1999', 'CD'),
(u'and', 'CC'),
(u'a', 'DT'),
(u'black', 'JJ'),
(u'security', 'NN'),
(u'guard', 'NN'),
(u'in', 'IN'),
(u'early', 'JJ'),
(u'2000', 'CD')]
答案 0 :(得分:2)
nltk.data
提供了一些可以使用的语法。
CFG语法示例:
>>> grammar = nltk.data.load('grammars/large_grammars/atis.cfg')
>>> grammar
<Grammar with 5517 productions>
请注意,nltk.parse
包还提供了Stanford Parser或BLLIP Parser等解析器的接口。
另外,也许在这里看看其他问题。所以喜欢: English grammar for parsing in NLTK 或Stanford Parser and NLTK