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”中每个项目的所有上位词,如果找到“ abstraction”,请从“ syns”中删除原始术语。由于某些原因,这只是删除其中的一些。

最佳答案

由于要在迭代syns的同时对其进行处理,因此应在syns的一部分上进行迭代,即制作列表的副本并在副本上进行迭代:

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

关于python - 在python中从树中递归删除项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23524811/

10-10 01:03