def test_topdown_walk(): assert list(mp.walk(m0, method='top-down')) == [] assert list(mp.walk(m1, method='top-down')) == [(0, 10000, ':/H>')] assert list(mp.walk(m2, method='top-down')) == [(0, 10003, ':/H>'), (10003, 10002, ':ARG1/NEQ>')] assert list(mp.walk(m2, start=10001, method='top-down')) == [(10001, 10002, ':ARG1/EQ>')] assert list(mp.walk(m3, method='top-down')) == [(0, 10004, ':/H>'), (10004, 10003, ':ARG1/NEQ>')]
def test_headed_walk(): assert list(mp.walk(m0)) == [] assert list(mp.walk(m1)) == [(0, 10000, ':/H>')] assert list(mp.walk(m2)) == [(0, 10003, ':/H>'), (10003, 10002, ':ARG1/NEQ>'), (10002, 10001, '<ARG1/EQ:'), (10002, 10000, '<RSTR/H:')] assert list(mp.walk(m2, start=10002)) == [(10002, 10001, '<ARG1/EQ:'), (10002, 10000, '<RSTR/H:')] assert list(mp.walk(m3)) == [(0, 10004, ':/H>'), (10004, 10003, ':ARG1/NEQ>'), (10003, 10001, '<ARG1/EQ:'), (10003, 10002, '<ARG1/EQ:'), (10003, 10000, '<RSTR/H:')]
def test_bottomup_walk(): assert list(mp.walk(m0, method='bottom-up')) == [] assert list(mp.walk(m1, method='bottom-up')) == [] assert list(mp.walk(m1, start=10000, method='bottom-up')) == [(10000, 0, '</H:')] assert list(mp.walk(m2, start=10002, method='bottom-up')) == [(10002, 10001, '<ARG1/EQ:'), (10002, 10003, '<ARG1/NEQ:'), (10003, 0, '</H:'), (10002, 10000, '<RSTR/H:')] assert list(mp.walk(m3, start=10003, method='bottom-up')) == [(10003, 10001, '<ARG1/EQ:'), (10003, 10002, '<ARG1/EQ:'), (10003, 10004, '<ARG1/NEQ:'), (10004, 0, '</H:'), (10003, 10000, '<RSTR/H:')]
def semantic_test_result(prof_path): # todo: consider i-wf res =dict([ ('i-ids', set()), ('result', 0), # ('no-mrs', 0), # ('bad-mrs', 0), # ('disconnected', 0), # connected MRS ('ill-formed', 0), # well-formed MRS ('non-headed', 0), ('error', 0) # ('scope', 0), # MRSs that scope well # ('headed', 0) # fully headed MRSs (can be tree-ified) ]) prof = itsdb.ItsdbProfile(prof_path, index=False) for row in prof.join('parse', 'result'): iid, rid = row['parse:i-id'], row['result:result-id'] mrs = row['result:mrs'] res['i-ids'].add(iid) res['result'] += 1 faults = [] if mrs: try: m = simplemrs.loads_one(mrs) if not m.is_well_formed(): faults.append('ill-formed') if not m.is_connected(): faults.append('disconnected') headed_nids = [n for _, n, _ in mp.walk(m) if n != 0] if set(headed_nids) != set(m.nodeids()): faults.append('non-headed') except XmrsError: faults.append('bad-mrs') except: faults.append('error') else: faults.append('no-mrs') if faults: info('{iid}-{rid}\t{faults}' .format(iid=iid, rid=rid, faults=' '.join(faults))) if 'error' in faults: debug(mrs) for fault in faults: res[fault] += 1 else: debug('{iid}-{rid}'.format(iid=iid, rid=rid)) return res