2010-04-24 13 views
1

Supposons que j'ai une telle partie de la phrase:Comment obtenir un nœud parent dans JavaNLP de Stanford?

(NP 
     (NP (DT A) (JJ single) (NN page)) 
     (PP (IN in) 
     (NP (DT a) (NN wiki) (NN website)))) 

A un certain moment de temps, j'ai une référence à (JJ single) et je veux obtenir le noeud NP de liaison A single page. Si je comprends bien, que NP est le parent du nœud, A et page sont ses frères et sœurs et il n'a pas d'enfants (?). Lorsque j'essaie d'utiliser la méthode .parent() d'un arbre, je toujours obtiens null. L'API dit que c'est parce que l'implémentation ne sait pas comment déterminer le nœud parent. Une autre méthode d'intérêt est .ancestor(int height, Tree root), mais je ne sais pas comment obtenir la racine du nœud. Dans les deux cas, puisque l'analyseur sait comment indenter et grouper les arbres, il doit connaître l'arbre "parent", n'est-ce pas? Comment puis-je l'avoir? Merci

Répondre

0

Il semble que le Tree lui-même ne retournera jamais le parent du nœud, car il est codé en dur dans les sources Tree. Pendant ce temps, TreeGraphNode remplace cette méthode et fonctionne bien. Modification d'un arbre à un TreeGraphNode est aussi facile que

TreeGraphNode sentence = new TreeGraph(tree).root(); 
+0

@dmcer - bien, donc il y a la méthode 'phrase.transform (transformateur)', il y a une classe de transformateur séparée et une autre qui initie la transformation. * Où * suggérez-vous de conserver la racine actuelle? – Fluffy

+0

@dmcer - Dans la méthode de transformation que je remplace, j'ai besoin de connaître le parent de l'arbre en cours de transformation. Puisque le seul paramètre de la méthode transform est l'arbre, comment obtenir le parent de cet arbre? C'est-à-dire que je veux utiliser root en transformant, pas après – Fluffy

+0

@dmcer - il est appliqué 'traversé dans un ordre de profondeur, de gauche à droite, et TreeTransformer est appelé sur chaque noeud'. Pour transformer un arbre, j'ai besoin d'informations sur son parent. De cette façon, je peux tenir tout le code traitant certains arbres en un seul endroit. Vous suggérez de déplacer ce code vers le code, en traitant tous les parents possibles de tous les nœuds? – Fluffy

0

Si vous gardez une référence à la racine de l'arbre, vous pouvez utiliser la méthode parent(Tree root) pour obtenir le parent d'un nœud dans l'arborescence. Supposons que la racine de l'arbre est appelée root, et que le nœud JJ est appelé jjTree, alors jjTree.parent(root) renverra le nœud NP parent.

+0

Merci mon frère, maintenant je peux enfin continuer à écrire mon script – Fluffy