gpt4 book ai didi

python - nltk 无法解释斯坦福解析器输出的语法类别 PRP$

转载 作者:行者123 更新时间:2023-11-30 21:49:42 25 4
gpt4 key购买 nike

我想根据从斯坦福解析器检索的语法生成句子,但 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 这些语法类别吗?

最佳答案

ValueError: Unable to parse line 11: NP -> PRP$ NNS
Expected a nonterminal, found: $ NNS

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

我快速检查 nltk/grammar.py 显示 $ 不是非终端名称的合法字符。这可以通过修补模块来轻松纠正,如下所示:

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")

关于python - nltk 无法解释斯坦福解析器输出的语法类别 PRP$,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33207799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com