// author: Jannik Strötgen
// email:  stroetgen@uni-hd.de
// date:   2012-07-17
// This file contains rules for the temporal expressions of the type duration: durationrules
// RULENAME="",EXTRACTION="",NORM_VALUE=""(,OFFSET="")?(,POS_CONSTRAINT="")?(,NORM_MOD="")?(,NORM_QUANT="")?(,NORM_FREQ="")?

// NEGATIVE RULES have to be located here
RULENAME="date_lrec0a_negative",EXTRACTION="[0]+",NORM_VALUE="REMOVE"
RULENAME="date_lrec0b_negative",EXTRACTION="(Junio|Julio) ([A-Z][\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NP:"

RULENAME="date_lrec0c_negative",EXTRACTION="%reYearBC (\b\S+s\b)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NC:"
RULENAME="date_lrec0d_negative",EXTRACTION="%reYearBC (\b\S+s\b) ",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NP:"
RULENAME="date_lrec0e_negative",EXTRACTION="%reYearBC (\b\S+s\b) ",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NMEA:"
RULENAME="date_lrec0f_negative",EXTRACTION="%reYearBC ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):UMMX:"
RULENAME="date_lrec0g_negative",EXTRACTION="%reYearBC ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):ACRNM:"
RULENAME="date_lrec0h_negative",EXTRACTION="%reYearBC ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):CARD:"



////////////////////////
// PRECISE UNIT RULES //
////////////////////////
// duration_r1
// EXAMPLE r1a1-1: los últimos dos años
// EXAMPLE r1a2-1: los dos últimos años
// EXAMPLE r1b-1: dos años y tres meses
// EXAMPLE r1c-1: 18 meses
// EXAMPLE r1d-1: 18 años y 3 meses
// EXAMPLE r1e-1: tres años y 2 meses
RULENAME="duration_r1a1",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit",NORM_VALUE="P%normDurationNumber(group(6))%normUnit4Duration(group(10))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r1a2",EXTRACTION="(%reApproximate )?([Ll][oa]s )(%reNumWord2D|%reNumWord1D) (%reThisNextLast )?%reUnit",NORM_VALUE="P%normDurationNumber(group(4))%normUnit4Duration(group(9))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r1b",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit y (%reNumWord2D|%reNumWord1D)( |-)%reUnit",NORM_VALUE="P%normDurationNumber(group(6))%normUnit4Duration(group(10))%normDurationNumber(group(11))%normUnit4Duration(group(15))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r1c",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)%reUnit",NORM_VALUE="Pgroup(6)%normUnit4Duration(group(8))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r1d",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)%reUnit y ([\d]+)( |-)%reUnit",NORM_VALUE="Pgroup(6)%normUnit4Duration(group(8))group(9)%normUnit4Duration(group(11))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r1e",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit y ([\d]+)( |-)%reUnit",NORM_VALUE="P%normDurationNumber(group(6))%normUnit4Duration(group(10))group(11)%normUnit4Duration(group(13))",NORM_MOD="%normApprox4Durations(group(2))"

// REMOVE "hace" from durations
// RULENAME="duration_r1a1",EXTRACTION="(([Hh]ace) )?(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit",NORM_VALUE="P%normDurationNumber(group(8))%normUnit4Duration(group(12))",NORM_MOD="%normApprox4Durations(group(4))"
// RULENAME="duration_r1a2",EXTRACTION="(([Hh]ace) )?(%reApproximate )?([Ll][oa]s )(%reNumWord2D|%reNumWord1D) (%reThisNextLast )?%reUnit",NORM_VALUE="P%normDurationNumber(group(6))%normUnit4Duration(group(11))",NORM_MOD="%normApprox4Durations(group(4))"
// RULENAME="duration_r1b",EXTRACTION="(([Hh]ace) )?(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit y (%reNumWord2D|%reNumWord1D)( |-)%reUnit",NORM_VALUE="P%normDurationNumber(group(8))%normUnit4Duration(group(12))%normDurationNumber(group(13))%normUnit4Duration(group(17))",NORM_MOD="%normApprox4Durations(group(4))"
// RULENAME="duration_r1c",EXTRACTION="(([Hh]ace) )?(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)%reUnit",NORM_VALUE="Pgroup(8)%normUnit4Duration(group(10))",NORM_MOD="%normApprox4Durations(group(4))"
// RULENAME="duration_r1d",EXTRACTION="(([Hh]ace) )?(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)%reUnit y ([\d]+)( |-)%reUnit",NORM_VALUE="Pgroup(8)%normUnit4Duration(group(10))group(11)%normUnit4Duration(group(13))",NORM_MOD="%normApprox4Durations(group(4))"
// RULENAME="duration_r1e",EXTRACTION="(([Hh]ace) )?(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit y ([\d]+)( |-)%reUnit",NORM_VALUE="P%normDurationNumber(group(8))%normUnit4Duration(group(12))group(13)%normUnit4Duration(group(15))",NORM_MOD="%normApprox4Durations(group(4))"


// duration_r2
// EXAMPLE r2a-1: trece horas
// EXAMPLE r2b-1: dos horas y tres minutos
// EXAMPLE r2c-1: 30 horas
// EXAMPLE r2d-1: 30 horas y 50 minutos
// EXAMPLE r2e-1: dos horas y 30 miuntos
RULENAME="duration_r2a",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)(minutos?|horas?)",NORM_VALUE="PT%normDurationNumber(group(6))%normUnit4Duration(group(10))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r2b",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)(minutos?|horas?) y (%reNumWord2D|%reNumWord1D)( |-)(minutos?|horas?)",NORM_VALUE="PT%normDurationNumber(group(6))%normUnit4Duration(group(10))normDurationNumber(group(11))%normUnit4Duration(group(15))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r2c",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)(minutos?|horas?)",NORM_VALUE="PTgroup(6)%normUnit4Duration(group(8))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r2d",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)(minutos?|horas?) y ([\d]+)( |-)(minutos?|horas?)",NORM_VALUE="PTgroup(6)%normUnit4Duration(group(8))group(9)%normUnit4Duration(group(11))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r2e",EXTRACTION="(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)(minutos?|horas?) y ([\d]+)( |-)(minutos?|horas?)",NORM_VALUE="PT%normDurationNumber(group(6))%normUnit4Duration(group(10))group(11)%normUnit4Duration(group(13))",NORM_MOD="%normApprox4Durations(group(2))"

//////////////////////
// FUZZY UNIT RULES //
//////////////////////
// duration_r3
// EXAMPLE r3a-1: varios meses
// EXAMPLE r3b-1: las próximas horas
RULENAME="duration_r3a",EXTRACTION="(%reApproximate |[Hh]ace )?([Ll][oa]s )?([Mm]uch[oa]s|[Vv]ari[oa]s|[Hh]ace|[Úú]ltim[oa]s|[Pp]róxim[oa]s|[Uu]n[oa]s|[Pp]oc[oa]s|[Aa]lgun[oa]s) %reUnit",NORM_VALUE="PX%normUnit4Duration(group(5))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r3b",EXTRACTION="(%reApproximate |[Hh]ace )?([Ll][oa]s )?([Mm]uch[oa]s|[Vv]ari[oa]s|[Hh]ace|[Úú]ltim[oa]s|[Pp]róxim[oa]s|[Uu]n[oa]s|[Pp]oc[oa]s|[Aa]lgun[oa]s) (minutos?|horas?)",NORM_VALUE="PTX%normUnit4Duration(group(5))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r3c",EXTRACTION="([Aa]ños)",NORM_VALUE="PX%normUnit4Duration(group(1))"

// duration_r4
// EXAMPLE r4a-1: dos a tres años
// EXAMPLE r4b-1: dos a tres horas
// EXAMPLE r4c-1: 100 a 200 años
// EXAMPLE r4d-1: 100 a 200 horas
RULENAME="duration_r4a",EXTRACTION="(%reNumWord2D|%reNumWord1D) (a|o) (%reNumWord2D|%reNumWord1D|([\d]+)) %reUnit",NORM_VALUE="P%normDurationNumber(group(1))%normUnit4Duration(group(9))",OFFSET="group(1)-group(1)"
RULENAME="duration_r4b",EXTRACTION="(%reNumWord2D|%reNumWord1D) (a|o) (%reNumWord2D|%reNumWord1D|([\d]+)) (minutos?|horas?)",NORM_VALUE="P%normDurationNumber(group(1))%normUnit4Duration(group(9))",OFFSET="group(1)-group(1)"
RULENAME="duration_r4c",EXTRACTION="([\d]+) (a|o) (%reNumWord2D|%reNumWord1D|([\d]+)) %reUnit",NORM_VALUE="Pgroup(1)%normUnit4Duration(group(7))",OFFSET="group(1)-group(1)"
RULENAME="duration_r4d",EXTRACTION="([\d]+) (a|o) (%reNumWord2D|%reNumWord1D|([\d]+)) (minutos?|horas?)",NORM_VALUE="Pgroup(1)%normUnit4Duration(group(7))",OFFSET="group(1)-group(1)"

// duration_r5
// EXAMPLE r5a: toda la semana
RULENAME="duration_r5a",EXTRACTION="[Tt]od[oa] (el|la) %reUnit",NORM_VALUE="P1%normUnit4Duration(group(2))"

////////////////////////////
// RANDOM ADJECTIVE RULES //
////////////////////////////
// duration_r6
// EXAMPLE r6a-1: un mismo año
// EXAMPLE r6b-1: la misma hora
// EXAMPLE r6c-1: los últimos meses
// EXAMPLE r6d-1: las próximas horas
RULENAME="duration_r6a",EXTRACTION="([Uu]n[oa]?) ((\S)+) %reUnit",NORM_VALUE="P1%normUnit4Duration(group(4))",POS_CONSTRAINT="group(2):ADJ:"
RULENAME="duration_r6b",EXTRACTION="([Uu]n[oa]?) ((\S)+) (hora|minuto)",NORM_VALUE="PT1%normUnit4Duration(group(4))",POS_CONSTRAINT="group(2):ADJ:"
RULENAME="duration_r6c",EXTRACTION="([Ll][oa]s) ((\S)+) %reUnit",NORM_VALUE="PX%normUnit4Duration(group(4))",POS_CONSTRAINT="group(2):ADJ:"
RULENAME="duration_r6d",EXTRACTION="([Ll][oa]s) ((\S)+) (horas|minutos)",NORM_VALUE="PTX%normUnit4Duration(group(4))",POS_CONSTRAINT="group(2):ADJ:"
RULENAME="duration_r6a2",EXTRACTION="([Uu]n[oa]?) %reDayWordTh %reUnit",NORM_VALUE="P1%normUnit4Duration(group(3))"
RULENAME="duration_r6b2",EXTRACTION="([Uu]n[oa]?) %reDayWordTh (hora|minuto)",NORM_VALUE="PT1%normUnit4Duration(group(3))"
RULENAME="duration_r6c2",EXTRACTION="([Ll][oa]s) %reDayWordTh %reUnit",NORM_VALUE="PX%normUnit4Duration(group(3))"
RULENAME="duration_r6d2",EXTRACTION="([Ll][oa]s) %reDayWordTh (horas|minutos)",NORM_VALUE="PTX%normUnit4Duration(group(3))"
