def __call__(self, f): r = match(f, behave_(_, 'quote|引用', _, _), self.browse, behave_(_, 'perception|感知', _, _), lambda arg: 'perception', behave_(_, 'perception|感知', desc_('result|结果', _), _), lambda arg: arg.text, _, None ) return r
def test_match_absent_part(): f = build_anal_tree('Nós estudamos.', 'pt', 'stanza') f.draw() r = match(f, behave_(_, _1 << 'study', _2 << _, _), lambda arg, v1, v2: [v1.text, v2.text], behave_(_, _1 << 'study', _, _), lambda arg, v1: [v1.text], behave_(_, _1 << 'learn', _2 << _, _), lambda arg, v1, v2: [v1.text, v2.text], _, None) assert ['estudamos'] == r
def test_match_embed_expr(): f = build_anal_tree('We expect them to change their minds', 'en', 'stanza') f.draw() r = match( f, behave_(_, _1 << 'expect|期望', _, _, rel_('xcomp') == behave_(_, _2 << 'change|变', 'mind')), lambda arg, v1, v2: [v1.text, v2.text], _, None) assert ['expect', 'change'] == r
def test_match_expr(): f = build_anal_tree('Note the output is a string', 'en', 'stanza') f.draw() r = match(f, behave_(_, _1 << 'perception|感知', _2 << _, _), lambda arg, v1, v2: [v1.text, v2.text], _, None) assert ['Note', 'string'] == r r = match( f, behave_(_, _1 << 'unknown', _2 << _, _), lambda *args: 'unknown', # behave_(_, 'perception|感知', _1 << desc_('result|结果', _), _), # lambda arg, v1: [arg.behave.text, v1.target.text], behave_(_, _1 << 'perception|感知', desc_('result|结果', _), _), lambda arg, v1: [arg.behave.text, v1.text], behave_(_, _1 << 'unknown2', _2 << _, _), lambda *args: 'unknown2', _, None) assert ['Note', 'Note'] == r assert 0 == len(_1.reqs)
def test_match_expr(): f = build_anal_tree('Note the output is a string', 'en', 'stanza') f.draw() r=match(f, behave_(_, 'perception|感知', _, _), lambda arg: 'perception', behave_(_, 'perception|感知', desc_('result|结果', _), _), lambda arg: arg.text, _, None ) assert 'perception'==r r = match(f, behave_(_, 'unknown', _, _), lambda arg: 'unknown', # behave_(_, 'perception|感知', desc_('result|结果', _), _), # lambda arg: [arg.behave.text], behave_(_, 'perception|感知', _1<<desc_('result|结果', _), _), lambda arg, v1: [arg.behave.text, v1.target.text], _, None ) assert ['Note', 'output'] == r # assert ['Note'] == r r = match(f/'ccomp'/'nsubj', 'pos:noun', lambda arg: arg.text, _, None ) assert 'output' == r r = match(f / 'ccomp' / 'nsubj', 'pos:pron', lambda arg: arg.text, _, None ) assert r is None r = match(f, behave_(_, 'perception|感知', _1<<_, _), lambda arg, v1: v1.text, _, None ) assert 'string' == r r = match(f, behave_(_, _1<<'perception|感知', _2 << _, _), lambda arg, v1, v2: [v1.text, v2.text], _, None ) assert ['Note', 'string'] == r
def _study(f, f_behave): return match(f, behave_(_, _1 << 'study|学习', _2 << _, _), lambda arg, *v: wrap_behave(f_behave), behave_(_, _1 << 'study|学习', _, _), lambda arg, *v: wrap_behave(f_behave), _, None)