示例#1
0
def test_from_dmrs(dogs_bark):
    from delphin import dmrs
    m = mrs.MRS(**dogs_bark)
    d = dmrs.DMRS(
        top=10002,
        index=10002,
        nodes=[
            dmrs.Node(10000, 'udef_q'),
            dmrs.Node(10001, '_dog_n_1', type='x',
                      properties={'NUM': 'pl'}),
            dmrs.Node(10002, '_bark_v_1', type='e',
                      properties={'TENSE': 'pres'})],
        links=[
            dmrs.Link(10000, 10001, 'RSTR', 'H'),
            dmrs.Link(10002, 10001, 'ARG1', 'NEQ')])
    _m = mrs.from_dmrs(d)

    # Issue #248
    labels = set(ep.label for ep in _m.rels)
    hcons = {hc.hi: hc.lo for hc in _m.hcons}
    assert _m.top not in labels
    assert _m.top in hcons
    assert hcons[_m.top] in labels
    # ensure equivalency
    assert mrs.is_isomorphic(m, _m)

    # try with no hook
    d.top = None
    d.index = None
    # it won't be isomorphic, just check for errors
    _m = mrs.from_dmrs(d)
    assert _m.top is None
    assert _m.index is None
    assert len(_m.rels) == 3
    assert len(_m.hcons) == 1
示例#2
0
def dogs_bark():
    return {
        'top':
        10000,
        'index':
        10000,
        'nodes': [
            dmrs.Node(10000, '_bark_v_1_rel', type='e'),
            dmrs.Node(10001, 'udef_q_rel'),
            dmrs.Node(10002, '_dog_n_1_rel', type='x')
        ],
        'links': [
            dmrs.Link(10000, 10002, 'ARG1', 'NEQ'),
            dmrs.Link(10001, 10002, 'RSTR', 'H')
        ]
    }
示例#3
0
def eds_to_dmrs(eds_rep):
    node_counter = 10000
    new_node_ids = {}
    dmrs_nodes = []
    for node in eds_rep.nodes:
        new_node_ids[node.id] = node_counter
        dmrs_nodes.append(d_dmrs.Node(node_counter, node.predicate, node.type, node.properties, node.carg, node.lnk, node.surface, node.base))
        node_counter += 1

    dmrs_links = [d_dmrs.Link(new_node_ids[edge[0]], new_node_ids[edge[2]], edge[1], "") for edge in eds_rep.edges]
    return d_dmrs.DMRS(new_node_ids[eds_rep.top], new_node_ids[eds_rep.top], dmrs_nodes, dmrs_links, eds_rep.lnk, eds_rep.surface, eds_rep.identifier)
示例#4
0
 def test_init(self):
     with pytest.raises(TypeError):
         dmrs.Link()
     with pytest.raises(TypeError):
         dmrs.Link(1)
     with pytest.raises(TypeError):
         dmrs.Link(1, 2)
     with pytest.raises(TypeError):
         dmrs.Link(1, 2, 'ARG1')
     dmrs.Link(1, 2, 'ARG1', 'EQ')
     dmrs.Link('1', 2, 'ARG1', 'EQ')
     dmrs.Link(1, '2', 'ARG1', 'EQ')
示例#5
0
def _mrs_to_links(m, hcmap, reps, iv_to_nid, id_to_nid):
    links = []
    # links from arguments
    for src, roleargs in m.arguments().items():
        start = id_to_nid[src]
        for role, tgt in roleargs:
            # non-scopal arguments
            if tgt in iv_to_nid:
                end = iv_to_nid[tgt]
                if m[src].label == m[tgt].label:
                    post = dmrs.EQ_POST
                else:
                    post = dmrs.NEQ_POST
            # scopal arguments
            elif tgt in reps and len(reps[tgt]) > 0:
                tgt = reps[tgt][0]
                end = id_to_nid[tgt.id]
                post = dmrs.HEQ_POST
            elif tgt in hcmap:
                lo = hcmap[tgt].lo
                tgt = reps[lo][0]
                end = id_to_nid[tgt.id]
                post = dmrs.H_POST
            # other (e.g., BODY, dropped arguments, etc.)
            else:
                continue
            links.append(dmrs.Link(start, end, role, post))
    # MOD/EQ links for shared labels without argumentation
    for label, eps in reps.items():
        if len(eps) > 1:
            end = id_to_nid[eps[0].id]
            for src in eps[1:]:
                start = id_to_nid[src.id]
                links.append(
                    dmrs.Link(start, end, dmrs.BARE_EQ_ROLE, dmrs.EQ_POST))
    return links
示例#6
0
    def test__init__(self, dogs_bark):
        d = dmrs.DMRS()
        assert d.top is None
        assert d.index is None
        assert d.nodes == []
        assert d.links == []

        d = dmrs.DMRS(**dogs_bark)
        assert d.top == 10000
        assert d.index == 10000
        assert len(d.nodes) == 3
        assert d.nodes[0].predicate == '_bark_v_1_rel'
        assert d.nodes[1].predicate == 'udef_q_rel'
        assert d.nodes[2].predicate == '_dog_n_1_rel'
        assert len(d.links) == 2
        assert d.links[0].role == 'ARG1'
        assert d.links[1].role == 'RSTR'

        # make sure the old way of marking top still works
        dogs_bark2 = dict(dogs_bark)
        dogs_bark2['links'].append(dmrs.Link(0, dogs_bark['top'], None, 'H'))
        del dogs_bark2['top']
        d2 = dmrs.DMRS(**dogs_bark2)
        assert d.top == d2.top
示例#7
0
 def test__eq__(self):
     link1 = dmrs.Link(1, 2, 'ARG1', 'EQ')
     assert link1 == dmrs.Link(1, 2, 'ARG1', 'EQ')
     assert link1 != dmrs.Link(2, 1, 'ARG1', 'EQ')
     assert link1 != dmrs.Link(1, 2, 'ARG2', 'EQ')
     assert link1 != dmrs.Link(1, 2, 'ARG1', 'NEQ')