2013-04-30 4 views
1

Из онлайных демо Stanford CoreNLP с примером предложением «минимальным элементом программного обеспечения, которые могут быть проверены в изоляции» это дает рухнувшие зависимости с CC обрабатываются следующим образом:Stanford Ядро NLP пропавшего Roots

root (ROOT-0 , item-4) 
det (item-4 , A-1) 
amod (item-4 , minimal-2) 
nn (item-4 , software-3) 
nsubjpass (tested-8 , that-5) 
aux (tested-8 , can-6) 
auxpass (tested-8 , be-7) 
rcmod (item-4 , tested-8) 
prep_in (tested-8 , isolation-10) 

Из моего класса Java я получаю то же самое, кроме root (...). Код, который я запускаю, следующий:

public static void main(String[] args) 
    { 
     Properties props = new Properties(); 
     props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref"); 
     StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 

     Annotation document = new Annotation(args[0]); 

     pipeline.annotate(document); 

     List<CoreMap> sentences = document.get(CoreAnnotations.SentencesAnnotation.class); 

     for (CoreMap sentence : sentences) { 
      SemanticGraph dependencies = sentence.get(SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation.class); 
      System.out.println(dependencies.toList()); 
     } 
    } 

Итак, вопрос в том, почему мой Java-код не выводит root `!? Я что-то упускаю?

ответ

3

Это хороший вопрос в том смысле, что он представляет собой плохость в текущем коде. В настоящее время корневой узел и ребро из него не сохраняются на графике. * Вместо этого к ним нужно обращаться отдельно в виде корня/списка корней графа, хранящегося в виде отдельного списка. Вот две вещи, которые будут работать: (1) Добавьте этот код над System.out.println:

IndexedWord root = dependencies.getFirstRoot(); 
System.out.printf("ROOT(root-0, %s-%d)%n", root.word(), root.index()); 

(2) Используйте вместо вашей текущей строки:

System.out.println(dependencies.toString("readable")); 

В отличие от других toList() или toString() методов, он печатает корень (ы).

* Есть исторические причины для этого: у нас раньше не было явного корня. Но на данный момент поведение неудобно и дисфункционально и должно быть изменено. Вероятно, это произойдет в будущем выпуске.

+0

мне удалось найти другое решение для моего случая: 'GrammaticalStructure гс = gsf.newGrammaticalStructure (дерево);' ' Collection TDL = gs.typedDependenciesCCprocessed();' – werd

+0

Да, это хорошо работает, так как ROOT действительно находится в этой коллекции зависимостей. Небольшая стоимость заключается в том, что вы платите за то, чтобы они были созданы во второй раз из дерева разбора. –

Смежные вопросы