在python中以递归方式从树中删除项目

时间:2014-05-07 17:53:22

标签: python recursion tree nltk

seen2 = set()

def eliminate_abs(d): ##remove all entries that connect to the abstraction node, type(d) = list
    def rec(x):
        if x not in seen2:
            seen2.add(x)
            a = x.hypernyms()
            if len(a) != 0:
                kk = a[0]
                if re.search('abstraction',str(kk)):
                    syns.remove(ii)
                else:
                    rec(kk)

    for ii in d: ##type(ii) = <class 'nltk.corpus.reader.wordnet.Synset'>
        rec(ii)

eliminate_abs(syns)

列表“syns”最终将转换为树,但我首先需要删除最终连接到抽象节点的所有项目。我希望这个函数做的是递归查看“syns”中每个项目的所有上位词,如果找到“抽象”,则从“syns”中删除原始术语。出于某种原因,这只是删除其中一些。

2 个答案:

答案 0 :(得分:2)

由于你在迭代它时使用syns,你应该遍历一片syns,即复制列表并遍历副本:

for ii in d[:]:
    rec(ii)

答案 1 :(得分:0)

想出来。它工作正常,但它们在syns中是一堆重复,所以在第一个之后所有这些都被跳过了。删除         如果不是x在see2:             seen2.add(x)的 让它工作正常。