2010-08-18 96 views
1

我正在使用红宝石的斯坦福分析器,并且想要搜索具有特定标签名称的树的所有节点。 这是递归的方法我已经编码到目前为止在树中递归搜索

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 

我想方法去返回标签为标签

+0

它目前做什么? – Borealid 2010-08-19 00:00:28

+0

不行吗? – rogerdpack 2010-08-19 00:00:38

+0

我在irb上试过了...它只是退出了,没有错误信息 – charudatta 2010-08-19 00:02:25

回答

0

树节点列表,我不熟悉StanfordParser但我想你需要将遍历的下降部分从内部条件中取出并始终执行。

此外,他们真的实施toString方法吗?真的吗?这不是.to_s?我的意思是,我喜欢Java的,之前我发现红宝石... :-)

+0

他们没有实现一个toString,这个方法是在一个Tree实例上调用的,它实际上是一个Java实例,可以通过Ruby的java桥梁在ruby中使用。 – charudatta 2010-08-19 00:19:54

+0

呵呵,我确实有一个合理的解释,看起来很有趣。 .. – DigitalRoss 2010-08-19 00:32:44

0

我原来的代码是正确的,但红宝石是有一些问题与

if tree.lable.toString == lablename then 

声明,证明tree.value工作原理所以现在我检查

if tree.value == lablename then 

它的工作原理。