Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何使用NLTK Python为任何句子生成CFG?_Python 2.7_Nltk - Fatal编程技术网

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

Python 2.7 如何使用NLTK Python为任何句子生成CFG?,python-2.7,nltk,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" |

我的问题是:

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

我被这件事深深打动了。请帮助我解决这个问题。

如果您有一个或多个已解析的句子,您可以通过调用已解析句子对象(一个
nltk.Tree
)上的方法
productions()
,来提取描述它们的CFG。以下是宾夕法尼亚树状银行语料库前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条规则(包括词汇项),但随着样本的增加,它会变得更好。你可以从那里拿走


当然,如果你的句子还没有被解析,你首先需要解析它们

回答“我想要一个适用于任何句子的通用CFG”=“不可能”。回答“我想要为每个句子自动生成CFG。”=“可能(如果您已经训练过语法分析器)”。你可以从语法树库中归纳语法规则,也可以为语法分析器以前没有见过的新句子推断新的语法结构。阅读第8章和第9章:我的想法是我们可以得到句子中每个单词的标签和句子的树。基于这两件事,我们可以自动生成CFG,而不是为每个句子编写。