Parsing 如何从使用NLTK生成的StanfordDependencyParser的三元组中获取JJ和NN(形容词和名词)?

Parsing 如何从使用NLTK生成的StanfordDependencyParser的三元组中获取JJ和NN(形容词和名词)?,parsing,python-3.x,nltk,stanford-nlp,triples,Parsing,Python 3.x,Nltk,Stanford Nlp,Triples,我用下面的代码得到了三元组,但是我想从三元组中得到名词和形容词,我尝试了很多,但是失败了,NLTK和python都是新手,有什么帮助吗 from nltk.parse.stanford import StanfordDependencyParser dp_prsr= StanfordDependencyParser('C:\Python34\stanford-parser-full-2015-04-20\stanford-parser.jar','C:\Python34\stanford-par

我用下面的代码得到了三元组,但是我想从三元组中得到名词和形容词,我尝试了很多,但是失败了,NLTK和python都是新手,有什么帮助吗

from nltk.parse.stanford import StanfordDependencyParser
dp_prsr= StanfordDependencyParser('C:\Python34\stanford-parser-full-2015-04-20\stanford-parser.jar','C:\Python34\stanford-parser-full-2015-04-20\stanford-parser-3.5.2-models.jar', model_path='edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz')
word=[]
s='bit is good university'
sentence = dp_prsr.raw_parse(s)
for line in sentence:
    print(list(line.triples()))
[(('university','NN'),'nsubj',('bit','NN'),('university','NN'),'cop',('is','VBZ'),('university','NN'),'amod',('good','JJ'))]

我想上大学。我试过以下方法,但都没成功

   for line in sentence:
    if (list(line.triples)).__contains__()  == 'JJ':
       word.append(list(line.triples()))
   print(word)
但我得到的是空数组。。。请提供任何帮助。

语言方面 当你寻找包含
JJ
NN
的三胞胎时,你要寻找的通常是上下文无关语法中的名词短语
NP

在依赖语法中,您要查找的是一个三元组,它包含参数中的JJ和NN POS标记。最具体地说,当你是指包含形容词修饰名词的成分/分支时。从
stanforddepdencParser
输出中,您需要查找谓词
amod
。(如果您对上面解释的内容感到困惑,建议在继续之前阅读依赖语法,请参阅

请注意,解析器输出三元组,
(arg1,pred,arg2)
,其中参数2(
arg2
)通过谓词(
pred
)关系依赖于参数1(
arg1
),即
arg1
控制
arg2
(请参阅,)


肾盂的 现在转到答案的代码部分。您希望遍历元组列表(即三元组),因此最简单的解决方案是在迭代时为元组专门分配变量,然后检查需要查看的条件


很好(Y),这就是我想要的…它工作了,但我看到这可以通过使用Tregex来完成,使用Tregex会更好吗?如果是,上面的例子有代码帮助吗?提前谢谢。可能我不使用Tregex,也许问另一个问题让其他人回答可能会让你在这个包上有更好的专家=)如果没有,一定要发邮件到,看看你是否在那里得到了帮助。
>>> x = [(('university', 'NN'), 'nsubj', ('bit', 'NN')), (('university', 'NN'), 'cop', ('is', 'VBZ')), (('university', 'NN'), 'amod', ('good', 'JJ'))]
>>> for arg1, pred, arg2 in x:
...     word1, pos1 = arg1
...     word2, pos2 = arg2
...     if pos1.startswith('NN') and pos2.startswith('JJ') and pred == 'amod':
...             print ((arg1, pred, arg2))
... 
(('university', 'NN'), 'amod', ('good', 'JJ'))