// author: Jannik Strötgen
// email:  stroetgen@uni-hd.de
// date:   2015-03-25 (adapted)
// 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 bis 180 v. Chr.        (find "190 v. Chr."; 1- to 4-digit year)
// EXAMPLE date_historic_1d-BCADhint: Anfang 190 v. Chr.         (1- to 4-digit year)
// EXAMPLE date_historic_1e-BCADhint: Anfang v. Chr. 190 v. Chr. (1- to 4-digit year)
// EXAMPLE date_historic_1f-BCADhint: Anfang 190 bis 180 v. Chr. (find "Anfang 190 v. Chr."; 1- to 4-digit year)
RULENAME="date_historic_1a-BCADhint",EXTRACTION="(%reApproximate )?(Jahr(e)?([ns])? )?%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(7))%normYearBC(group(6))"
RULENAME="date_historic_1b-BCADhint",EXTRACTION="(%reApproximate )?(Jahr(e)?([ns])? )?%reYearPrefix %reYearBC",NORM_VALUE="%normYearPrefix(group(6))%normYearBC(group(7))"
RULENAME="date_historic_1c-BCADhint",EXTRACTION="(%reApproximate )?(Jahr(e)?([ns])? )?%reYearBC%reAndOrTo%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(9))%normYearBC(group(6))",OFFSET="group(0)-group(6)"
RULENAME="date_historic_1d-BCADhint",EXTRACTION="(%rePartWords )(Jahr(e)?([ns])? )?%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(7))%normYearBC(group(6))"
RULENAME="date_historic_1e-BCADhint",EXTRACTION="(%rePartWords )(Jahr(e)?([ns])? )?%reYearPrefix %reYearBC",NORM_VALUE="%normYearPrefix(group(6))%normYearBC(group(7))"
RULENAME="date_historic_1f-BCADhint",EXTRACTION="(%rePartWords )(Jahr(e)?([ns])? )?%reYearBC%reAndOrTo%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(9))%normYearBC(group(6))",OFFSET="group(0)-group(6)"

// historic dates; month granularity
// EXAMPLE date_historic_2a-BCADhint: Januar 190 v. Chr.        (1- to 4-digit year)
// EXAMPLE date_historic_2b:          Januar 190                (3-digit year)
// EXAMPLE date_historic_2c:          Januar 90                 (2-digit year)
// EXAMPLE date_historic_2d-BCADhint: Anfang Januar 190 v. Chr. (1- to 4-digit year)
// EXAMPLE date_historic_2e:          Anfang Januar 190         (3-digit year)
// EXAMPLE date_historic_2f:          Anfang Januar 90          (2-digit year)
RULENAME="date_historic_2a-BCADhint",EXTRACTION="(%reApproximate )?(%reMonthLong|%reMonthShort)( )%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(8))%normYearBC(group(7))-%normMonth(group(3))"
RULENAME="date_historic_2b",EXTRACTION="(%reApproximate )?(%reMonthLong|%reMonthShort)( )([\d][\d][\d])",NORM_VALUE="%normYearBC(group(7))-%normMonth(group(3))"
RULENAME="date_historic_2c",EXTRACTION="(%reApproximate )?(%reMonthLong|%reMonthShort)( )([\d][\d])",NORM_VALUE="UNDEF-centurygroup(7)-%normMonth(group(3))"
RULENAME="date_historic_2d-BCADhint",EXTRACTION="(%rePartWords )(%reMonthLong|%reMonthShort)( )%reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(8))%normYearBC(group(7))-%normMonth(group(3))"
RULENAME="date_historic_2e",EXTRACTION="(%rePartWords )(%reMonthLong|%reMonthShort)( )([\d][\d][\d])",NORM_VALUE="%normYearBC(group(7))-%normMonth(group(3))"
RULENAME="date_historic_2f",EXTRACTION="(%rePartWords )(%reMonthLong|%reMonthShort)( )([\d][\d])",NORM_VALUE="UNDEF-centurygroup(7)-%normMonth(group(3))"

// historic dates; day granularity
// EXAMPLE date_historic_3a-BCADhint: 1. Januar 190 v. Chr. (1- to 4-digit year)
// EXAMPLE date_historic_3b:          1. Januar 190         (3-digit year)
// EXAMPLE date_historic_3c:          1. Januar 90          (2-digit year)
// EXAMPLE date_historic_3d:          1. - 15. Januar 90    (find "1. Januar 90"; 2-digit year)
RULENAME="date_historic_3a-BCADhint",EXTRACTION="%reDayNumber[\.]? (%reMonthLong|%reMonthShort)( des Jahres| im Jahre)? %reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(7))%normYearBC(group(6))-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_historic_3b",EXTRACTION="%reDayNumber[\.]? (%reMonthLong|%reMonthShort)( des Jahres| im Jahre)? (\d\d\d)",NORM_VALUE="%normYearBC(group(6))-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_historic_3c",EXTRACTION="%reDayNumber[\.]? (%reMonthLong|%reMonthShort)( des Jahres| im Jahre)? %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(6)-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_historic_3d",EXTRACTION="(%reDayNumber[\.]?)%reAndOrTo%reDayNumber[\.]? (%reMonthLong|%reMonthShort)( des Jahres| im Jahre)? %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(9)-%normMonth(group(5))-%normDay(group(1))",OFFSET="group(1)-group(1)"

// historic dates; season granularity
// EXAMPLE date_historic_4a-BCADhint: Winter 190 v. Chr.      (1- to 4-digit year)
// EXAMPLE date_historic_4b-BCADhint: Mitte Winter 190 v.Chr. (1- to 4-digit year)
RULENAME="date_historic_4a-BCADhint",EXTRACTION="(%reApproximate )?%reSeason %reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normYearBC(group(4))-%normSeason(group(3))",
RULENAME="date_historic_4b-BCADhint",EXTRACTION="(%rePartWords )%reSeason %reYearBC %reYearPrefix",NORM_VALUE="%normYearPrefix(group(5))%normYearBC(group(4))-%normSeason(group(3))",

// historic dates; century granularity
// EXAMPLE date_historic_5a-BCADhint: das 5. Jahrhundert v. Chr.
RULENAME="date_historic_5a-BCADhint",EXTRACTION="([Dd]as )?(%reDayNumber[\.]?|%reDayWordTh) (Jahrhundert[s]?|Jh\.) %reYearPrefix",NORM_VALUE="%normYearPrefix(group(6))%normDay(%SUM%(%normDay(group(2)),-1))"

// historic dates; year granularity
// EXAMPLE date_historic_6a: Jahr 90  (2-digit year)
// EXAMPLE date_historic_6b: Jahr 190 (3-digit year)
RULENAME="date_historic_6a",EXTRACTION="(Jahr(e)?([ns])?) (\d\d)",NORM_VALUE="%normYearBC(group(4))"
RULENAME="date_historic_6b",EXTRACTION="(Jahr(e)?([ns])?) (\d\d\d)",NORM_VALUE="%normYearBC(group(4))"

// historic dates; negative rules
// EXAMPLE date_historic_0a_negative: MiG-190      (1- to 4-digit year)
// EXAMPLE date_historic_0b_negative: 90 Menschen  (2-digit year)
RULENAME="date_historic_0a_negative",EXTRACTION="(MiG(-)%reYearBC)",NORM_VALUE="REMOVE"
RULENAME="date_historic_0b_negative",EXTRACTION="(%reYear2Digit )([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(3):NN:",OFFSET="group(1)-group(1)"

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

/////////////////////
// Day Granularity //
/////////////////////
// date_r0
// EXAMPLE r0a_1: 2010-01-29
// EXAMPLE r0b_1: 10-29-99
// EXAMPLE r0c_1: 09/26/1999
// EXAMPLE r0d_1: 09/26/99
// EXAMPLE r0e_1: 7-14 (AP) (find 7-14)
RULENAME="date_r0a",EXTRACTION="(%reYear4Digit-%reMonthNumber-%reDayNumber)",NORM_VALUE="group(1)"
RULENAME="date_r0b",EXTRACTION="(%reMonthNumber-%reDayNumber-%reYear2Digit)",NORM_VALUE="UNDEF-centurygroup(4)-group(2)-group(3)"
RULENAME="date_r0c",EXTRACTION="%reMonthNumber/%reDayNumber/%reYear4Digit",NORM_VALUE="group(3)-%normMonth(group(1))-%normDay(group(2))"
RULENAME="date_r0d",EXTRACTION="%reMonthNumber/%reDayNumber/%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(3)-%normMonth(group(1))-%normDay(group(2))"
RULENAME="date_r0e",EXTRACTION="%reMonthNumber-%reDayNumber( \(.*?\))",NORM_VALUE="UNDEF-year-%normMonth(group(1))-%normDay(group(2))",OFFSET="group(1)-group(2)"

// date_r1
// EXAMPLE r1a_1: 1.3.99
// EXAMPLE r1b_1: 1.3.1999
RULENAME="date_r1a",EXTRACTION="%reDayNumber[\.]%reMonthNumber[\.]%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(3)-%normMonth(group(2))-%normDay(group(1))"
RULENAME="date_r1b",EXTRACTION="%reDayNumber[\.]%reMonthNumber[\.]%reYear4Digit",NORM_VALUE="group(3)-%normMonth(group(2))-%normDay(group(1))"

// date_r2 (keep though it is English date format)
// EXAMPLE r2a_1: Februar 25, 2009
// EXAMPLE r2a_2: Feb. 25, 2009
RULENAME="date_r2a",EXTRACTION="(%reMonthLong|%reMonthShort) %reDayNumber[\s]?, %reYear4Digit",NORM_VALUE="group(5)-%normMonth(group(1))-%normDay(group(4))"

// date_r3
// EXAMPLE r3a_1: 25. Februar 2009
// EXAMPLE r3a_2: 25 Feb 2009
// EXAMPLE r3a_3: 25 Feb. 2009
// EXAMPLE r3a_4: 25. November des Jahres 2001
RULENAME="date_r3a",EXTRACTION="%reDayNumber[\.]? (%reMonthLong|%reMonthShort)( des Jahres| im Jahre)? %reYear4Digit",NORM_VALUE="group(6)-%normMonth(group(2))-%normDay(group(1))"

// date_r4
// EXAMPLE r4a_1: November 19
// EXAMPLE r4b_1: 19. November
// EXAMPLE r4c_1: November 15 - 18   (find November 18)
// EXAMPLE r4d_1: 19. und 20. Januar (find 19. Januar)
RULENAME="date_r4a",EXTRACTION="(%reMonthLong|%reMonthShort) (%reDayWordTh|%reDayNumberTh|%reDayNumber)",NORM_VALUE="UNDEF-year-%normMonth(group(1))-%normDay(group(4))"
RULENAME="date_r4b",EXTRACTION="(%reDayWordTh|%reDayNumberTh|%reDayNumber[\.]?) (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(5))-%normDay(group(1))"
RULENAME="date_r4c",EXTRACTION="(%reMonthLong|%reMonthShort) (%reDayWordTh|%reDayNumberTh|%reDayNumber)(\–| - | – |-|–)(%reDayWordTh|%reDayNumberTh|%reDayNumber)",NORM_VALUE="UNDEF-year-%normMonth(group(1))-%normDay(group(9))",OFFSET="group(9)-group(9)"
RULENAME="date_r4d",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_r5
// EXAMPLE r5a_1: Freitag Oktober 13
// EXAMPLE r5b_1: Freitag 13. Oktober
RULENAME="date_r5a",EXTRACTION="%reWeekday[,]? (%reMonthLong|%reMonthShort) (%reDayWordTh|%reDayNumberTh|%reDayNumber)",NORM_VALUE="UNDEF-year-%normMonth(group(2))-%normDay(group(5))"
RULENAME="date_r5b",EXTRACTION="%reWeekday[,]? (%reDayWordTh|%reDayNumberTh|%reDayNumber)[\.]? (%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(6))-%normDay(group(2))"

// date_r6
// EXAMPLE r6a_1: 14. und 15. September 2010 (find: 14. September 2010)
RULENAME="date_r6a",EXTRACTION="(%reDayNumberTh|%reDayNumber)[\.]?%reAndOrTo(%reDayNumberTh|%reDayNumber)[\.]? (%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(11)-%normMonth(group(8))-%normDay(group(1))",OFFSET="group(1)-group(1)"

// date_r7
// EXAMPLE r7a_1: Friday Oktober 13 2009
RULENAME="date_r7a",EXTRACTION="%reWeekday[,]? (%reMonthLong|%reMonthShort) (%reDayWordTh|%reDayNumberTh|%reDayNumber)[,]? %reYear4Digit",NORM_VALUE="group(9)-%normMonth(group(2))-%normDay(group(5))"

// date_r8
// EXAMPLE 8a_1: tomorrow
RULENAME="date_r8a",EXTRACTION="%reDateWord",NORM_VALUE="%normDateWord(group(1))"

// date_r9
// EXAMPLE r9a_1: Montag
RULENAME="date_r9a",EXTRACTION="%reWeekday",NORM_VALUE="UNDEF-day-%normWeekday(group(1))"

///////////////////////
// Month Granularity //
///////////////////////
//date_r10
// EXAMPLE r10a_1: November 2001
// EXAMPLE r10a_2: Nov. 2001
// EXAMPLE r10b_1: Mai and Juni 2011 (find Mai 2001)
RULENAME="date_r10a",EXTRACTION="(%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(4)-%normMonth(group(1))"
RULENAME="date_r10b",EXTRACTION="(%reMonthLong|%reMonthShort)%reAndOrTo(%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(8)-%normMonth(group(1))",OFFSET="group(1)-group(1)"

// date_r11
// EXAMPLE r11a_1: November diesen Jahres
RULENAME="date_r11a",EXTRACTION="%reMonthLong %reThisNextLast Jahr[es]*",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-year-%normMonth(group(1))"

////////////////////////
// Season Granularity //
////////////////////////
// date_r12
// EXAMPLE r12a_1: Sommer
// EXAMPLE r12b_1: Sommer 2001
// EXAMPLE r12c_1: Sommer 69
RULENAME="date_r12a",EXTRACTION="%reSeason",NORM_VALUE="UNDEF-year-%normSeason(group(1))"
RULENAME="date_r12b",EXTRACTION="%reSeason( des Jahres | )%reYear4Digit",NORM_VALUE="group(3)-%normSeason(group(1))"
RULENAME="date_r12c",EXTRACTION="%reSeason( des Jahres | )%reYear2Digit",NORM_VALUE="UNDEF-centurygroup(3)-%normSeason(group(1))"

//////////////////////////////
// PART-OF-YEAR GRANULARITY //
//////////////////////////////
// date_r13
// EXAMPLE r13a_1: das erste Quartal 2001
// EXAMPLE r13a_1: das erste Quartal
RULENAME="date_r13a",EXTRACTION="([Dd]as |[Dd]er |[Dd]ie )?%rePartOfYear (des Jahres )?%reYear4Digit",NORM_VALUE="group(4)-%normPartOfYear(group(2))"
RULENAME="date_r13b",EXTRACTION="([Dd]as |[Dd]er |[Dd]ie )?%rePartOfYear",NORM_VALUE="UNDEF-year-%normPartOfYear(group(2))"
RULENAME="date_r13c",EXTRACTION="([Dd]as |[Dd]er |[Dd]ie )?%rePartOfYear des Vorjahres",NORM_VALUE="UNDEF-REF-year-MINUS-1%normPartOfYear(group(2))"

//////////////////////
// Year Granularity //
//////////////////////
// date_r14
// EXAMPLE r14a_1: 2009
// EXAMPLE r14a_2: Jahr 2009
RULENAME="date_r14a",EXTRACTION="(Jahr[es]* )?%reYear4Digit",NORM_VALUE="group(2)"

//date_r15
// EXAMPLE r15a_1: 1850-58 (find: 1858)
// EXAMPLE r15a_2: 1850/51 (find: 1851)
RULENAME="date_r15a",EXTRACTION="%reYear4Digit%reAndOrTo%reYear2Digit",NORM_VALUE="%SUBSTRING%(group(1),0,2)group(3)",OFFSET="group(3)-group(3)"

// date_r16
// EXAMPLE r16a_1: neunzehnsechsundneuzig
RULENAME="date_r16a",EXTRACTION="%reNumWordTeen( |-|)%reNumWord2D",NORM_VALUE="%normDurationNumber(group(1))%normDurationNumber(group(3))"

/////////////////////////
// Century Granularity //
/////////////////////////
// date_r17
// EXAMPLE r17a_1: Das 20. Jahrhundert
// EXAMPLE r17b_1: Im 18. und 19. Jahrhundert (find: 17. Jahrhundert)
// EXAMPLE 2: the seventh century
RULENAME="date_r17a",EXTRACTION="(Das )?(%reDayNumber[\.]?|%reDayWordTh) Jahrhundert[s]?",NORM_VALUE="%normDay(%SUM%(%normDay(group(2)),-1))"
RULENAME="date_r17b",EXTRACTION="(Das )?(%reDayNumber[\.]?|%reDayWordTh)%reAndOrTo(%reDayNumber[\.]?|%reDayWordTh) Jahrhundert[s]?",NORM_VALUE="%normDay(%SUM%(%normDay(group(2)),-1))",OFFSET="group(2)-group(2)"

///////////////////////////////////
// GRANULARITY INDEPENDENT RULES //
///////////////////////////////////
// date_r18
// EXAMPLE r18a_1: März
// EXAMPLE r18b_1: Anfang 1999
// EXAMPLE r18c_1: Anfang November 1999
// EXAMPLE r18d_1: Anfang November 2000
RULENAME="date_r18a",EXTRACTION="(%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(1))"
RULENAME="date_r18b",EXTRACTION="%rePartWords( |)%reYear4Digit",NORM_VALUE="group(3)",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r18c",EXTRACTION="%rePartWords( |)(%reMonthLong|%reMonthShort) %reYear4Digit",NORM_VALUE="group(6)-%normMonth(group(3))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r18d",EXTRACTION="%rePartWords( |)(%reMonthLong|%reMonthShort)",NORM_VALUE="UNDEF-year-%normMonth(group(3))",NORM_MOD="%normPartWords(group(1))"

// date_r19
// EXAMPLE r19a_1: die 1920er Jahre 
// EXAMPLE r19b_1: die 20er Jahre
// EXAMPLE r19a_1: die frühen 1920er Jahre 
// EXAMPLE r19b_1: die frühen 20er Jahre
RULENAME="date_r19a",EXTRACTION="([Dd]ie |[Dd]en )?%reYear4Digit(ern|er)( Jahren?|-Jahren?)?",NORM_VALUE="%SUBSTRING%(group(2),0,3)"
RULENAME="date_r19b",EXTRACTION="([Dd]ie |[Dd]en )?%reYear2Digit(ern|er)( Jahren?|-Jahren?)?",NORM_VALUE="UNDEF-century%SUBSTRING%(group(2),0,1)"
RULENAME="date_r19c",EXTRACTION="([Dd]ie |[Dd]en )?%rePartWords([ ]?)%reYear4Digit(ern|er)( Jahren?|-Jahren?)?",NORM_VALUE="%SUBSTRING%(group(4),0,3)",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r19d",EXTRACTION="([Dd]ie |[Dd]en )?%rePartWords([ ]?)%reYear2Digit(ern|er)( Jahren?|-Jahren?)?",NORM_VALUE="UNDEF-century%SUBSTRING%(group(4),0,1)",NORM_MOD="%normPartWords(group(2))"
RULENAME="date_r19e",EXTRACTION="([Dd]ie |[Dd]en )?%reDecadeWord( [Jj]ahren?|jahren?)?",NORM_VALUE="UNDEF-century%normDecadeWord(group(2))"
RULENAME="date_r19f",EXTRACTION="([Dd]ie |[Dd]en )?%rePartWords der %reDecadeWord( [Jj]ahren?|jahren?)?",NORM_VALUE="UNDEF-century%normDecadeWord(group(3))",NORM_MOD="%normPartWords(group(2))"

// date_r20
// EXAMPLE r20a_1: dieses Jahr
// EXAMPLE r20b_1: gleichen Tag
// EXAMPLE r20c_1: diesen November
// EXAMPLE r20d_1: diesen Montag
// EXAMPLE r20e_1: diesen Sommer
RULENAME="date_r20a",EXTRACTION="([Dd]er |[Dd]ie |[Dd]as )?%reThisNextLast %reUnit",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normUnit(group(3))"
RULENAME="date_r20b",EXTRACTION="([Ss]elbe[nrs]?|[Gg]leiche[nrs]?) Tag",NORM_VALUE="UNDEF-REF-day-PLUS-0"
RULENAME="date_r20c",EXTRACTION="%reThisNextLast %reMonthLong",NORM_VALUE="UNDEF-%normThisNextLast(group(1))-%normMonthToEnglish(group(2))"
RULENAME="date_r20d",EXTRACTION="%reThisNextLast %reWeekday",NORM_VALUE="UNDEF-%normThisNextLast(group(1))-%normWeekday(group(2))"
RULENAME="date_r20e",EXTRACTION="%reThisNextLast %reSeason",NORM_VALUE="UNDEF-%normThisNextLast(group(1))-%normSeason(group(2))"

// date_r21
// EXAMPLE r21a_1: Anfang diesen Jahres
// EXAMPLE r21b_1: Anfanf dieses Novembers
// EXAMPLE r21c_1: Anfang dieses Montags
// EXAMPLE r21d_1: Anfang dieses Sommers
RULENAME="date_r21a",EXTRACTION="%rePartWords %reThisNextLast %reUnit[nes]*",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normUnit(group(3))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r21b",EXTRACTION="%rePartWords %reThisNextLast %reMonthLong[nes]*",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normMonthToEnglish(group(3))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r21c",EXTRACTION="%rePartWords %reThisNextLast %reWeekday[nes]*",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normWeekday(group(3))",NORM_MOD="%normPartWords(group(1))"
RULENAME="date_r21d",EXTRACTION="%rePartWords %reThisNextLast %reSeason[nes]*",NORM_VALUE="UNDEF-%normThisNextLast(group(2))-%normSeason(group(3))",NORM_MOD="%normPartWords(group(1))"

// date_r22
// EXAMPLE r22a_1: letztes Wochenende
RULENAME="date_r22a",EXTRACTION="([Dd]ieses |[Ll]etztes )Wochenende",NORM_VALUE="UNDEF-last-week-WE"

// date_r23
// EXAMPLE r23a_1: das letztjährige Quartal
// EXAMPLE r23b_1: das Quartal
RULENAME="date_r23a",EXTRACTION="([Dd]er|[Dd]ie|[Dd]as) (letztjährige) Quartals?",NORM_VALUE="UNDEF-REF-quarter-MINUS-4"
RULENAME="date_r23b",EXTRACTION="([Dd]er|[Dd]ie|[Dd]as) Quartals?",NORM_VALUE="UNDEF-REF-quarter-PLUS-0"

// date_r24
// EXAMPLE r24a_1: ein Jahr früher
// EXAMPLE r24b_2: ein Jahr später
RULENAME="date_r24a",EXTRACTION="[Ee]in Jahr (früher|vorher|davor)",NORM_VALUE="UNDEF-REF-year-MINUS-1"
RULENAME="date_r24b",EXTRACTION="[Ee]in Jahr (später|danach)",NORM_VALUE="UNDEF-REF-year-PLUS-1"

// date_r25
// EXAMPLE r25a_1: etwa zehn Tage später
// EXAMPLE r25b_1: etwa 20 Jahre später
// EXAMPLE r25c_1: etwa ein Jahr später
// EXAMPLE r25d_1: etwa zehn Tage früher
// EXAMPLE r25e_1: etwa 20 Tage früher
// EXAMPLE r25f_1: etwa ein Tag früher
RULENAME="date_r26a",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnit|Minuten|Stunden) (später|danach)",NORM_VALUE="UNDEF-REF-%normUnit(group(6))-PLUS-%normDurationNumber(group(3))"
RULENAME="date_r26b",EXTRACTION="(%reApproximate )?([\d]+) (%reUnit|Minuten|Stunden) (später|danach)",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-PLUS-group(3)"
RULENAME="date_r26c",EXTRACTION="(%reApproximate )?([Ee]inen|[Ee]ine|[Ee]in) (%reUnit) (später|danach)",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-PLUS-1"
RULENAME="date_r26d",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnit|Minuten|Stunden) (früher|vorher|davor)",NORM_VALUE="UNDEF-REF-%normUnit(group(6))-MINUS-%normDurationNumber(group(3))"
RULENAME="date_r26e",EXTRACTION="(%reApproximate )?([\d]+) (%reUnit|Minuten|Stunden) (früher|vorher|davor)",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-MINUS-group(3)"
RULENAME="date_r26f",EXTRACTION="(%reApproximate )?([Ee]inen|[Ee]ine|[Ee]in) (%reUnit) (früher|vorher|davor)",NORM_VALUE="UNDEF-REF-%normUnit(group(4))-MINUS-1"

///////////////////
// HOLIDAY RULES //
///////////////////

//date_r27
//EXAMPLE r27a_1: Neujahr
//EXAMPLE r27b_1: Neujahr 2010
//EXAMPLE r27c_1: Neujahr 87
RULENAME="date_r27a",EXTRACTION="%reHolidayFix",NORM_VALUE="UNDEF-year-%normHolidayFix(group(1))"
RULENAME="date_r27b",EXTRACTION="%reHolidayFix %reYear4Digit",NORM_VALUE="group(2)-%normHolidayFix(group(1))"
RULENAME="date_r27c",EXTRACTION="%reHolidayFix %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(2)-%normHolidayFix(group(1))"

//date_r28
//EXAMPLE r28a_1: Ostermontag
//EXAMPLE r28b_1: Ostermontag 2010
//EXAMPLE r28c_1: Ostermontag 87
RULENAME="date_r28a",EXTRACTION="%reHolidayVar",NORM_VALUE="UNDEF-year-00-00 %normHolidayVar(group(1))"
RULENAME="date_r28b",EXTRACTION="%reHolidayVar %reYear4Digit",NORM_VALUE="group(2)-00-00 %normHolidayVar(group(1))"
RULENAME="date_r28c",EXTRACTION="%reHolidayVar %reYear2Digit",NORM_VALUE="UNDEF-centurygroup(2)-00-00 %normHolidayVar(group(1))"


// PAST, PRESENT, FUTURE expressions
RULENAME="date_r29a",EXTRACTION="([Ee]inigen?|[Ww]enigen?|[Vv]ielen?) %reUnit (später)",NORM_VALUE="FUTURE_REF"
RULENAME="date_r29b",EXTRACTION="([Ee]inigen?|[Ww]enigen?|[Vv]ielen?) %reUnit (früher)",NORM_VALUE="PAST_REF"


////////////////////
// NEGATIVE RULES //
////////////////////
// CHECK THESE RULES (the German tag set is not equal to the English tag set)
RULENAME="date_r1a_negative",EXTRACTION="(2[3456789]\d\d)",NORM_VALUE="REMOVE"
RULENAME="date_r1b1_negative",EXTRACTION="%reYear4Digit ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):NN:"
RULENAME="date_r1b2_negative",EXTRACTION="%reYear4Digit (respektive|von|oder) (%reYear4Digit|[\d]+) ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(5):NN:"
RULENAME="date_r1c1_negative",EXTRACTION="%reYear4Digit ([\S]+) ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):ADJA:group(3):NN:"
RULENAME="date_r1c2_negative",EXTRACTION="%reYear4Digit ([\S]+) ([\S]+) ([\S]+) ([\S]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):ADJA:group(3):KON:group(4):ADJA:group(5):NN:"
RULENAME="date_r1d_negative",EXTRACTION="%reYear4Digit (m\b|km\b|ft\b|yr\b|dg\b|cm\b|ha\b|sq\b|PS\b)",NORM_VALUE="REMOVE"

// Further negative rules (March 2015, Jannik Strötgen)
// typical fairy tail expression    
// EXAMPLE r1e1_negative: Märchen aus 1001 Nacht
// EXAMPLE r1e2_negative: 1001-Nacht
RULENAME="date_r1e1_negative",EXTRACTION="Märchen aus 1001 Nacht",NORM_VALUE="REMOVE"
RULENAME="date_r1e2_negative",EXTRACTION="1001(-| )Nacht",NORM_VALUE="REMOVE"

// Further negative rules (March 2015, Jannik Strötgen)
// Addresses and room numbers
// EXAMPLE r2a_negative: Sonnenfelsgasse 19, 1010 Wien
// EXAMPLE r2b_negative: 1010 Wien
// EXAMPLE r2c_negative: 1600 Pennsylvania Avenue
// EXAMPLE r2d_negative: Sitzungssaal 1901
RULENAME="date_r2a_negative",EXTRACTION="([A-Z][\S]+)?([Ss]traße|[Ss]trasse|[Gg]asse|[Ww]eg) (\d)+, %reYear4Digit ([A-Z][\S]+\b)",NORM_VALUE="REMOVE"
RULENAME="date_r2b_negative",EXTRACTION="%reYear4Digit (Wien|Graz|Linz|Salzburg|Innsbruck)",NORM_VALUE="REMOVE"
RULENAME="date_r2c_negative",EXTRACTION="%reYear4Digit [A-Z]([\S]+) (Avenue|Street)",NORM_VALUE="REMOVE"
RULENAME="date_r2d_negative",EXTRACTION="([A-Z][\S]+)?([Ss]aal|[Rr]aum|[Zz]immer) %reYear4Digit",NORM_VALUE="REMOVE"

// Further negative rules (March 2015, Jannik Strötgen)
// EXAMPLE r3a_negative: 1200 davon [sind tot]
// EXAMPLE r3b_negative: mindestens 2000 [sind tot]
// EXAMPLE r3c_negative: von 2000 auf 1800 [reduziert] 
RULENAME="date_r3a_negative",EXTRACTION="%reYear4Digit (davon)",NORM_VALUE="REMOVE"
RULENAME="date_r3b_negative",EXTRACTION="([Üü]ber|[Dd]arunter|[Dd]avon|[Kk]napp|[Ww]eniger als|[Mm]ehr als|[Rr]und|[Mm]indestens|[Hh]öchstens|[Mm]aximal|[Ww]eitere) %reYear4Digit",NORM_VALUE="REMOVE"
RULENAME="date_r3c_negative",EXTRACTION="(von|um) (%reYear4Digit|[\d]+) (auf) (%reYear4Digit|[\d]+)",NORM_VALUE="REMOVE"

// Further negative rules (March 2015, Jannik Strötgen)
// EXAMPLE r4a_negative: UN Resolution 1441
RULENAME="date_r4a_negative",EXTRACTION="([Rr]esolution|[Ee]ntschließung) %reYear4Digit",NORM_VALUE="REMOVE"

