I have repeatedly encountered the following situation: A small change is needed for a batch of nodes, such as changing the DEPREL (or both the HEAD and the DEPREL) for a node that satisfies a condition. Typically I do it directly from the commandline, using udapy -s util.Eval node='if CONDITION: node.parent = X; node.deprel = Y'. Now if the treebank contains enhanced dependencies, the same change should (typically) be also made in the enhanced graph. I usually forget to do it properly but when I want to do it, it is not as simple as the change in the basic tree. I wrote the code below in some of my blocks where I had to do it but I don't like having to repeat the code in several blocks again and again, and can hardly use it in util.Eval from commandline:
defreattach(self, node, parent, deprel):
""" Changes the incoming dependency relation to a node. Makes sure that the same change is done in the basic tree and in the enhanced graph. """ifnode.deps:
# If the enhanced graph contains the current basic relation, remove it.# Note that the enhanced deprel may contain subtypes that are not in the basic deprel.orig_n_deps=len(node.deps)
node.deps= [xforxinnode.depsifx['parent'] !=node.parentorre.sub(r':.*', '', x['deprel']) !=node.udeprel]
# Add the new basic relation to the enhanced graph only if the original one was there.iflen(node.deps) <orig_n_deps:
node.deps.append({'parent': parent, 'deprel': deprel})
node.parent=parentnode.deprel=deprelWould it make sense to have something similar in the core code, as a method of Node?
I have repeatedly encountered the following situation: A small change is needed for a batch of nodes, such as changing the DEPREL (or both the HEAD and the DEPREL) for a node that satisfies a condition. Typically I do it directly from the commandline, using
udapy -s util.Eval node='if CONDITION: node.parent = X; node.deprel = Y'. Now if the treebank contains enhanced dependencies, the same change should (typically) be also made in the enhanced graph. I usually forget to do it properly but when I want to do it, it is not as simple as the change in the basic tree. I wrote the code below in some of my blocks where I had to do it but I don't like having to repeat the code in several blocks again and again, and can hardly use it in util.Eval from commandline:Would it make sense to have something similar in the core code, as a method of Node?