// author: Matje van de Camp
// email:  m.m.v.d.camp@tilburguniversity.edu
// date:   2011-09-15
// **********************
// The French resources were extended to also cover temporal expressions referring to historic dates
// Author: Jannik Strötgen
// Date:   2014-03-14
// for details, see: Strötgen et al. (2014): Extending HeidelTime for Temporal Expressions Referring to Historic Dates. LREC'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 v. Chr.    (1- to 4-digit year)
// EXAMPLE date_historic_1b-BCADhint: v. Chr. 190    (1- to 4-digit year)
// EXAMPLE date_historic_1c-BCADhint: 190-185 v.Chr. (find "190 v. Chr."; 1- to 4-digit year)
RULENAME="date_historic_1a-BCADhint",EXTRACTION="(%reApproximate |[Hh]et jaar |\b[Jj]aar )?%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(4))%normYearBC(group(3))"
RULENAME="date_historic_1b-BCADhint",EXTRACTION="(%reApproximate |[Hh]et jaar |\b[Jj]aar )?%reYearPrefix %reYearBC",NORM_VALUE="%normYearPrefix(group(3))%normYearBC(group(4))"
RULENAME="date_historic_1c-BCADhint",EXTRACTION="(%reApproximate |[Hh]et jaar |\b[Jj]aar )?%reYearBC%reAndOrTo%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(6))%normYearBC(group(3))",OFFSET="group(0)-group(3)"

// historic dates; month granularity
// EXAMPLE date_historic_2a-BCADhint: januari 190 v. Chr.      (1- to 4-digit year)
// EXAMPLE date_historic_2b:          januari van het jaar 190 (1- to 4-digit year)
RULENAME="date_historic_2a-BCADhint",EXTRACTION="(%reMonthLong|%reMonthShort) (van het jaar )?%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(6))%normYearBC(group(5))-%normMonth(group(1))"
RULENAME="date_historic_2b",EXTRACTION="(%reMonthLong|%reMonthShort) (van het jaar )%reYearBC",NORM_VALUE="%normYearBC(group(5))-%normMonth(group(1))"

// historic dates; day granularity
// EXAMPLE date_historic_3a-BCADhint: 12 januari 190 v. Chr. (1- to 4-digit year)
RULENAME="date_historic_3a-BCADhint",EXTRACTION="(%reWeekday ,?)?(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(10))%normYearBC(group(9))-%normMonth(group(6))-%normDay(group(3))"

// historic dates; season granularity
// EXAMPLE date_historic_4a-BCADhint: zomer 190 v. Chr.      (1- to 4-digit year)
// EXAMPLE date_historic_4b-BCADhint: winter 190/189 v. Chr. (1- to 4-digit year)
RULENAME="date_historic_4a-BCADhint",EXTRACTION="(\bde )?%reSeason( van | )%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normYearBC(group(4))-%normSeason(group(2))"
RULENAME="date_historic_4b-BCADhint",EXTRACTION="(\bde )?%reSeason( van | )%reYearBC%reAndOrTo%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(7))%normYearBC(group(4))-%normSeason(group(2))"

// historic dates; year granularity
// EXAMPLE date_historic_5a: (in) 190 (3-digit year)
// EXAMPLE date_historic_5b: jaar 190 (3-digit year)
// EXAMPLE date_historic_5c: (in) 90  (2-digit year)
// EXAMPLE date_historic_5d: jaar 90  (2-digit year)
RULENAME="date_historic_5a",EXTRACTION="(\b[Ii]n|\b[Ss]inds) (\d\d\d)",NORM_VALUE="%normYearBC(group(2))",OFFSET="group(2)-group(2)"
RULENAME="date_historic_5b",EXTRACTION="(\b[Jj]aar) (\d\d\d)",NORM_VALUE="%normYearBC(group(2))"
RULENAME="date_historic_5c",EXTRACTION="(\b[Ii]n|\b[Ss]inds) (\d\d)",NORM_VALUE="%normYearBC(group(2))",OFFSET="group(2)-group(2)"
RULENAME="date_historic_5d",EXTRACTION="(\b[Jj]aar) (\d\d)",NORM_VALUE="%normYearBC(group(2))"

// historic dates; century granularity
// EXAMPLE date_historic_6a-BCADhint: 3e eeuw v. Chr.
RULENAME="date_historic_6a-BCADhint",EXTRACTION="(\b[Dd]e )?(%reDayNumberTh|%reDayWordTh) eeuw %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normDay(%SUM%(%normDay(group(2)),-1))"

// historic dates; year granularity
// EXAMPLE date_historic_7a-BCADhint: van 190 tot 185 v. Chr. (find "190 v. Chr.", 1- to 4-digit year)
// EXAMPLE date_historic_7b: van 190 tot 195                  (find "190", 1- to 4-digit year)
// EXAMPLE date_historic_7c: van 190 tot 195                  (find "195", 1- to 4-digit year)
RULENAME="date_historic_7a-BCADhint",EXTRACTION="[Vv]an %reYearBC tot %reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(3))%normYearBC(group(1))",OFFSET="group(1)-group(1)"
RULENAME="date_historic_7b",EXTRACTION="[Vv]an %reYearBC tot %reYearBC",NORM_VALUE="%normYearBC(group(1))",OFFSET="group(1)-group(1)"
RULENAME="date_historic_7c",EXTRACTION="[Vv]an %reYearBC tot %reYearBC",NORM_VALUE="%normYearBC(group(2))",OFFSET="group(2)-group(2)"

// historic dates; negative rules (-> in durations file)
// EXAMPLE date_historic_0a_negative: Caesar Augustus
RULENAME="date_historic_0a_negative",EXTRACTION="[A-Za-z]+ Augustus",NORM_VALUE="REMOVE"


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

/////////////////////
// Day Granularity //
/////////////////////
// date_r0 (Timestamp style)
// EXAMPLE r0a_1: 29-01-2010
// EXAMPLE r0b_1: 29-10-99
// EXAMPLE r0c_1: 26/09/1999
// EXAMPLE r0d_1: 26/09/99
// EXAMPLE r0e_1: 26.09.1999
// EXAMPLE r0f_1: 26.09.99
RULENAME="date_r0a",EXTRACTION="(%reDayNumber-%reMonthNumber-%reYear4Digit)",NORM_VALUE="group(4)-group(3)-group(2)"
RULENAME="date_r0b",EXTRACTION="(%reDayNumber-%reMonthNumber-%reYear2Digit)",NORM_VALUE="UNDEF-centurygroup(4)-group(3)-group(2)"
RULENAME="date_r0c",EXTRACTION="%reDayNumber/%reMonthNumber/%reYear4Digit",NORM_VALUE="group(3)-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_r0d",EXTRACTION="%reDayNumber/%reMonthNumber/%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(3)-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_r0e",EXTRACTION="%reDayNumber\.%reMonthNumber\.%reYear4Digit",NORM_VALUE="group(3)-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_r0f",EXTRACTION="%reDayNumber\.%reMonthNumber\.%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(3)-%normMonth(group(2))-%normDay(group(1))"

// date_r1
// EXAMPLE r1a_1: 25 februari 2009
// EXAMPLE r1a_2: 25 feb. 2009
// EXAMPLE r1a_3: Maandag, 25 Feb. 2009
// EXAMPLE r1b_3: Maandag, 25 Feb. '09
RULENAME="date_r1a",EXTRACTION="(%reWeekday ,?)?(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(9)-%normMonth(group(6))-%normDay(group(3))"
RULENAME="date_r1b",EXTRACTION="(%reWeekday ,?)?(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(9)-%normMonth(group(6))-%normDay(group(3))"

// date_r2
// EXAMPLE r2a_1: 19 november
// EXAMPLE r2a_2: 19 nov.
// EXAMPLE r2a_3: negentien januari
// EXAMPLE r2b_1: 19-20 november
// EXAMPLE r2b_2: 19 of 20 november
RULENAME="date_r2a",EXTRACTION="(%reDayWordTh|%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(5))-%normDay(group(1))"
RULENAME="date_r2b",EXTRACTION="(%reDayWordTh|%reDayNumberTh|%reDayNumber)%reAndOrTo(%reDayWordTh|%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(10))-%normDay(group(1))",OFFSET="group(1)-group(1)"

// date_r3
// EXAMPLE r3a_1: Donderdag 13 oktober
// EXAMPLE r3a_2: woensdag, 12 okt.
// EXAMPLE r3b_1: woensdag, 12 okt. 2011
// EXAMPLE r3c_1: woensdag, 12 okt. '11
RULENAME="date_r3a",EXTRACTION="%reWeekday[,]? (%reDayWordTh|%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(6))-%normDay(group(2))"
RULENAME="date_r3b",EXTRACTION="%reWeekday[,]? (%reDayWordTh|%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) (%reYear4Digit)",NORM_VALUE="group(9)-%normMonth(group(6))-%normDay(group(2))"
RULENAME="date_r3c",EXTRACTION="%reWeekday[,]? (%reDayWordTh|%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) (%reYear2Digit)",NORM_VALUE="UNDEF-centurygroup(9)-%normMonth(group(6))-%normDay(group(2))"

// date_r4
// EXAMPLE r4a_1: 14 en 18 september, 2010 (find September 14 2010)
// EXAMPLE r4b_1: 14 en 18 september, 2010 (find September 18 2010)
// EXAMPLE r4c_1: 14 en 18 september, '10 (find September 14 '10)
// EXAMPLE r4d_1: 14 en 18 september, '10 (find September 18 '10)
RULENAME="date_r4a",EXTRACTION="(%reDayNumberTh|%reDayNumber)%reAndOrTo(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(11)-%normMonth(group(8))-%normDay(group(1))",OFFSET="group(8)-group(11)"
RULENAME="date_r4b",EXTRACTION="(%reDayNumberTh|%reDayNumber)%reAndOrTo(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(11)-%normMonth(group(8))-%normDay(group(5))",OFFSET="group(8)-group(11)"
RULENAME="date_r4c",EXTRACTION="(%reDayNumberTh|%reDayNumber)%reAndOrTo(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(11)-%normMonth(group(8))-%normDay(group(1))",OFFSET="group(8)-group(11)"
RULENAME="date_r4d",EXTRACTION="(%reDayNumberTh|%reDayNumber)%reAndOrTo(%reDayNumberTh|%reDayNumber) (%reMonthLong|%reMonthShort) %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(11)-%normMonth(group(8))-%normDay(group(5))",OFFSET="group(8)-group(11)"

// date_r5
// EXAMPLE r5a_1: morgen
// EXAMPLE r5b_1: eerder gisteren
// EXAMPLE r5c_1: maandag
// EXAMPLE r5d_1: vroeg op maandag
RULENAME="date_r5a",EXTRACTION="%reDateWord",NORM_VALUE="%normDateWord(group(1))"
RULENAME="date_r5b",EXTRACTION="%rePartWords %reDateWord",NORM_VALUE="%normDateWord(group(2))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r5c",EXTRACTION="%reWeekday",NORM_VALUE="UNDEF-day-%normWeekday(group(1))"
RULENAME="date_r5d",EXTRACTION="%rePartWords( | op )%reWeekday",NORM_VALUE="UNDEF-day-%normWeekday(group(2))",NORM_MOD="%normPartWords(group(1))"

//////////////////////
// WEEK GRANULARITY //
//////////////////////
// date_r6
// EXAMPLE r6a_1: vorig weekend
// EXAMPLE r6b_1: volgend weekend
RULENAME="date_r6a",EXTRACTION="(afgelopen|vorig) weekend",NORM_VALUE="UNDEF-last-week-WE"
RULENAME="date_r6b",EXTRACTION="(volgend|komend|aankomend) weekend",NORM_VALUE="UNDEF-next-week-WE"

///////////////////////
// MONTH GRANULARITY //
///////////////////////
//date_r7
// EXAMPLE r7a_1: november 2001
// EXAMPLE r7a_2: nov. 2001
// EXAMPLE r7a_3: februari 1999
// EXAMPLE r7b_1: mei en juni 2011 (find May 2001)
RULENAME="date_r7a",EXTRACTION="(%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(4)-%normMonth(group(1))"
RULENAME="date_r7b",EXTRACTION="(%reMonthLong|%reMonthShort) (en|of|tot|-) (%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(8)-%normMonth(group(1))",OFFSET="group(6)-group(8)"
RULENAME="date_r7c",EXTRACTION="(%reMonthLong|%reMonthShort) %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(4)-%normMonth(group(1))"
RULENAME="date_r7d",EXTRACTION="(%reMonthLong|%reMonthShort) (en|of|tot|-) (%reMonthLong|%reMonthShort) %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(8)-%normMonth(group(1))"

// date_r8
// EXAMPLE r8a_1: november volgend jaar
// EXAMPLE r8a_2: mei vorig jaar
RULENAME="date_r8a",EXTRACTION="%reMonthLong (van )?(de |het )?%reThisNextLast (jaar|jaren)",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-year-%normMonth(group(1))"

////////////////////////
// SEASON GRANULARITY //
////////////////////////
// date_r9
// EXAMPLE r9a_1: zomer
// EXAMPLE r9b_1: winter 2001
// EXAMPLE r9b_1: winter van 2001
// EXAMPLE r9c_1: zomer van '69
RULENAME="date_r9a",EXTRACTION="(\bde )?%reSeason",NORM_VALUE="UNDEF-year-%normSeason(group(2))"
RULENAME="date_r9b",EXTRACTION="(\bde )?%reSeason( van | )%reYear4Digit",NORM_VALUE="group(4)-%normSeason(group(2))"
RULENAME="date_r9c",EXTRACTION="(\bde )?%reSeason( van | )(')?%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(5)-%normSeason(group(2))"

//////////////////////////////
// PART-OF-YEAR GRANULARITY //
//////////////////////////////
// date_r10
// EXAMPLE r10a_1: het derde kwartaal van 2001
// EXAMPLE r10b_1: de tweede helft
// EXAMPLE r10c_1: 2001, derde kwartaal
RULENAME="date_r10a",EXTRACTION="(\b[Dd]e |[Hh]et )?%rePartOfYear( van | )%reYear4Digit",NORM_VALUE="group(4)-%normPartOfYear(group(2))"
RULENAME="date_r10b",EXTRACTION="(\b[Dd]e |[Hh]et )?%rePartOfYear",NORM_VALUE="UNDEF-year-%normPartOfYear(group(2))"
RULENAME="date_r10c",EXTRACTION="%reYear4Digit(,)? %rePartOfYear",NORM_VALUE="group(1)-%normPartOfYear(group(3))"
RULENAME="date_r10d",EXTRACTION="(\b[Dd]e |[Hh]et )?%rePartOfYear( van | )%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(4)-%normPartOfYear(group(2))"

// date_r11
// EXAMPLE r11a_1: het derde kwartaal van volgend jaar
RULENAME="date_r11a",EXTRACTION="([Dd]e |[Hh]et )?%rePartOfYear van( het)? %reThisNextLast jaar",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-year-%normPartOfYear(group(2))"


//////////////////////
// YEAR GRANULARITY //
//////////////////////
// date_r12
// EXAMPLE r12a_1: 2009
// EXAMPLE r12b_1: 1850-58 (find: 1858)
// EXAMPLE r12c_1: negentieneenennegentig
RULENAME="date_r12a",EXTRACTION="(het jaar )?%reYear4Digit",NORM_VALUE="group(2)"
RULENAME="date_r12b",EXTRACTION="%reYear4Digit%reAndOrTo(%reYear2Digit|%reYear4Digit)",NORM_VALUE="%SUBSTRING%(group(1),0,2)group(3)",OFFSET="group(3)-group(3)"
RULENAME="date_r12c",EXTRACTION="%reNumWordTeen( |-)?%reNumWord2D",NORM_VALUE="%normDurationNumber(group(1))%normDurationNumber(group(3))"

////////////////////////
// DECADE GRANULARITY //
////////////////////////
// date_r13
// EXAMPLE r13a_1: de jaren 1990 
// EXAMPLE r13b_1: de jaren '90 van de 20e eeuw
// EXAMPLE r13c_1: de jaren negentig
// EXAMPLE r13d_1: de jaren negentien-negentig
RULENAME="date_r13a",EXTRACTION="([Dd]e )?jaren (\d\d\d0)",NORM_VALUE="%SUBSTRING%(group(2),0,3)"
RULENAME="date_r13b",EXTRACTION="([Dd]e )?jaren [']?%reYear2Digit",NORM_VALUE="UNDEF-century%SUBSTRING%(group(2),0,1)"
RULENAME="date_r13c",EXTRACTION="([Dd]e )?%reDecadeWord",NORM_VALUE="UNDEF-century%normDecadeWord(group(2))"
RULENAME="date_r13d",EXTRACTION="([Dd]e )?jaren %reNumWordTeen[ -]?%reDecadeWord",NORM_VALUE="%normDurationNumber(group(2))%normDecadeWord(group(3))"
RULENAME="date_r13e",EXTRACTION="([Dd]e )?jaren (\d\d\d0) van de (%reDayWordTh|%reDayNumberTh) eeuw",NORM_VALUE="%normDay(group(3))%SUBSTRING%(group(2),0,3)"
RULENAME="date_r13f",EXTRACTION="([Dd]e )?jaren [']?%reYear2Digit van de (%reDayWordTh|%reDayNumberTh) eeuw",NORM_VALUE="%normDay(group(3))%SUBSTRING%(group(2),0,1)"
RULENAME="date_r13g",EXTRACTION="([Dd]e )?%reDecadeWord van de (%reDayWordTh|%reDayNumberTh) eeuw",NORM_VALUE="%normDay(group(3))%normDecadeWord(group(2))"

// date_r14
// EXAMPLE r14a_1: begin 1990 
// EXAMPLE r14b_1: midden jaren 90
// EXAMPLE r14c_1: laat jaren zeventig
RULENAME="date_r14a",EXTRACTION="%rePartWords[\s]?(\d\d\d0)",NORM_VALUE="%SUBSTRING%(group(2),0,3)",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r14b",EXTRACTION="%rePartWords (jaren |van de jaren |van het jaar )[']?%reYear2Digit",NORM_VALUE="UNDEF-century%SUBSTRING%(group(3),0,1)",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r14c",EXTRACTION="%rePartWords[\s]?%reDecadeWord",NORM_VALUE="UNDEF-century%normDecadeWord(group(2))",NORM_MOD="%normPartWords(group(1))"

/////////////////////////
// CENTURY GRANULARITY //
/////////////////////////
// date_r15
// EXAMPLE r15a_1: de 19e eeuw
// EXAMPLE r15a_2: de negentiende eeuw
RULENAME="date_r15a",EXTRACTION="([Dd]e )?(%reDayNumberTh|%reDayWordTh) eeuw",NORM_VALUE="%normDay(%SUM%(%normDay(group(2)),-1))"

///////////////////////////////////
// GRANULARITY INDEPENDENT RULES //
///////////////////////////////////
// date_r16
// EXAMPLE r16a_1: maart
// EXAMPLE r16b_1: begin 2001
// EXAMPLE r16c_1: het begin van november 1999
// EXAMPLE r16d_1: het midden van september
RULENAME="date_r16a",EXTRACTION="(%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(1))"
RULENAME="date_r16b",EXTRACTION="%rePartWords([ ]?)%reYear4Digit",NORM_VALUE="group(3)",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r16c",EXTRACTION="%rePartWords([ ]?)(%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(6)-%normMonth(group(3))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r16d",EXTRACTION="%rePartWords([ ]?)(%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(3))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r16e",EXTRACTION="%rePartWords([ ]?)%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(3)",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r16f",EXTRACTION="%rePartWords([ ]?)(%reMonthLong|%reMonthShort) (van het jaar )?%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(7)-%normMonth(group(3))",NORM_MOD="%normPartWords(group(1))"

// date_r17
// EXAMPLE r17a_1: dit jaar
// EXAMPLE r17b_1: deze november
// EXAMPLE r17c_1: aankomende 24 november
// EXAMPLE r17d_1: deze maandag
// EXAMPLE r17e_1: deze zomer
// EXAMPLE r17f_1: deze dag (using UNDEF-REF normalization)
// EXAMPLE r17g_1: de volgende dag
RULENAME="date_r17a",EXTRACTION="([Dd]e |[Hh]et )?%reThisNextLast %reUnit",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normUnit(group(3))"
RULENAME="date_r17b",EXTRACTION="([Dd]e |[Hh]et )?%reThisNextLast %reMonthLong",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%LOWERCASE%(group(3))"
RULENAME="date_r17c",EXTRACTION="([Dd]e |[Hh]et )?%reThisNextLast %reDayNumber %reMonthLong",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%LOWERCASE%(group(4))-%normDay(group(3))"
RULENAME="date_r17d",EXTRACTION="([Dd]e |[Hh]et )?%reThisNextLast %reWeekday",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%LOWERCASE%(group(3))"
RULENAME="date_r17e",EXTRACTION="([Dd]e |[Hh]et )?%reThisNextLast %reSeason",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normSeason(group(3))"
//RULENAME="date_r17f",EXTRACTION="[Dd]eze dag",NORM_VALUE="UNDEF-REF-day-PLUS-0"
RULENAME="date_r17f",EXTRACTION="([Dd]eze|[Dd]atzelfde|[Dd]iezelfde) %reUnit",NORM_VALUE="UNDEF-REF-%normUnit(group(2))-PLUS-0"
RULENAME="date_r17g",EXTRACTION="([Dd]e |[Hh]et )(daarop ?)?volgende %reUnit",NORM_VALUE="UNDEF-REF-%normUnit(group(3))-PLUS-1"

// date_r18
// EXAMPLE r18a_1: het begin van dit jaar
// EXAMPLE r18b_1: het begin van komende oktober
// EXAMPLE r18c_1: het begin van aankomende 24 november
// EXAMPLE r18d_1: het begin van deze maandag
// EXAMPLE r18e_1: het begin van deze zomer
RULENAME="date_r18a",EXTRACTION="([Dd]e |[Hh]et )?%rePartWords( | van )%reThisNextLast %reUnit",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%normUnit(group(5))",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r18b",EXTRACTION="([Dd]e |[Hh]et )?%rePartWords( | van )%reThisNextLast %reMonthLong",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%LOWERCASE%(group(5))",NORM_MOD="%normPartWords(group(2))"
// RULENAME="date_r18c",EXTRACTION="([Dd]e |[Hh]et )?%rePartWords( | van )%reThisNextLast %reMonthLong %reDayNumber",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%LOWERCASE%(group(5))-%normDay(group(6))"
// RULENAME="date_r18d",EXTRACTION="([Dd]e |[Hh]et )?%rePartWords( | van )%reThisNextLast %reWeekday",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%LOWERCASE%(group(5))"
// RULENAME="date_r18e",EXTRACTION="([Dd]e |[Hh]et )?%rePartWords( | van )%reThisNextLast %reSeason",NORM_VALUE="UNDEF-%normThisNextLast(group(4))-%normSeason(group(5))"

// date_r20 (later)
// EXAMPLE r20a_1: enkele dagen later
// EXAMPLE r20b_1: ongeveer twintig dagen later
// EXAMPLE r20c_1: ongeveer 20 dagen daarna
// EXAMPLE r20d_1: een paar jaar later
RULENAME="date_r20a",EXTRACTION="(%reApproximate )?(een|een paar|wat|enkele) (%reUnit|minuut|minuten|uur|uren)( of wat| of iets)? (later|erna|daarna)",NORM_VALUE="FUTURE_REF"
RULENAME="date_r20b",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnit|minuut|minuten|uur|uren)( of wat| of iets)? (later|erna|daarna)",NORM_VALUE="UNDEF-REF-%normUnit(group(6))-PLUS-%normDurationNumber(group(3))"
RULENAME="date_r20c",EXTRACTION="(%reApproximate )?([\d]+) (%reUnit|minuut|minuten|uur|uren)( of wat| of iets)? (later|erna|daarna)",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-PLUS-group(3)"
RULENAME="date_r20d",EXTRACTION="(%reApproximate )?(een|een paar|wat) (%reUnit|minuut|minuten|uur|uren)( of wat| of iets)? (later|erna|daarna)",NORM_VALUE="PAST_REF"

// date_r21 (eerder)
// EXAMPLE r21a_1: twintig dagen daarvoor
// EXAMPLE r21b_1: ongeveer 2 uur eerder
// EXAMPLE r21c_1: een paar dagen daarvoor
// EXAMPLE r21d_1: recente jaren
RULENAME="date_r21a",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnit|minuten|minuut|uren|uur) (geleden|eerder|ervoor|daarvoor)",NORM_VALUE="UNDEF-REF-%normUnit(group(6))-MINUS-%normDurationNumber(group(3))"
RULENAME="date_r21b",EXTRACTION="(%reApproximate )?([\d]+) (%reUnit|minuten|minuut|uren|uur) (geleden|eerder|ervoor|daarvoor)",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-MINUS-group(3)"
RULENAME="date_r21c",EXTRACTION="(%reApproximate )?(een|een paar|wat) (%reUnit|minuut|minuten|uur|uren)( of wat| of iets)? (geleden|eerder|ervoor|daarvoor)",NORM_VALUE="PAST_REF"
RULENAME="date_r21d",EXTRACTION="recente? %reUnit",NORM_VALUE="PAST_REF"

////////////////////
// NEGATIVE RULES //
////////////////////
// EXAMPLE r1a_negative_1: dag en nacht
// EXAMPLE r1b_negative_2: jarenlang
RULENAME="date_r1a_negative",EXTRACTION="dag en nacht",NORM_VALUE="REMOVE"
RULENAME="date_r1b_negative",EXTRACTION="%reUnit( )?lang",NORM_VALUE="REMOVE"

// EXAMPLE r2a_negative_1: 2000 soldaten
// EXAMPLE r2b_negative_1: 2000 dode soldaten
// EXAMPLE r2c_negative_1: 2000 kilometer
RULENAME="date_r2a_negative",EXTRACTION="%reYear4Digit ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):nounpl:"
RULENAME="date_r2b_negative",EXTRACTION="%reYear4Digit ([\S]+) ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):JJ:group(3):nounpl:"
RULENAME="date_r2c_negative",EXTRACTION="%reYear4Digit (kilometers?|dollars?|gulden|meters?|kilogram|gram|ons|pond)",NORM_VALUE="REMOVE"

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

