如何使用NLTK Python为任何句子生成CFG?

时间:2017-03-01 09:03:05

标签: python-2.7 nltk

我的问题是:

我有很多文件的句子。对于每个句子,我必须使用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"
  """)

而不是这样做:

  • 我想要一个适用于任何句子的通用CFG

  • 我想为每个句子自动生成CFG。

我很震惊。请帮助我克服这一点。

1 个答案:

答案 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条规则(包括词汇项目),但随着样本的增长,它会变得更好。你可以从那里拿走它。

当然,如果您的句子尚未解析,您首先需要解析它们。