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

///////////////////
// History RULES //
///////////////////

// historic dates; year granularity; with explicit AD / BC hints
// EXAMPLE date_historic_1a-BCADhint: 190 a.C.                        (1- to 4-digit year)
// EXAMPLE date_historic_1b-BCADhint: comienzo del año 190 a.C.       (1- to 4-digit year)
// EXAMPLE date_historic_1c-BCADhint: a.C. 190                        (1- to 4-digit year)
// EXAMPLE date_historic_1d-BCADhint: comienzo del año a.C. 190       (1- to 4-digit year)
// EXAMPLE date_historic_1e-BCADhint: 190 - 185 a.C.                  (find 190 a.C.; 1- to 4-digit year)
// EXAMPLE date_historic_1f-BCADhint: comienzo del año 190 - 185 a.C. (comienzo del año 190 a.C.; 1- to 4-digit year)
RULENAME="date_historic_1a-BCADhint",EXTRACTION="(%reApproximate )?(\bd?el año |\blos años |\bel |año )?%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normYearBC(group(4))",NORM_MOD="%normApprox4Dates(group(2))"
RULENAME="date_historic_1b-BCADhint",EXTRACTION="(%rePartWords )(\bd?el año |\blos años |\bel |año )?%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normYearBC(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_1c-BCADhint",EXTRACTION="(%reApproximate )?(\bd?el año |\blos años |\bel |año )?%reYearPrefix %reYearBC",NORM_VALUE="%normYearPrefix(group(4))%normYearBC(group(5))",NORM_MOD="%normApprox4Dates(group(2))"
RULENAME="date_historic_1d-BCADhint",EXTRACTION="(%rePartWords )(\bd?el año |\blos años |\bel |año )?%reYearPrefix %reYearBC",NORM_VALUE="%normYearPrefix(group(4))%normYearBC(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_1e-BCADhint",EXTRACTION="(%reApproximate )?(\bd?el año |\blos años |\bel |año )?%reYearBC%reAndOrTo%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(7))%normYearBC(group(4))",NORM_MOD="%normApprox4Dates(group(2))",OFFSET="group(0)-group(4)"
RULENAME="date_historic_1f-BCADhint",EXTRACTION="(%rePartWords )(\bd?el año |\blos años |\bel |año )?%reYearBC%reAndOrTo%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(7))%normYearBC(group(4))",NORM_MOD="%normPartWords(group(2))",OFFSET="group(0)-group(4)"

// historic dates; year granularity
// EXAMPLE date_historic_2a: el año 190       (1- to 4-digit year)
// EXAMPLE date_historic_2b: el 190           (3-digit year)
// EXAMPLE date_historic_2c: los años 180-190 (find 190; 1- to 4-digit year)
RULENAME="date_historic_2a",EXTRACTION="(%reApproximate )?(\bel año |\blos años |año )%reYearBC",NORM_VALUE="%normYearBC(group(4))",NORM_MOD="%normApprox4Dates(group(2))"
RULENAME="date_historic_2b",EXTRACTION="(%reApproximate )?(\bel )(\d\d\d)",NORM_VALUE="%normYearBC(group(4))",NORM_MOD="%normApprox4Dates(group(2))"
RULENAME="date_historic_2c",EXTRACTION="(%reApproximate )?(\bel año |\blos años |año )%reYearBC%reAndOrTo%reYearBC",NORM_VALUE="%normYearBC(group(6))",NORM_MOD="%normApprox4Dates(group(2))",OFFSET="group(6)-group(6)"

// historic dates; month granularity
// EXAMPLE date_historic_3a-BCADhint: enero 190 a.C.           (1- to 4-digit year)
// EXAMPLE date_historic_3b:          enero 90                 (2-digit year)
// EXAMPLE date_historic_3c:          enero 190                (3-digit year)
// EXAMPLE date_historic_3d-BCADhint: enero y febrero 190 a.C. (find enero 190 a.C., 1- to 4-digit year)
RULENAME="date_historic_3a-BCADhint",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l mes de )?(%reMonthLong|%reMonthShort),?( del año | del? | )%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(9))%normYearBC(group(8))-%normMonth(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_3b",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l mes de )?(%reMonthLong|%reMonthShort),?( del año | del? | )%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(8)-%normMonth(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_3c",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l mes de )?(%reMonthLong|%reMonthShort),?( del año | del? | )(\d\d\d)",NORM_VALUE="%normYearBC(group(8))-%normMonth(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_3d-BCADhint",EXTRACTION="(%reMonthLong|%reMonthShort)%reAndOrTo(%reMonthLong|%reMonthShort),?( del año | del? | )%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(10))%normYearBC(group(9))-%normMonth(group(1))",OFFSET="group(1)-group(1)"

// historic dates; day granularity
// EXAMPLE date_historic_4a-BCADhint: 5 de enero 190 a.C. (1- to 4-digit year)
// EXAMPLE date_historic_4b:          5 de enero 90       (2-digit year)
// EXAMPLE date_historic_4c:          5 de enero 190      (3-digit year)
RULENAME="date_historic_4a-BCADhint",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?(días? )?(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)( del año | del? | )%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(14))%normYearBC(group(13))-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_4b",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?(días? )?(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)( del año | del? | )%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(13)-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_4c",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?(días? )?(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)( del año | del? | )(\d\d\d)",NORM_VALUE="%normYearBC(group(13))-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"

// historic dates; season granularity
// EXAMPLE date_historic_5a-BCADhint: verano 190 a.C.       (1- to 4-digit year)
// EXAMPLE date_historic_5b:          verano 190            (1- to 4-digit year)
RULENAME="date_historic_5a-BCADhint",EXTRACTION="(%rePartWords )?(\b[Dd]el |\b[Ll]a |\b[Ee]l |\b[Aa]l )?%reSeason( de los años | del año | del? | )%reYearBC(%reAndOrTo%reYearBC)? %reYearPrefix",NORM_VALUE="%normYearPrefix(group(10))%normYearBC(group(6))-%normSeason(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_historic_5b",EXTRACTION="(%rePartWords )?(\b[Dd]el |\b[Ll]a |\b[Ee]l |\b[Aa]l )?%reSeason( de los años | del año | del? | )%reYearBC",NORM_VALUE="%normYearBC(group(6))-%normSeason(group(4))",NORM_MOD="%normPartWords(group(2))"

// historic dates; century granularity
// EXAMPLE date_historic_6a-BCADhint: el siglo iv a.C.
RULENAME="date_historic_6a-BCADhint",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l) siglo %reDayRoman %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normDay(%SUM%(%normDay(group(4)),-1))",NORM_MOD="%normPartWords(group(2))"

// historic dates; year granularity
// EXAMPLE date_historic_7a: (en) 190 (3-digit year)
// EXAMPLE date_historic_7b: (190-195)  (find 190; 3-digit year)
// EXAMPLE date_historic_7c: (190-195)  (find 195; 3-digit year)
RULENAME="date_historic_7a",EXTRACTION="(\b[Ee]n) (\d\d\d)",NORM_VALUE="%normYearBC(group(2))",OFFSET="group(2)-group(2)"
RULENAME="date_historic_7b",EXTRACTION="\((\d\d\d)%reAndOrTo(\d\d\d)\)",NORM_VALUE="%normYearBC(group(1))",OFFSET="group(1)-group(1)"
RULENAME="date_historic_7c",EXTRACTION="\((\d\d\d)%reAndOrTo(\d\d\d)\)",NORM_VALUE="%normYearBC(group(3))",OFFSET="group(3)-group(3)"

// NEGATIVE RULES --> in duration file

////////////////////
// POSITIVE RULES //
////////////////////

/////////////////////
// Day Granularity //
/////////////////////
// date_r0 (Timestamp style)
// EXAMPLE r0a_1: 29-01-2010
// EXAMPLE r0b_1: 29-10-99
// EXAMPLE r0b_2: 29-XI-99
// EXAMPLE r0c_1: 29/06/1999
// EXAMPLE r0c_2: 29 VI 1999
// EXAMPLE r0d_1: 29/06/99
// EXAMPLE r0d_2: 29 VI 99
// EXAMPLE r0e_1: 16-4 (AP) (find 16-4)
RULENAME="date_r0a",EXTRACTION="(%reDayNumber-%reMonthNumber-%reYear4Digit)",NORM_VALUE="group(4)-%normMonth(group(3))-group(2)"
RULENAME="date_r0b",EXTRACTION="(%reDayNumber-%reMonthNumber-%reYear2Digit)",NORM_VALUE="UNDEF-centurygroup(4)-%normMonth(group(3))-group(2)"
RULENAME="date_r0c",EXTRACTION="%reDayNumber(/| )%reMonthNumber(/| )%reYear4Digit",NORM_VALUE="group(5)-%normMonth(group(3))-%normDay(group(1))"
RULENAME="date_r0d",EXTRACTION="%reDayNumber(/| )%reMonthNumber(/| )%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(5)-%normMonth(group(3))-%normDay(group(1))"
RULENAME="date_r0e",EXTRACTION="%reDayNumber-%reMonthNumber( \(.*?\))",NORM_VALUE="UNDEF-year-%normMonth(group(2))-%normDay(group(1))",OFFSET="group(1)-group(2)"

// date_r1
// EXAMPLE r1a_1: el 30 de abril de 1999
// EXAMPLE r1a_2: el cinco de abril de 1999
// EXAMPLE r1b_2: 15 y 16 de abril de 1999 (find: 15 abril 1999)
// EXAMPLE r1c_1: enero 5 de 2012
RULENAME="date_r1a",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?(días? )?(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)( del? | )%reYear4Digit(,? %reWeekday)?",NORM_VALUE="group(13)-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r1b",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l |[Ll][oa]s )?(días? )?(%reDayNumber|%reDayWordTh|%reDayWord)%reAndOrTo(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)( del? | )%reYear4Digit",NORM_VALUE="group(18)-%normMonth(group(14))-%normDay(group(5))",OFFSET="group(5)-group(5)",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r1c",EXTRACTION="(%rePartWords )?(%reMonthLong|%reMonthShort) (%reDayNumber|%reDayWordTh|%reDayWord)( del? | )%reYear4Digit",NORM_VALUE="group(11)-%normMonth(group(3))-%normDay(group(6))",NORM_MOD="%normPartWords(group(2))"

// date_r2
// EXAMPLE r2a_1: el 5 de abril
// EXAMPLE r2a_2: el primero de abril
// EXAMPLE r2b_1: el 5 o 6 de abril (find: abril 5)
// EXAMPLE r2c_1: el día 5 y el día 6 de abril (find: abril 5)
// EXAMPLE r2d_1: El día cinco
RULENAME="date_r2a",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?(días? )?(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))" 
RULENAME="date_r2b",EXTRACTION="(%reDayNumber|%reDayWordTh|%reDayWord)%reAndOrTo(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(10))-%normDay(group(1))",OFFSET="group(1)-group(1)"
RULENAME="date_r2c",EXTRACTION="([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l |[Ll][oa]s )(días? )?(%reDayNumber|%reDayWordTh|%reDayWord)%reAndOrTo([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l |[Ll][oa]s )(días? )?(%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(14))-%normDay(group(3))",OFFSET="group(1)-group(3)"
RULENAME="date_r2d",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l? día) (%reDayNumber|%reDayWordTh|%reDayWord)",NORM_VALUE="UNDEF-this-month-%normDay(group(4))",NORM_MOD="%normPartWords(group(2))"

// date_r3
// EXAMPLE r3a_1: el lunes tres de abril del 2010
// EXAMPLE r3a_1: el lunes tres de abril
RULENAME="date_r3a",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?%reWeekday (%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)( del? | )%reYear4Digit",NORM_VALUE="group(13)-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r3b",EXTRACTION="(%rePartWords )?([Dd][Ee]l? |[Ee]l |[Ll]a |[Aa]l )?%reWeekday (%reDayNumber|%reDayWordTh|%reDayWord) de (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(9))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"

// date_r4
// EXAMPLE r4a_1: hoy
// EXAMPLE r4a_2: hoy mismo
// EXAMPLE r4b_1: al día de hoy
// EXAMPLE r4c_1: hoy, lunes
// EXAMPLE r4d_1: el lunes
RULENAME="date_r4a",EXTRACTION="%reDateWord( mism[oa])?",NORM_VALUE="%normDateWord(group(1))"
RULENAME="date_r4b",EXTRACTION="([Aa]l día de )%reDateWord( mism[oa])?",NORM_VALUE="%normDateWord(group(2))"
RULENAME="date_r4c",EXTRACTION="%reDateWord(,)? %reWeekday",NORM_VALUE="%normDateWord(group(1))"
RULENAME="date_r4d",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reWeekday",NORM_VALUE="UNDEF-day-%normWeekday(group(4))",NORM_MOD="%normPartWords(group(2))"


//////////////////////
// WEEK GRANULARITY //
//////////////////////
// date_r5
// EXAMPLE r5a_1: este fin de semana
RULENAME="date_r5a",EXTRACTION="([Dd]el|[Ee]l|[Ee]ste) fin de semana",NORM_VALUE="UNDEF-this-week-WE"


///////////////////////
// MONTH GRANULARITY //
///////////////////////
//date_r6
// EXAMPLE r6a_1: abril del 2001
// EXAMPLE r6a_2: finales del abril del 2001
// EXAMPLE r6b_1: abril y mayo del 2011 (find abril 2001)
RULENAME="date_r6a",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l mes de )?(%reMonthLong|%reMonthShort)( del año | del? | )%reYear4Digit",NORM_VALUE="group(8)-%normMonth(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r6b",EXTRACTION="(%reMonthLong|%reMonthShort)%reAndOrTo(%reMonthLong|%reMonthShort)( del año | del? | )%reYear4Digit",NORM_VALUE="group(9)-%normMonth(group(1))",OFFSET="group(1)-group(1)"

// date_r7
// EXAMPLE r7a_1: abril del año anterior
// EXAMPLE r7a_2: mayo del año pasado
// EXAMPLE r7b_1: abril del próximo año
RULENAME="date_r7a",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l mes de |[Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reMonthLong (del año) %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(6))-year-%normMonth(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r7b",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l mes de |[Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reMonthLong (del) %reThisNextLast año",NORM_VALUE="UNDEF-%normThisNextLast(group(6))-year-%normMonth(group(4))",NORM_MOD="%normPartWords(group(2))"

////////////////////////
// SEASON GRANULARITY //
////////////////////////
// date_r8
// EXAMPLE r8a_1: invierno de 1999
// EXAMPLE r8b_1: invierno
// EXAMPLE r8c_1: todo el verano pasado
RULENAME="date_r8a",EXTRACTION="(%rePartWords )?([Dd]el |[Ll]a |[Ee]l |[Aa]l )?%reSeason( del? | )%reYear4Digit",NORM_VALUE="group(6)-%normSeason(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r8b",EXTRACTION="(%rePartWords )?([Dd]el |[Ll]a |[Ee]l |[Aa]l |[Ee]ste )?%reSeason",NORM_VALUE="UNDEF-year-%normSeason(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r8c",EXTRACTION="([Tt]odo )?([Dd]el |[Ll]a |[Ee]l |[Aa]l |[Ee]ste )?%reSeason %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-year-%normSeason(group(3))"


//////////////////////////////
// PART-OF-YEAR GRANULARITY //
//////////////////////////////
// date_r9
// EXAMPLE r9a_1: el último trimestre de 1999
// EXAMPLE r9b_1: el último trimestre
RULENAME="date_r9a",EXTRACTION="([Ee]l )?%rePartOfYear( del? | )%reYear4Digit",NORM_VALUE="group(4)-%normPartOfYear(group(2))"
RULENAME="date_r9b",EXTRACTION="([Ee]l )?%rePartOfYear",NORM_VALUE="UNDEF-year-%normPartOfYear(group(2))"

// date_r10
// EXAMPLE r10a_1: el primer trimestre del presente año
// EXAMPLE r10b_1: el primer trimestre del año pasado
RULENAME="date_r10a",EXTRACTION="([Ee]l )?%rePartOfYear( del? | )%reThisNextLast año",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-year-%normPartOfYear(group(2))"
RULENAME="date_r10b",EXTRACTION="([Ee]l )?%rePartOfYear( del? | )año %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-year-%normPartOfYear(group(2))"


//////////////////////
// YEAR GRANULARITY //
//////////////////////
// date_r11
// EXAMPLE r11a_1: 2009
// EXAMPLE r11b_1: fines de 1999
// EXAMPLE r11c_1: 1850-58 (find: 1858)
// EXAMPLE r11d_1: mil doscientos noventa y cinco
// EXAMPLE r11e_1: mil quinientos noventa y cinco
// EXAMPLE r11f_1: mil ciento noventa y cinco
// EXAMPLE r11g_1: mil noventa y cinco
RULENAME="date_r11a",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ee]ste )?(mism[oa] )?(año )?%reYear4Digit",NORM_VALUE="group(6)",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r11b",EXTRACTION="([Dd]el |[Ee]l |[Ee]ste )?%rePartWords ([Dd]e )?([Dd]el |[Ee]l |[Ee]ste |[Ee]se )?(año )?%reYear4Digit",NORM_VALUE="group(6)",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r11c",EXTRACTION="%reYear4Digit(-|–| [oay] )%reYear2Digit",NORM_VALUE="%SUBSTRING%(group(1),0,2)group(3)",OFFSET="group(3)-group(3)"
RULENAME="date_r11d",EXTRACTION="mil %reNumWord1D(cientos) %reNumWord2D",NORM_VALUE="1%normDurationNumber(group(1))%normDurationNumber(group(3))"
RULENAME="date_r11e",EXTRACTION="mil quinientos %reNumWord2D",NORM_VALUE="15%normDurationNumber(group(1))"
RULENAME="date_r11f",EXTRACTION="mil ciento %reNumWord2D",NORM_VALUE="11%normDurationNumber(group(1))"
RULENAME="date_r11g",EXTRACTION="mil %reNumWord2D",NORM_VALUE="10%normDurationNumber(group(1))"


////////////////////////
// DECADE GRANULARITY //
////////////////////////
// date_r12
// EXAMPLE r12a_1: la década de los 1890 
// EXAMPLE r12b_1: la década de los años 90
// EXAMPLE r12b_2: las décadas de los años 80 y 90 (find: 90)
// EXAMPLE r12c_1: los años noventa
// EXAMPLE r12c_2: finales de los años noventa
RULENAME="date_r12a",EXTRACTION="([Ll]a |[Ee]l |[Ll][oa]s )(décadas?|decenios?) de los %reYear4Digit",NORM_VALUE="%SUBSTRING%(group(3),0,3)"
RULENAME="date_r12b1",EXTRACTION="([Ll]a |[Ee]l |[Ll][oa]s )(décadas?|decenios?) de los %reDecadeWord",NORM_VALUE="19%normDecadeWord(group(3))"
RULENAME="date_r12b2",EXTRACTION="([Ll]a |[Ee]l |[Ll][oa]s )(décadas?|decenios?) de los %reDecadeWord y (([1-9])0)",NORM_VALUE="19group(5)",OFFSET="group(4)-group(4)"
RULENAME="date_r12c",EXTRACTION="([Ee]l |[Ll]a |[Ll][oa]s )?(%rePartWords )?([Ll]os) (años )?%reDecadeWord",NORM_VALUE="19%normDecadeWord(group(6))",NORM_MOD="%normPartWords(group(3))"


/////////////////////////
// CENTURY GRANULARITY //
/////////////////////////
// date_r13
// EXAMPLE r13a_1: el siglo XXI
RULENAME="date_r13a",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l) siglo %reDayRoman",NORM_VALUE="%normDay(%SUM%(%normDay(group(4)),-1))",NORM_MOD="%normPartWords(group(2))"



///////////////////////////////////
// GRANULARITY INDEPENDENT RULES //
///////////////////////////////////
// date_r14
// EXAMPLE r14a_1: abril
// EXAMPLE r14a_2: finales de septiembre
RULENAME="date_r14a",EXTRACTION="(%rePartWords )?([Dd]el |[Ll]a |[Ee]l |[Aa]l )?(mes de )?(%reMonthLong)",NORM_VALUE="UNDEF-year-%normMonth(group(5))",NORM_MOD="%normPartWords(group(2))"

// date_r15
// EXAMPLE r15a_1: la última semana
// EXAMPLE r15b_1: la semana pasada
// EXAMPLE r15c_1: el pasado octubre
// EXAMPLE r15d_1: septiembre próximo
// EXAMPLE r15e_1: El pasado 6 de noviembre
// EXAMPLE r15f_1: el próximo lunes
// EXAMPLE r15g_1: del viernes pasado
// EXAMPLE r15h_1: la próxima primavera
// EXAMPLE r15i_1: la primavera pasada
// EXAMPLE r15j_1: ese mismo día (using UNDEF-REF)
// EXAMPLE r15k_1: al 28 de abril próximos
// EXAMPLE r15l_1: el día
// EXAMPLE r15m_1: principios de siglo
RULENAME="date_r15a",EXTRACTION="([Dd]el |[Ee]l |[Ll]a |[Aa]l )?(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reThisNextLast %reUnit",NORM_VALUE="UNDEF-%normThisNextLast(group(5))-%normUnit(group(6))",NORM_MOD="%normPartWords(group(3))"
RULENAME="date_r15b",EXTRACTION="([Dd]el |[Ee]l |[Ll]a |[Aa]l )?(%rePartWords )?%reUnit %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(5))-%normUnit(group(4))",NORM_MOD="%normPartWords(group(3))",NORM_MOD="%normPartWords(group(3))"
RULENAME="date_r15c",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reThisNextLast (mes de )?%reMonthLong",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%normMonthToEnglish(group(6))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15d1",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?(mes de )?%reMonthLong %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(6))-%normMonthToEnglish(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15d2",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?(mes de )?%reMonthLong del %reThisNextLast año",NORM_VALUE="UNDEF-%normThisNextLast(group(6))-%normMonthToEnglish(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15e",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reThisNextLast %reDayNumber de %reMonthLong",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%normMonthToEnglish(group(6))-%normDay(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15f",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reThisNextLast %reWeekday",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%normWeekday(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15g",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reWeekday %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(5))-%normWeekday(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15h",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reThisNextLast %reSeason",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%normSeason(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15i1",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reSeason %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(5))-%normSeason(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15i2",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%reSeason del %reThisNextLast año",NORM_VALUE="UNDEF-%normThisNextLast(group(5))-year-%normSeason(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15j1",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l|[Ll]a|[Ee]st?e) mism[oa] %reUnit",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-PLUS-0",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15j2",EXTRACTION="(%rePartWords )?([Dd]?[Ee]l|[Ll]a|[Ee]st?e) %reUnit mism[oa]",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-PLUS-0",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15k",EXTRACTION="(%rePartWords )?([Dd]el |[Ee]l |[Ll]a |[Aa]l )?(%reDayNumber) del? %reMonthLong %reThisNextLast",NORM_VALUE="UNDEF-%normThisNextLast(group(7))-%normMonthToEnglish(group(6))-%normDay(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15l",EXTRACTION="(%rePartWords )?([Dd]el|[Ee]l|[Ll]a|[Aa]l) %reUnit",NORM_VALUE="UNDEF-this-%normUnit(group(4))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r15m",EXTRACTION="([Dd]el |[Ee]l |[Ll]a |[Aa]l )?%rePartWords %reUnit",NORM_VALUE="UNDEF-this-%normUnit(group(3))",NORM_MOD="%normPartWords(group(2))"

// date_r16 (después) --> not annotated like this in TempEval-3
// EXAMPLE r16a_1: dos meses después
// EXAMPLE r16b_1: 2 meses después
// EXAMPLE r16c_1: un mes después
//RULENAME="date_r16a",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnit|minutos|horas) después",NORM_VALUE="UNDEF-this-%normUnit(group(6))-PLUS-%normDurationNumber(group(3))",NORM_MOD="%normApprox4Dates(group(2))"
//RULENAME="date_r16b",EXTRACTION="(%reApproximate )?([\d]+) (%reUnit|minutos|horas) después",NORM_VALUE="UNDEF-this-%normUnit(group(4))-PLUS-group(3)",NORM_MOD="%normApprox4Dates(group(2))"
//RULENAME="date_r16c",EXTRACTION="(%reApproximate )?([Uu]na?) (%reUnit|minutos|horas) después",NORM_VALUE="UNDEF-this-%normUnit(group(4))-PLUS-1",NORM_MOD="%normApprox4Dates(group(2))"

// date_r17 (atrás) --> not annotated like this in TempEval-3
// EXAMPLE r17a_1: dos meses atrás
// EXAMPLE r17b_1: 2 meses atrás
// EXAMPLE r17c_1: un mes atrás
//RULENAME="date_r17a",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnit|minutos|horas) atrás",NORM_VALUE="UNDEF-this-%normUnit(group(6))-MINUS-%normDurationNumber(group(3))",NORM_MOD="%normApprox4Dates(group(2))"
//RULENAME="date_r17b",EXTRACTION="(%reApproximate )?([\d]+) (%reUnit|minutos|horas) atrás",NORM_VALUE="UNDEF-this-%normUnit(group(4))-MINUS-group(3)",NORM_MOD="%normApprox4Dates(group(2))"
//RULENAME="date_r17c",EXTRACTION="(%reApproximate )?([Uu]na?) (%reUnit|minutos|horas) atrás",NORM_VALUE="UNDEF-this-%normUnit(group(4))-MINUS-1",NORM_MOD="%normApprox4Dates(group(2))"

// date_r18 (hace)
RULENAME="date_r18a",EXTRACTION="(([Hh]ace) )(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?(%reNumWord2D|%reNumWord1D)( |-)%reUnit",NORM_VALUE="UNDEF-this-%normUnit(group(12))-MINUS-%normDurationNumber(group(8))",NORM_MOD="%normApprox4Dates(group(4))"
RULENAME="date_r18b",EXTRACTION="(([Hh]ace) )(%reApproximate )?([Ll][oa]s )(%reNumWord2D|%reNumWord1D) (%reThisNextLast )?%reUnit",NORM_VALUE="UNDEF-this-%normUnit(group(11))-MINUS-%normDurationNumber(group(6))",NORM_MOD="%normApprox4Dates(group(4))"
// RULENAME="date_r18c",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="%normApprox4Dates(group(4))"
RULENAME="date_r18d",EXTRACTION="(([Hh]ace) )(%reApproximate )?([Ll][oa]s )?(%reThisNextLast )?([\d]+)( |-)%reUnit",NORM_VALUE="UNDEF-this-%normUnit(group(10))-MINUS-group(8)",NORM_MOD="%normApprox4Dates(group(4))"
//RULENAME="date_r18e",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="%normApprox4Dates(group(4))"
//RULENAME="date_r18f",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="%normApprox4Dates(group(4))"



////////////////////
// NEGATIVE RULES //
////////////////////
RULENAME="date_r1a_negative",EXTRACTION="[Aa]hora que",NORM_VALUE="REMOVE"

// EXAMPLE r3a_negative_1: 2000 soldiers (four digit number followed by a plural noun)
// EXAMPLE r3b_negative_1: 2000 dead soldiers (four digit number followed by an adjective and a plural noun)
// EXAMPLE r3c_negative_1: 2000 kilometer (four digit number followed a non-temporal unit)
RULENAME="date_r3a_negative",EXTRACTION="%reYear4Digit (\b\S+s\b)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NC:"
RULENAME="date_r3b_negative",EXTRACTION="%reYear4Digit (\b\S+s\b) ",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NP:"
RULENAME="date_r3c_negative",EXTRACTION="%reYear4Digit (\b\S+s\b) ",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NMEA:"
RULENAME="date_r3d_negative",EXTRACTION="%reYear4Digit ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):UMMX:"
RULENAME="date_r3e_negative",EXTRACTION="%reYear4Digit ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):ACRNM:"
// ADDED in LREC context
RULENAME="date_r3f_negative",EXTRACTION="%reYear4Digit ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):CARD:" 
RULENAME="date_r3g_negative",EXTRACTION="([Tt]an pronto|[Qq]ue de pronto)",NORM_VALUE="REMOVE"

// EXAMPLE r4a_negative: W2000.1920
RULENAME="date_r4a_negative",EXTRACTION="[\S]+%reYear4Digit\.%reYear4Digit",NORM_VALUE="REMOVE"

