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
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') ] }
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)
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')
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
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
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')