2013-01-17 2 views
3

Si je veux obtenir des étiquettes de phrase correspondant à chaque mot, comment l'obtenir?Comment obtenir des étiquettes de phrases dans Stanford CoreNLP?

Par exemple:

Dans cette phrase,

Mon chien aime aussi manger des saucisses.

Je peux obtenir un arbre d'analyse syntaxique à Stanford PNL, comme

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

Dans la situtation ci-dessus, je veux obtenir des balises de phrase correspondant à chaque mot comme

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

est-il une méthode pour cette extraction simple pour les étiquettes de phrase?

S'il vous plaît aidez-moi.

Répondre

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

Le code n'est pas entièrement testé, mais je pense qu'il fait à peu près ce dont vous avez besoin. Et de plus, je n'ai rien écrit sur la visite récursive des sous-arbres, mais je crois que vous devriez être capable de le faire.

Questions connexes