【发布时间】:2015-10-19 06:20:32
【问题描述】:
我想从斯坦福解析器检索的语法生成句子,但 NLTK 无法解释 PRP$。
from nltk.parse.stanford import StanfordParser
from nltk.grammar import CFG
from nltk.parse.generate import generate
sp=StanfordParser(model_path='/home/aman/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser-3.4-models/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz',path_to_jar='/home/aman/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser.jar',path_to_models_jar='/home/aman/stanford_resource/stanford-postagger-full-2014-08-27/stanford-postagger-3.4.1.jar')
sent1='He killed the tiger in his pants'
parse_result=sp.raw_parse(sent1)
grammar_list=[]
for p in parse_result:
l=p.productions()
grammar_string='\n'.join(map(str,l))
grammar=CFG.fromstring(grammar_string)
#grammar_list.append(grammar)
#for s in generate(grammar,n=3):
# print s
ValueError: Unable to parse line 11: NP -> PRP$ NNS
Expected a nonterminal, found: $ NNS
它是如何工作的。我是否应该针对这些语法类别专门指导 nltk。
【问题讨论】:
-
CFG.fromstring()需要一个语法,但是你给它一个树(解析器的输出)。我不认为这可以“成功”,至少不容易。 -
grammar_string 是
ROOT -> S S -> NP VP NP -> PRP PRP -> 'He' VP -> VBD NP PP VBD -> 'killed' NP -> DT NN DT -> 'the' NN -> 'tiger' PP -> IN NP IN -> 'in' NP -> PRP$ NNS PRP$ -> 'his' NNS -> 'pants'的字符串,只不过是输入语法 -
问题在于 CFG.fromstring() 不接受非终端名称中的
$。您应该清理代码并将grammar_string的定义添加到您的问题中,否则它是没有意义的。 -
这应该给你一个属,解决方案:stackoverflow.com/a/43038238/937153
标签: python nltk stanford-nlp