Skip to content

Commit 07864f9

Browse files
committed
simplify the corefud.Delete code by using deps instead of raw_deps
Fix node.raw_deps, so that it always sorts and removes duplicates, so that the output CoNLL-U files are valid. Add tests.
1 parent a2dc301 commit 07864f9

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

udapi/block/corefud/delete.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,7 @@ def process_document(self, doc):
6767
node.deps = [dep for dep in node.deps if not dep['parent'] in root.empty_nodes]
6868
# otherwise propagate to non-empty ancestors
6969
else:
70-
newdeps = self._deps_ignore_nodes(node, root.empty_nodes)
71-
newdeps_sorted = sorted(set((dep['parent'].ord, dep['deprel']) for dep in newdeps))
72-
node.raw_deps = '|'.join(f"{p}:{r}" for p, r in newdeps_sorted)
70+
node.deps = self._deps_ignore_nodes(node, root.empty_nodes)
7371
# This needs to be done even if '.' not in node.raw_deps.
7472
if '.' in node.misc['Functor'].split(':')[0]:
7573
del node.misc['Functor']

udapi/core/node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ def raw_deps(self):
252252
#if self._raw_deps is not None:
253253
# return self._raw_deps
254254
if self._deps:
255-
self._raw_deps = '|'.join(f"{dep['parent']._ord}:{dep['deprel']}" for dep in self._deps)
255+
self._raw_deps = '|'.join(f"{p}:{r}" for p, r in sorted(set((d['parent'].ord, d['deprel']) for d in self._deps)))
256256
return self._raw_deps
257257

258258
@raw_deps.setter

udapi/core/tests/test_enhdeps.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def test_create_deps2empty(self):
5757
e.deps.append({'parent': h, 'deprel':'dep:e2h'})
5858
d.deps.append({'parent': e, 'deprel': 'dep:d2e'})
5959
self.assertEqual("2:dep:e2h", e.raw_deps, )
60-
self.assertEqual("5:conj|3.1:dep:d2e", d.raw_deps)
60+
self.assertEqual("3.1:dep:d2e|5:conj", d.raw_deps)
6161
self.assertEqual(self.tree.descendants_and_empty, self.nodes[:3] + [e] + self.nodes[3:])
6262

6363

udapi/core/tests/test_node.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,5 +245,25 @@ def test_empty_nodes(self):
245245
self.assertEqual(root.descendants_and_empty, [e1, e2, e3, e4, e6, e7])
246246
self.assertEqual([n.ord for n in root.descendants_and_empty], [0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
247247

248+
def test_enh_deps_and_reordering(self):
249+
"""Test reordering of node ord in enhanced deps when reorderin/removing nodes."""
250+
root = Root()
251+
for i in range(3):
252+
root.create_child(form=f'node{i+1}')
253+
254+
n1, n2, n3 = root.descendants()
255+
n1.raw_deps = '2:nsubj|3:obj'
256+
self.assertEqual(n1.raw_deps, '2:nsubj|3:obj')
257+
self.assertEqual(n1.deps, [{'parent': n2, 'deprel': 'nsubj'}, {'parent': n3, 'deprel': 'obj'}])
258+
n2.shift_after_node(n3)
259+
self.assertEqual(n1.raw_deps, '2:obj|3:nsubj')
260+
# TODO only node.raw_deps are currently guaranteed to return the deps sorted, not node.deps
261+
#self.assertEqual(n1.deps, [{'parent': n3, 'deprel': 'obj'}, {'parent': n2, 'deprel': 'nsubj'}])
262+
# TODO: after removing a node, all deps should be updated
263+
#n2.remove()
264+
#self.assertEqual(n1.raw_deps, '2:nsubj')
265+
#self.assertEqual(n1.deps, [{'parent': n3, 'deprel': 'obj'}])
266+
267+
248268
if __name__ == "__main__":
249269
unittest.main()

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy