def no_double_ns(tree, filename, debug=False, root_id=None): """Return True, iff there is no nucleus/satellite in the given ParentedTree that has a nucleus or satellite as a child node. """ assert isinstance(tree, ParentedTree) if root_id is None: root_id = tree.root_id expected_labels = [ debug_root_label('N', debug=debug, root_id=root_id), debug_root_label('S', debug=debug, root_id=root_id) ] tree_label = tree.label() tree_has_nsroot = tree_label in expected_labels for node in tree: if isinstance(node, ParentedTree): if tree_has_nsroot and node.label() in expected_labels: return False subtree_is_okay = no_double_ns(node, filename, debug=debug, root_id=root_id) if not subtree_is_okay: return False return True
def test_debug_root_label(): label = 'Foo' node_id = '21' assert debug_root_label(label, debug=False, root_id=None) == label assert debug_root_label(label, debug=False, root_id=node_id) == label assert debug_root_label(label, debug=True, root_id=None) == label assert debug_root_label(label, debug=True, root_id=node_id) == "Foo (21)"
def s_wrap(tree, debug=False, root_id=None): """Ensure the given tree has a nucleus as its root. If the root of the tree is a satellite, return it. If the root of the tree is a nucleus, replace the nucleus with a satellite and return the tree. If the root of the tree is a relation, place a satellite on top and return the tree. """ root_label = tree.label() expected_n_root = debug_root_label('N', debug, tree.root_id) expected_s_root = debug_root_label('S', debug, tree.root_id) if root_label == expected_s_root: return tree elif root_label == expected_n_root: tree.set_label(expected_s_root) return tree else: return t('S', [tree], debug=debug, root_id=root_id)
def no_span_nodes(tree, debug=False, root_id=None): """Return True, iff there is no span node in the given ParentedTree.""" assert isinstance(tree, ParentedTree) if root_id is None: root_id = tree.root_id span_label = debug_root_label('span', debug=debug, root_id=root_id) if tree.label() == span_label: return False for node in tree: if isinstance(node, ParentedTree): if node.label() == span_label: return False subtree_is_okay = no_span_nodes(node, debug=debug, root_id=root_id) if not subtree_is_okay: return False return True
def expected_labels(root_rel, debug, root_id): labels = ('N', 'S') if root_rel == 'rst' else ('N') return [ debug_root_label(label, debug=debug, root_id=root_id) for label in labels ]