我的问题是:
我有很多文件的句子。对于每个句子,我必须使用nltk python编写CFG。
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"
""")
而不是这样做:
或
我很震惊。请帮助我克服这一点。
答案 0 :(得分:1)
如果您有一个或多个已解析的句子,则可以通过在已解析的句子对象(productions()
)上调用方法nltk.Tree
来提取描述它们的CFG。这是Penn Treebank语料库的前10个句子的例子:
>>> ruleset = set(rule for tree in nltk.corpus.treebank.parsed_sents()[:10]
for rule in tree.productions())
>>> for rule in ruleset:
print(rule)
NP -> PRP
NP -> DT JJ NN
VP -> VBN S
ADVP-TMP -> RB
IN -> 'among'
NNP -> 'Corp.'
NP -> PRP$ NN NN NNS
NP-SBJ -> DT
RRC -> ADVP-TMP VP
NNP -> 'Journal'
VP -> VBN NP
...
以上将为这10个句子提供278条规则(包括词汇项目),但随着样本的增长,它会变得更好。你可以从那里拿走它。
当然,如果您的句子尚未解析,您首先需要解析它们。