2013-01-17 4 views
3

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

Например:

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

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

я могу получить дерево разбора в Стэнфордский NLP, такие как

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

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

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

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

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

ответ

2
//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())); 
      } 
    } 
} 

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