2015-04-13 5 views
7

Utilizzando StanfordParser di NLTK, mi può analizzare una frase come questa:Utilizzando StanfordParser per ottenere le dipendenze digitati da una frase analizzata

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  

Il risultato è:

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

Come posso utilizzare il parser di Stanford per ottenere dipendenze digitate in aggiunta al grafico sopra? Qualcosa di simile:

  1. radice (root-0, porta-1)
  2. iobj (bring-1, me-2)
  3. det (palla-5, A-3)
  4. amod (palla-5, rosso-4)
  5. dobj (bring-1, palla-5)
+0

Hi Yarik, benvenuto a Stack Overflow. Ho cercato di rendere più chiara la formulazione della domanda e del titolo. – Air

+0

grazie mille! – Yarik

risposta

5

modulo StanfordParser di NLTK non (attualmente) avvolgere l'albero a Stanford dipendenze codice di conversione. È possibile utilizzare la mia libreria PyStanfordDependencies, che avvolge il convertitore di dipendenze.

Se nltk_tree è sentence dal frammento di codice della domanda, allora questo funziona:

#!/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)) 
+1

Grazie per il vostro aiuto! – Yarik

+0

ciao quando ho provato a convertire nltk tree in ptb, con lo stesso, ha dato un errore come "ValueError: Bad exit code da Stanford CoreNLP" –

+0

@SnehaPVS, grazie per la nota. Si prega di inviare un problema all'indirizzo https://github.com/dmcc/PyStanfordDependencies/issues con maggiori dettagli. – dmcc

Problemi correlati