2015-04-13 5 views
7

Mit NLTK des StanfordParser zu bekommen, kann ich einen Satz wie folgt analysieren:StanfordParser Verwendung zu typisierten Abhängigkeiten von einem analysierten Satz

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  

Das Ergebnis ist:

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

Wie kann ich den Stanford-Parser verwenden kann um zusätzlich zum obigen Graphen typisierte Abhängigkeiten zu erhalten? Etwas wie:

  1. Wurzel (ROOT-0, Bring-1)
  2. Iobj (bring-1, Me-2)
  3. det (ball-5, A-3)
  4. AMOD (Ball-5, rot-4)
  5. dobj (Bring-1, ball-5)
+0

Hallo Yarik, begrüßt Überlauf zu stapeln. Ich habe versucht, den Wortlaut Ihrer Frage und Ihres Titels deutlicher zu machen. – Air

+0

vielen dank! – Yarik

Antwort

5

NLTK des StanfordParser Modul (derzeit nicht), um den Baum zu Stanford Abhängigkeiten Konversionscodes umwickeln. Sie können meine Bibliothek PyStanfordDependencies verwenden, die den Abhängigkeitskonverter umschließt.

Wenn nltk_treesentence aus der Code-Schnipsel Frage ist, dann funktioniert das:

#!/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

Vielen Dank für Ihre Hilfe! – Yarik

+0

hallo, als ich versuchte, nltk Baum zu PTB zu konvertieren, mit dem gleichen, gab es einen Fehler wie "ValueError: Bad exit code von Stanford CoreNLP" –

+0

@SnehaPVS, danke für die Notiz. Bitte reichen Sie ein Problem unter https://github.com/dmcc/PyStanfordDependencies/issues mit weiteren Details ein. – dmcc