在Python中使用Stanford解析器提取通用依赖项

在Python中使用Stanford解析器提取通用依赖项,python,nlp,dependencies,nltk,stanford-nlp,Python,Nlp,Dependencies,Nltk,Stanford Nlp,编辑:解决方案:为了提取关系子句,我使用了另一个解析器,即CoreNLPParser(),它为我提供了一个nltk树。从那里,我只需要提取正确的标签,加入叶子,瞧,我有了relative子句 我想从句子中提取关系子句,并想在NLTK(python)中使用Stanford解析器。我考虑在句子中使用依赖性信息来检测关系从句。这是我目前掌握的代码: STANFORD = os.path.abspath("stanford-corenlp-full-2018-10-05") # Create the s

编辑:解决方案:为了提取关系子句,我使用了另一个解析器,即CoreNLPParser(),它为我提供了一个nltk树。从那里,我只需要提取正确的标签,加入叶子,瞧,我有了relative子句

我想从句子中提取关系子句,并想在NLTK(python)中使用Stanford解析器。我考虑在句子中使用依赖性信息来检测关系从句。这是我目前掌握的代码:

STANFORD = os.path.abspath("stanford-corenlp-full-2018-10-05")
# Create the server
server = CoreNLPServer(
   os.path.join(STANFORD, "stanford-corenlp-3.9.2.jar"),
   os.path.join(STANFORD, "stanford-corenlp-3.9.2-models.jar"),    
)
sentence = "The play, which started last week, has been sold out ever since."
parser = CoreNLPDependencyParser()
parse = next(parser.raw_parse(sentence))
print(parse)
我的输出如下所示:

{0: {'address': 0,
                 'ctag': 'TOP',
                 'deps': defaultdict(<class 'list'>, {'ROOT': [11]}),
                 'feats': None,
                 'head': None,
                 'lemma': None,
                 'rel': None,
                 'tag': 'TOP',
                 'word': None},
             1: {'address': 1,
                 'ctag': 'DT',
                 'deps': defaultdict(<class 'list'>, {}),
                 'feats': '_',
                 'head': 2,
                 'lemma': 'the',
                 'rel': 'det',
                 'tag': 'DT',
                 'word': 'The'},
             2: {'address': 2,
                 'ctag': 'NN',
                 'deps': defaultdict(<class 'list'>,
                                     {'acl:relcl': [5],
                                      'det': [1],
                                      'punct': [3, 8]}),
                 'feats': '_',
                 'head': 11,
                 'lemma': 'play',
                 'rel': 'nsubjpass',
                 'tag': 'NN',
                 'word': 'play'},
             3: {'address': 3,
                 'ctag': ',',
                 'deps': defaultdict(<class 'list'>, {}),
                 'feats': '_',
                 'head': 2,
                 'lemma': ',',
                 'rel': 'punct',
                 'tag': ',',
                 'word': ','},
             4: {'address': 4,
                 'ctag': 'WDT',
                 'deps': defaultdict(<class 'list'>, {}),
                 'feats': '_',
                 'head': 5,
                 'lemma': 'which',
                 'rel': 'nsubj',
                 'tag': 'WDT',
                 'word': 'which'},
             5: {'address': 5,
                 'ctag': 'VBD',
                 'deps': defaultdict(<class 'list'>,
                                     {'nmod:tmod': [7],
                                      'nsubj': [4]}),
                 'feats': '_',
                 'head': 2,
                 'lemma': 'start',
                 'rel': 'acl:relcl',
                 'tag': 'VBD',
                 'word': 'started'},
             6: {'address': 6,
                 'ctag': 'JJ',
                 'deps': defaultdict(<class 'list'>, {}),
                 'feats': '_',
                 'head': 7,
                 'lemma': 'last',
                 'rel': 'amod',
                 'tag': 'JJ',
                 'word': 'last'},
             7: {'address': 7,
                 'ctag': 'NN',
                 'deps': defaultdict(<class 'list'>, {'amod': [6]}),
                 'feats': '_',
                 'head': 5,
                 'lemma': 'week',
                 'rel': 'nmod:tmod',
                 'tag': 'NN',
                 'word': 'week'},
             8: {'address': 8,
                 'ctag': ',',
                 'deps': defaultdict(<class 'list'>, {}),
                 'feats': '_',
                 'head': 2,
                 'lemma': ',',
                 'rel': 'punct',
                 'tag': ',',
                 'word': ','},
             9: {'address': 9,
                 'ctag': 'VBZ',
                 'deps': defaultdict(<class 'list'>, {}),
                 'feats': '_',
                 'head': 11,
                 'lemma': 'have',
                 'rel': 'aux',
                 'tag': 'VBZ',
                 'word': 'has'},
             10: {'address': 10,
                  'ctag': 'VBN',
                  'deps': defaultdict(<class 'list'>, {}),
                  'feats': '_',
                  'head': 11,
                  'lemma': 'be',
                  'rel': 'auxpass',
                  'tag': 'VBN',
                  'word': 'been'},
             11: {'address': 11,
                  'ctag': 'VBN',
                  'deps': defaultdict(<class 'list'>,
                                      {'advmod': [13, 14],
                                       'aux': [9],
                                       'auxpass': [10],
                                       'compound:prt': [12],
                                       'nsubjpass': [2],
                                       'punct': [15]}),
                  'feats': '_',
                  'head': 0,
                  'lemma': 'sell',
                  'rel': 'ROOT',
                  'tag': 'VBN',
                  'word': 'sold'},
             12: {'address': 12,
                  'ctag': 'RP',
                  'deps': defaultdict(<class 'list'>, {}),
                  'feats': '_',
                  'head': 11,
                  'lemma': 'out',
                  'rel': 'compound:prt',
                  'tag': 'RP',
                  'word': 'out'},
             13: {'address': 13,
                  'ctag': 'RB',
                  'deps': defaultdict(<class 'list'>, {}),
                  'feats': '_',
                  'head': 11,
                  'lemma': 'ever',
                  'rel': 'advmod',
                  'tag': 'RB',
                  'word': 'ever'},
             14: {'address': 14,
                  'ctag': 'IN',
                  'deps': defaultdict(<class 'list'>, {}),
                  'feats': '_',
                  'head': 11,
                  'lemma': 'since',
                  'rel': 'advmod',
                  'tag': 'IN',
                  'word': 'since'},
             15: {'address': 15,
                  'ctag': '.',
                  'deps': defaultdict(<class 'list'>, {}),
                  'feats': '_',
                  'head': 11,
                  'lemma': '.',
                  'rel': 'punct',
                  'tag': '.',
                  'word': '.'}})
如果可能的话

我将感谢任何帮助:) 谢谢
编辑:添加完整输出

您引用的pdf长达28页。你能更具体地描述你想要的输出吗?哦,很好!所以它是文档,它说有可能得到这样的输出:ref(book,which)(第10页)所以基本上是一个由两个单词组成的元组和依赖项就我所理解的文档而言,你必须迭代树结构,并根据“head”和“rel”指针手动提取这个关系,从NP指向关系从句的中心动词。谢谢!但是我怎么知道句子的哪一部分是关系从句,或者是关系从句的开头呢?如果我没记错的话,那是在文档中。在输出中,您可以得到如1中所示的索引,您可以看到键“head”索引2的值,它指向键2的值,即名词NN,为您提供“游戏”。同样,您可以确定与relative子句的关系。如果你发布完整的输出,我们可以一起看一看。你引用的pdf有28页长。你能更具体地描述你想要的输出吗?哦,很好!所以它是文档,它说有可能得到这样的输出:ref(book,which)(第10页)所以基本上是一个由两个单词组成的元组和依赖项就我所理解的文档而言,你必须迭代树结构,并根据“head”和“rel”指针手动提取这个关系,从NP指向关系从句的中心动词。谢谢!但是我怎么知道句子的哪一部分是关系从句,或者是关系从句的开头呢?如果我没记错的话,那是在文档中。在输出中,您可以得到如1中所示的索引,您可以看到键“head”索引2的值,它指向键2的值,即名词NN,为您提供“游戏”。同样,您可以确定与relative子句的关系。如果你发布完整的输出,我们可以一起看一看。
ref(book, which)