;;; -*- Mode: TDL; Package: LKB; -*- ;;; ;;; Zero pronoun insertion ;;; ;; Add zero pronouns ;; - first check if ARG3 is zero, if so, add a pronoun ;; - then check if ARG3 exists, and ARG2 is a pronoun ;; if so, add arg2 and copy x1,x3 ;; - then check if ARG3 exists, and ARG1 is a pronoun ;; if so, add arg1 and copy x2,x3 ;; - then check if ARG2 exists and is a zero ;; if so, add a pronoun and copy ARG1 zero_arg3_123_ef := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #x2, ARG3 #z3 & u] >, OUTPUT [ RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #x2, ARG3 #x3], [ PRED pronoun_q_rel, ARG0 #x3, RSTR #h1 ], [ PRED pron_rel, LBL #h2, ARG0 #x3 & [PRONTYPE std_pron]] >, HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], FLAGS.EQUAL < #h, #z3 > ]. zero_arg2_123_ef := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #z2 & u, ARG3 #x3 & i] >, OUTPUT [ RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #x2, ARG3 #x3], [ PRED pronoun_q_rel, ARG0 #x2, RSTR #h1 ], [ PRED pron_rel, LBL #h2, ARG0 #x2 & [PRONTYPE std_pron]] >, HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], FLAGS [EQUAL < #h, #z2 >, SUBSUME < #x3 > ]]. zero_arg1_123_ef := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #z1 & u, ARG2 #x2 & i, ARG3 #x3 & i] >, OUTPUT [ RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #x2, ARG3 #x3], [ PRED pronoun_q_rel, ARG0 #x1, RSTR #h1 ], [ PRED pron_rel, LBL #h2, ARG0 #x1 & [PRONTYPE std_pron]] >, HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], FLAGS [EQUAL < #h, #z1 >, SUBSUME < #x2, #x3 > ]]. ;;; optionaly change ARG2 zero into i (unexpressed object) zero_arg2i_12_ef := optional_mtr & [ FILTER.RELS < [ARG0 #z2, RSTR #h2 ] >, INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e & e & [MARK test], ARG1 #x1, ARG2 #z2 & i] >, OUTPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e & e & [MARK complete], ARG1 #x1, ARG2 #z2] >, FLAGS [EQUAL < #h >, SUBSUME < #z2, #e > ]]. zero_arg2_12_ef := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e & e, ARG1 #x1, ARG2 #z2 & u] >, OUTPUT [ RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #x2], [ PRED pronoun_q_rel, ARG0 #x2, RSTR #h1 ], [ PRED pron_rel, LBL #h2, ARG0 #x2 & [PRONTYPE std_pron]] >, HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], FLAGS.EQUAL < #h, #z2, #e >]. zero_arg1_12_ef := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #z1 & u, ARG2 #x2 & i] >, OUTPUT [ RELS < [ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1, ARG2 #x2], [ PRED pronoun_q_rel, ARG0 #x1, RSTR #h1 ], [ PRED pron_rel, LBL #h2, ARG0 #x1 & [PRONTYPE std_pron]] >, HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], FLAGS [EQUAL < #h, #z1 >, SUBSUME < #x2 > ]]. ; ;;; For verbs like "say" and "think" whose ARG2 is a handle to the subordinate clause. -- eric 2008/06/09 ; zero_arg1_12h_ef := monotonic_mtr & ; [ INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e, ; ARG1 #z1 & u, ARG2 #x2 & h] >, ; OUTPUT [ RELS < [ PRED #pred, LBL #h, ; ARG0 #e, ARG1 #x1, ARG2 #x2], ; [ PRED pronoun_q_rel, ARG0 #x1, RSTR #h1 ], ; [ PRED pron_rel, LBL #h2, ; ARG0 #x1 & [PRONTYPE std_pron]] >, ; HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], ; FLAGS [EQUAL < #h, #z1 >, ; SUBSUME < #x2 > ]]. zero_arg1_1_ef := monotonic_mtr & [ FILTER.RELS < [PRED nominalization_rel, ARG1 #h ] >, INPUT.RELS < [ PRED #pred, LBL #h, ARG0 #e & e, ARG1 #z1 & u] >, OUTPUT [ RELS <[ PRED #pred, LBL #h, ARG0 #e, ARG1 #x1], [ PRED pronoun_q_rel, ARG0 #x1, RSTR #h1 ], [ PRED pron_rel, LBL #h2, ARG0 #x1 & [PRONTYPE std_pron]] >, HCONS < qeq & [ HARG #h1, LARG #h2 ] > ], FLAGS.EQUAL < #h, #e, #z1 >]. ;; ;; If is is a command, then change the subject to a 2nd person zero pronoun ;; pron_imp_arg1_ef := monotonic_mtr & [ CONTEXT.RELS < [ ARG0 #e & e & [ SF comm], ARG1 #x1 ] >, INPUT.RELS < [ PRED pron_rel, LBL #h2, ARG0 #x1 & [PRONTYPE std_pron]] >, OUTPUT.RELS < [ PRED pron_rel, LBL #h2, ARG0 #x1 & [PERS 2, PRONTYPE zero_pron]] >, FLAGS.EQUAL < #e > ]. ;; ;; If the a bound pronoun is unknown, then block it for now ;; FIXME -- need to link it when we add in the zero. ;; need to rethink the whole issue of zeros and 'u' block-bound-zero_ef := monotonic_mtr & [ INPUT.RELS < [ PRED identity_rel, ARG0 u & #u0 ] >, FLAGS [ EQUAL < #u0 >, BLOCK "unknown target for bound pronoun" ]]. ;; ;; if it is a question, and number is unspecified, change it to second person ;; - probably too strong, and I couldn't restrict it enough! ;pron_int_arg1_ef := monotonic_mtr & ;[ CONTEXT.RELS < [ PRED int_m_rel, ARG0 #e ], ; [ ARG0 #e, ARG1 #x1 ] >, ; INPUT.RELS < [ PRED pron_rel, LBL #h2, ; ARG0 #x1 & [PERS PERSON, PRONTYPE std_pron]] >, ; OUTPUT.RELS < [ PRED pron_rel, LBL #h2, ; ARG0 #x1 & [PERS 2, PRONTYPE std_pron]] >, ; FLAGS.EQUAL < #x1 >].