Как получить теги фраз в Stanford CoreNLP?

Если я хочу получить теги фраз, соответствующие каждому слову, как мне это получить?

Например :

В этом предложении

Моя собака тоже любит есть колбасу.

Я могу получить дерево синтаксического анализа в Стэнфордском НЛП, например

(ROOT (S (NP (PRP$ My) (NN dog)) (ADVP (RB also)) (VP (VBZ likes) (NP (JJ eating) (NN sausage))) (. .)))

В приведенной выше ситуации я хочу получить теги фраз, соответствующие каждому слову, например

(My - NP), (dog - NP), (also - ADVP), (likes - VP), ...

Есть ли способ для этого простого извлечения тегов фраз?

Помогите пожалуйста мне.


person user1986167    schedule 17.01.2013    source источник


Ответы (1)


//I guess this is how you get your parse tree.
Tree tree = sentAnno.get(TreeAnnotation.class);

//The children of a Tree annotation is an array of trees.
Tree[] children = parent.children() 

//Check the label of any sub tree to see whether it is what you want (a phrase)
for (Tree child: children){
   if (child.value().equals("NP")){// set your rule of defining Phrase here
          List<Tree> leaves = child.getLeaves(); //leaves correspond to the tokens
          for (Tree leaf : leaves){ 
            List<Word> words = leaf.yieldWords();
            for (Word word: words)
                System.out.print(String.format("(%s - NP),",word.word()));
          }
   }
}

Код не полностью протестирован, но я думаю, что он примерно соответствует вашим потребностям. И более того, я ничего не писал о рекурсивном посещении поддеревьев, но я считаю, что вы должны это сделать.

person hunterhector    schedule 22.01.2013