2015-04-13 14 views
7

Korzystanie NLTK za StanfordParser mogę analizować zdanie tak:Korzystanie StanfordParser dostać wpisane zależności od analizowanej zdaniu

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  

Wynikiem jest:

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

Jak mogę użyć parsera Stanford Aby uzyskać oprócz tego powyższego wykresu wypisane zależności? Coś jak:

  1. korzenia (root-0, bring-1)
  2. iobj (bring-1, Me-2)
  3. det (ball-5, A-3)
  4. Amod (ball-5, czerwono-4)
  5. dobj (bring-1, ball-5)
+0

Hi Yarik, zapraszamy do przepełnienie stosu. Starałem się, aby brzmienie Twojego pytania i tytułu było bardziej wyraźne. – Air

+0

dziękuję bardzo! – Yarik

Odpowiedz

5

moduł StanfordParser NLTK za nie (obecnie) owinąć drzewa do Stanford Zależności kodu konwersji. Możesz użyć mojej biblioteki PyStanfordDependencies, która otacza konwerter zależności.

Jeśli nltk_tree jest sentence z fragmentu kodu na pytanie, wtedy to działa:

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

Dziękuję za pomoc! – Yarik

+0

witam, gdy próbowałem konwertować drzewo nltk na ptb, z tym samym, dało błąd jak "ValueError: Zły kod wyjścia z Stanford CoreNLP" –

+0

@SnehaPVS, dzięki za notatkę. Proszę zgłoś problem na https://github.com/dmcc/PyStanfordDependencies/issues z więcej informacji. – dmcc