【问题标题】:nltk cant interpret grammar category PRP$ output by stanford parsernltk 无法解释斯坦福解析器输出的语法类别 PRP$
【发布时间】: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


【解决方案1】:

ValueError:无法解析第 11 行:NP -> PRP$ NNS
应为非终结符,但发现:$ NNS

我不知道您为什么要尝试将手工构建的 CFG 与斯坦福解析器的输出相结合,但这里有一个解决此问题的方法:

我对@9​​87654321@ 的快速检查表明$ 不是非终端名称的合法字符。这可以通过像这样修补模块来轻松纠正:

import nltk
import re
nltk.grammar._STANDARD_NONTERM_RE = re.compile('( [\w/][\w$/^<>-]* ) \s*', re.VERBOSE)

在上面我刚刚将$ 添加到您将在nltk/grammar.py 中找到的正则表达式中。然后,您可以创建和使用在其作品中包含 $ 的语法:

grammar = nltk.grammar.CFG.fromstring("NP -> PRP$ NNS")

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 2014-03-06
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多