2010-08-18 7 views
1

Je travaille avec l'analyseur de Stanford dans ruby ​​et je veux rechercher tous les nœuds d'un arbre avec un nom d'étiquette particulier. Ceci est la méthode récursive j'ai codé jusqu'àRecherche récursive dans un arbre

def searchTreeWithLabel(tree,lablename,listOfNodes) 
    if tree.instance_of?(StanfordParser::Tree) 
    if tree.lable.toString == lablename then 
     listOfNodes << tree 
    else 
     tree.children.each { |c| searchTreeWithLabel(c, lablename, listOfNodes)} 
    end 
    end 
    listOfNodes 
end 

je veux la méthode pour retourner une liste de nœuds d'arbres qui ont l'étiquette labelname

+0

Et il fait quoi actuellement? – Borealid

+0

cela ne fonctionne-t-il pas? – rogerdpack

+0

je l'ai essayé dans irb ... et il se ferme simplement, pas de message d'erreur – charudatta

Répondre

0

Je ne connais pas StanfordParser mais j'imagine que vous avez besoin prendre la partie descendante de la traversée hors du conditionnel interne et toujours le faire.

Également, ont-ils vraiment implémenté une méthode toString? Sérieusement? Ce n'est pas .to_s? Je veux dire, j'ai apprécié Java, avant de trouver Ruby ... :-)

+0

ils n'ont pas implémenté un toString, la méthode est appelée sur une instance de Tree qui est en fait une instance java disponible dans ruby ​​via le pont Ruby java – charudatta

+0

Heh, j'ai compris qu'il y avait une explication raisonnable, c'était juste marrant de voir. .. – DigitalRoss

0

mon code original était correct, mais Ruby avais un problème avec la déclaration

if tree.lable.toString == lablename then 

, se révèle tree.value fonctionne comme bien, alors maintenant je vérifie

if tree.value == lablename then 

et cela fonctionne.