Exemple #1
0
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
Exemple #2
0
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)
Exemple #4
0
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
Exemple #5
0
 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
     ]