// author: Jannik Strötgen
// email:  stroetgen@uni-hd.de
// date:   2011-06-13
// 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="")?

/////////////////////
// POSITIVE RULES //
/////////////////////
// duration_r1
// In Arabic there is a difference between unit of value one,two or more than two, each has different style and words
// EXAMPLE r1a_1: less than sixty days
RULENAME="duration_r1a_1",EXTRACTION="(%reApproximate[\s])?(ال)?(%reNumWord2D|%reNumWord1D) (%reUnitOnce|%reUnit)( %reThisNextLast)?",NORM_VALUE="P%normDurationNumber(group(4))%normUnit4Duration(group(7))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r1a_1: less than sixty days , arabic numbers
RULENAME="duration_r1a_1_arNum",EXTRACTION="(%reApproximate[\s]?)?(ال)?(%reArabicDigit(%reArabicDigit)?(%reArabicDigit)?(%reArabicDigit)?) (%reUnitOnce|%reUnit)( %reThisNextLast)?",NORM_VALUE="P%normArabicDigit(group(5))%normArabicDigit(group(7))%normArabicDigit(group(9))%normArabicDigit(group(11))%normUnit4Duration(group(12))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r1a_2: less one day
RULENAME="duration_r1a_2",EXTRACTION="(%reApproximate[\s]?)?%reUnitOnce( واحد[هة]?)?( %reThisNextLast)?(?!( %reYearBC))",NORM_VALUE="P1%normUnit4Duration(group(3))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r1a_3: less two days
RULENAME="duration_r1a_3",EXTRACTION="(%reApproximate[\s]?)?(ال)?%reUnitTwice( %reThisNextLastTwice)?",NORM_VALUE="P2%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r1b-1: less than 60 days
RULENAME="duration_r1b",EXTRACTION="(%reApproximate[\s]?)?([\d]+) (%reUnit|%reUnitOnce)( %reThisNextLast)?",NORM_VALUE="Pgroup(3)%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r1c-1: several days
RULENAME="duration_r1c",EXTRACTION="(%reApproximate[\s]?)?(عد[هة] )%reUnit( %reThisNextLast)?",NORM_VALUE="PX%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

RULENAME="duration_r1d",EXTRACTION="(%reApproximate[\s]?)?([\d]+) %reUnitOnce",NORM_VALUE="Pgroup(3)%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"


// duration_r2
// EXAMPLE r2a: at least the last twenty minutes
RULENAME="duration_r2a",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D) %reUnitT",NORM_VALUE="PT%normDurationNumber(group(3))%normUnit4Duration(group(6))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r1a_1: at least the last twenty minutes, arabic numbers
RULENAME="duration_r2a_arNum",EXTRACTION="(%reApproximate )?(ال)?(%reArabicDigit(%reArabicDigit)?(%reArabicDigit)?(%reArabicDigit)?) (%reUnitOnceT|%reUnitT)( %reThisNextLast)?",NORM_VALUE="PT%normArabicDigit(group(5))%normArabicDigit(group(7))%normArabicDigit(group(9))%normArabicDigit(group(11))%normUnit4Duration(group(12))",NORM_MOD="%normApprox4Durations(group(2))"

// EXAMPLE r2b: at least the last 20 minutes
// TEST ISSUE FIX FOR ISSUE #30: 
// RULENAME="duration_r2b",EXTRACTION="(%reApproximate )?([\d]+) %reUnitT",NORM_VALUE="PTgroup(3)%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"
RULENAME="duration_r2b",EXTRACTION="(%reApproximate )?([\d]+) (%reUnitOnceT|%reUnitTwiceT|%reUnitT)",NORM_VALUE="PTgroup(3)%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r2c: at least two minutes
RULENAME="duration_r2c",EXTRACTION="(%reApproximate )?(ال)?%reUnitTwiceT",NORM_VALUE="PT2%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r2d: at least once minutes
RULENAME="duration_r2d",EXTRACTION="(%reApproximate )?(ال)?%reUnitOnceT",NORM_VALUE="PT1%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r2e: at least the last several minutes
RULENAME="duration_r2e",EXTRACTION="(%reApproximate )?(عد[هة]|بضع) %reUnitT?",NORM_VALUE="PTX%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// duration_r3
// EXAMPLE r3a: half an hour
RULENAME="duration_r3a",EXTRACTION="(%reApproximate )?(نصف|النصف) ((ال)?ساع[هة])",NORM_VALUE="PT30M",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r3b: quarter an hour
RULENAME="duration_r3b",EXTRACTION="(%reApproximate )?(ربع|الربع) ((ال)?ساع[هة])",NORM_VALUE="PT15M",NORM_MOD="%normApprox4Durations(group(2))"
// EXAMPLE r3c: third an hour
RULENAME="duration_r3c",EXTRACTION="(%reApproximate )?(ثلث|الثلث) ((ال)?ساع[هة])",NORM_VALUE="PT20M",NORM_MOD="%normApprox4Durations(group(2))"

// duration_r4
// EXAMPLE r4a: about the years 10 last.
RULENAME="duration_r4a",EXTRACTION="(%reApproximate )?(ال)%reUnit (ال)([\d]+)( %reThisNextLast)?",NORM_VALUE="Pgroup(6)%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// EXAMPLE r4a: about the years 10 last. , three arabic digits, the choice of three just for random
RULENAME="duration_r4a_arNum",EXTRACTION="(%reApproximate )?(ال)%reUnit (ال[ـ]?)(%reArabicDigit(%reArabicDigit)?(%reArabicDigit)?)( %reThisNextLast)?",NORM_VALUE="P%normArabicDigit(group(7))%normArabicDigit(group(9))%normArabicDigit(group(11))%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// EXAMPLE r4b: about the years ten last.
RULENAME="duration_r4b",EXTRACTION="(%reApproximate )?(ال)%reUnit (ال)(%reNumWord2D|%reNumWord1D)( %reThisNextLast)?",NORM_VALUE="P%normDurationNumber(group(6))%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// EXAMPLE r4c: about the minutes 10 last.
RULENAME="duration_r4c",EXTRACTION="(%reApproximate )?(ال)%reUnitT (ال)([\d]+)( %reThisNextLast)?",NORM_VALUE="PTgroup(6)%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// EXAMPLE r4c: about the mintues 10 last. , three arabic digits, the choice of three just for random
RULENAME="duration_r4c_arNum",EXTRACTION="(%reApproximate )?(ال)%reUnitT (ال[ـ]?)(%reArabicDigit(%reArabicDigit)?(%reArabicDigit)?)( %reThisNextLast)?",NORM_VALUE="PT%normArabicDigit(group(7))%normArabicDigit(group(9))%normArabicDigit(group(11))%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// EXAMPLE r4d: about the minutes ten last.
RULENAME="duration_r4d",EXTRACTION="(%reApproximate )?(ال)%reUnitT (ال)(%reNumWord2D|%reNumWord1D)( %reThisNextLast)?",NORM_VALUE="PT%normDurationNumber(group(6))%normUnit4Duration(group(4))",NORM_MOD="%normApprox4Durations(group(2))"

// duration_r5
// EXAMPLE r5a: the 3rd year.
RULENAME="duration_r5a",EXTRACTION="(ال|لل)%reUnitOnceNoCentury (%reDayWordTh|([\d]+)|(%reArabicDigit(reArabicDigit)?))",NORM_VALUE="P1%normUnit4Duration(group(2))"
// EXAMPLE r5b: the 3rd minute.
RULENAME="duration_r5b",EXTRACTION="(ال|لل)%reUnitOnceT (%reDayWordTh|([\d]+)|(%reArabicDigit(reArabicDigit)?))",NORM_VALUE="PT1%normUnit4Duration(group(2))"



// date_r19 before
// EXAMPLE r6a_1: after/before at least several years
RULENAME="duration_r6a",EXTRACTION="((قبل|ﺐﻋﺩ)( عد[هة] | بضع )?%reUnit) (من|على)",NORM_VALUE="PX%normUnit4Duration(group(4))",OFFSET="group(1)-group(1)"
RULENAME="duration_r6a_1",EXTRACTION="(في) (عد[هة]|بضع) %reUnit",NORM_VALUE="PX%normUnit4Duration(group(3))",OFFSET="group(2)-group(3)"
// EXAMPLE r6b_1: after/before about twenty years
RULENAME="duration_r6b",EXTRACTION="((بعد|قبل) (%reApproximate )?(%reNumWord2D|%reNumWord1D) (%reUnitOnce|%reUnit)) (من|على)",NORM_VALUE="P%normDurationNumber(group(5))%normUnit4Duration(group(8))",NORM_MOD="%normApprox4Dates(group(4))",OFFSET="group(1)-group(1)"
// EXAMPLE r6c_1: after/before about 20 years
RULENAME="duration_r6c",EXTRACTION="((بعد|قبل) (%reApproximate )?([\d]+) (%reUnitOnce|%reUnit)) (من|على)",NORM_VALUE="Pgroup(5)%normUnit4Duration(group(6))",NORM_MOD="%normApprox4Dates(group(4))",OFFSET="group(1)-group(1)"
// EXAMPLE r6d_1: after/before a month
RULENAME="duration_r6d",EXTRACTION="((بعد|قبل) (%reApproximate )?(ال)?%reUnitOnce) (من|على)",NORM_VALUE="P1%normUnit4Duration(group(6))",NORM_MOD="%normApprox4Dates(group(4))",OFFSET="group(1)-group(1)"
// EXAMPLE r6e_1: after/before two month
RULENAME="duration_r6e",EXTRACTION="((بعد|قبل) (%reApproximate )?(ال)?%reUnitTwice) (من|على)",NORM_VALUE="P2%normUnit4Duration(group(6))",NORM_MOD="%normApprox4Dates(group(4))",OFFSET="group(1)-group(1)"


////////////////////
// NEGATIVE RULES //
////////////////////
// TODO : We do not have the token old in arabic, oldness is express in several ways. add later if needed.
// duration_r1_negative
// EXAMPLE r1a_negative-1: about 200 years older
// EXAMPLE r1b_negative-1: several days old
//RULENAME="duration_r1a_negation",EXTRACTION="(%reApproximate )?(%reNumWord2D|%reNumWord1D|[\d]+) (%reUnit|minutes?|hours?) (older|younger|old|young)",NORM_VALUE="REMOVE"
//RULENAME="duration_r1b_negation",EXTRACTION="(%reApproximate )?(several|a couple of|some|several|recent|coming) (%reUnit|minutes?|hours?) (older|younger|old|young)",NORM_VALUE="REMOVE"
RULENAME="duration_r1a_negation",EXTRACTION="(عام|العام)",NORM_VALUE="REMOVE"
RULENAME="duration_r1b_negation",EXTRACTION="(عقد)",NORM_VALUE="REMOVE"

////////////////////
// NEGATIVE RULES //
////////////////////
// TODO , add more rules
// EXAMPLE r3a_negative_1: 2000 soldiers (four digit number followed by a plural noun)
RULENAME="date_r1a_negative",EXTRACTION="((?!في).)* %reYear4Digit ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(3):NNS:"
RULENAME="date_r1a_arNum_negative",EXTRACTION="((?!في).)* (%reArabicDigit)(%reArabicDigit)(%reArabicDigit)(%reArabicDigit) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(10):NNS:"
// EXAMPLE r3b_negative_1: 2000 dead soldiers (four digit number followed by an adjective and a plural noun)
RULENAME="date_r1b_negative",EXTRACTION="((?!في).)* %reYear4Digit ([\w]+) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(2):JJ:group(4):NNS:"
RULENAME="date_r1b_arNum_negative",EXTRACTION="((?!في).)* (%reArabicDigit)(%reArabicDigit)(%reArabicDigit)(%reArabicDigit) ([\w]+) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(10):JJ:group(11):NNS:"
// EXAMPLE r3c_negative_1: 2000 kilometer (four digit number followed a non-temporal unit)
RULENAME="date_r1c_negative",EXTRACTION="(%reYear4Digit|%reYear2Digit) (طن|كلم|كيلومتر|دولار|قدم|يورو|متر|كيلوغرام|كيلو متر|ميل)",NORM_VALUE="REMOVE"
RULENAME="date_r1c_arNum_negative",EXTRACTION="(%reArabicDigit)(%reArabicDigit)?(%reArabicDigit)?(%reArabicDigit)? (طن|كلم|كيلومتر|دولار|قدم|يورو|متر|كيلوغرام|كيلو متر|ميل)",NORM_VALUE="REMOVE"
// EXAMPLE r4a_negative: W2000.1920
RULENAME="date_r1d_negative",EXTRACTION="[\w]+%reYear4Digit\.%reYear4Digit",NORM_VALUE="REMOVE"
RULENAME="date_r1e_negative",EXTRACTION="((?!في).)* %reYear4Digit ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(3):NN:"
RULENAME="date_r1f_negative",EXTRACTION="((?!في).)* ر%reYear2Digit ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(3):NN:"
RULENAME="date_r1f_arNum_negative",EXTRACTION="((?!في).)* (%reArabicDigit)(%reArabicDigit) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(6):NN:"
RULENAME="date_r1h_negative",EXTRACTION="((?!في).)* %reYear2Digit ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(3):NNS:"
RULENAME="date_r1h_arNum_negative",EXTRACTION="((?!في).)* (%reArabicDigit)(%reArabicDigit) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(6):NNS:"

RULENAME="date_r1i_negative",EXTRACTION="((?!في).)* (%reYear2Digit|%reYear4Digit) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(5):JJ:"
RULENAME="date_r1i_arNum_negative",EXTRACTION="((?!في).)* (%reArabicDigit)(%reArabicDigit) ([\w]+)",NORM_VALUE="REMOVE",POS_CONSTRAINT="group(6):JJ:"


RULENAME="date_r1j_negative",EXTRACTION="في شهر كذا وكذا",NORM_VALUE="REMOVE"