【问题标题】:How to get JJ and NN (adjective and Noun) from the triples generated StanfordDependencyParser with NLTK?如何从使用 NLTK 生成 StanfordDependencyParser 的三元组中获取 JJ 和 NN(形容词和名词)?
【发布时间】:2016-03-15 20:56:57
【问题描述】:

我使用以下代码得到了三元组,但我想从三元组中得到名词和形容词,我尝试了很多但失败了,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'))]

我想上好大学,而 BIT 和大学我尝试了以下但无法工作。

   for line in sentence:
    if (list(line.triples)).__contains__()  == 'JJ':
       word.append(list(line.triples()))
   print(word)

但我得到空数组...请任何帮助。

【问题讨论】:

    标签: parsing python-3.x nltk stanford-nlp triples


    【解决方案1】:

    语言

    当您查找包含JJNN 的三元组时,您要注意的内容通常是无上下文语法中的名词短语NP

    在依赖语法中,您正在寻找的是一个三元组,它在 arguments 中包含 JJ 和 NN POS 标签。最具体地说,当您针对包含形容词修饰名词的成分/分支时。从StanfordDepdencyParser 输出中,您需要查找谓词 amod。 (如果您对上面解释的内容感到困惑,建议您在继续之前阅读依赖语法,请参阅https://en.wikipedia.org/wiki/Dependency_grammar

    请注意,解析器输出三元组(arg1, pred, arg2),其中参数 2 (arg2) 通过谓词 (pred) 关系依赖于参数 1 (arg1);即arg1 支配arg2(参见https://en.wikipedia.org/wiki/Government_(linguistics)


    Python 方式

    现在到答案的代码部分。您想遍历元组列表(即三元组),因此最简单的解决方案是在您迭代时专门为元组分配变量,然后检查您需要的条件,请参阅Find an element in a list of tuples

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

    【讨论】:

    • 太棒了 (Y),这就是我想要的……它起作用了,但我看到这可以通过使用 Tregex 来完成,用 tregex 来做会更好吗?如果是,上述示例的任何代码帮助?提前致谢。
    • 可能,但我不使用 Tregex,也许问另一个问题让其他人回答可能会让你成为该软件包的更好专家 =) 如果没有,请发帖到 groups.google.com/forum/… 看看你是否得到那里有一些帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 2011-02-19
    • 1970-01-01
    • 2013-06-19
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多