Uso de StanfordParser para obtener dependencias escritas a partir de una oración analizada

Usando el StanfordParser de NLTK, puedo analizar una oración como esta:

os.environ['STANFORD_PARSER'] = 'C:\jars' os.environ['STANFORD_MODELS'] = 'C:\jars' os.environ['JAVAHOME'] ='C:\ProgramData\Oracle\Java\javapath' parser = stanford.StanfordParser(model_path="C:\jars\englishPCFG.ser.gz") sentences = parser.parse(("bring me a red ball",)) for sentence in sentences: sentence 

El resultado es:

 Tree('ROOT', [Tree('S', [Tree('VP', [Tree('VB', ['Bring']), Tree('NP', [Tree('DT', ['a']), Tree('NN', ['red'])]), Tree('NP', [Tree('NN', ['ball'])])]), Tree('.', ['.'])])]) 

¿Cómo puedo usar el analizador de Stanford para obtener dependencias mecanografiadas además del gráfico anterior? Algo como:

  1. raíz (ROOT-0, bring-1)
  2. iobj (traer-1, me-2)
  3. det (bola-5, a-3)
  4. amod (bola-5, red-4)
  5. dobj (traer-1, bola-5)

El módulo StanfordParser de NLTK no (actualmente) ajusta el árbol al código de conversión de Dependencias de Stanford. Puede usar mi biblioteca PyStanfordDependencies , que contiene el convertidor de dependencias.

Si nltk_tree es una sentence del fragmento de código de la pregunta, esto funciona:

 #!/usr/bin/python3 import StanfordDependencies # Use str() to convert the NLTK tree to Penn Treebank format penn_treebank_tree = str(nltk_tree) sd = StanfordDependencies.get_instance(jar_filename='point to Stanford Parser JAR file') converted_tree = sd.convert_tree(penn_treebank_tree) # Print Typed Dependencies for node in converted_tree: print('{}({}-{},{}-{})'.format( node.deprel, converted_tree[node.head - 1].form if node.head != 0 else 'ROOT', node.head, node.form, node.index))