mirror of
https://github.com/facebook/duckling.git
synced 2024-10-26 21:59:44 +03:00
(Time/TimeGrain/Ordinal)/RU_XX: several extra Time forms for Russian
Summary: Some changes were originally suggested by me during the review of https://github.com/facebook/duckling/pull/474. Others are new. 1. "Day after tomorrow/before yesterday" 2. Ordinals in the form of number+suffix like "8th of March" 3. Tuesdays require a special preposition. 4. Support "Yo" (U+0451) in "fourth" and "during daylight". 5. Support special perposition for "next week". 6. Support "one before last" adjective for time grains. 7. Proper suffixes for "quarter" grain. 8. Support "at midnight". 9. Support alternative flag for "afternoon". Changes in Ordinal and TimeGrain are all driven by the new examples in the corpus for Time. There are also a couple of bugfixes: 1. A hidden latin "e" was present in an otherwise Cyrillic regex. 2. Wrong order of options in a regex separated with "|" prevented some matches. Reviewed By: haoxuany Differential Revision: D32311714 fbshipit-source-id: 084f6c3893eb5bfd767c267f558b910c6854eb59
This commit is contained in:
parent
e1641aeba4
commit
30b3d29e86
@ -30,6 +30,7 @@ allExamples = concat
|
||||
, "первое"
|
||||
, "первой"
|
||||
, "первого"
|
||||
, "первые"
|
||||
, "1ая"
|
||||
, "1-ая"
|
||||
, "1ый"
|
||||
@ -40,6 +41,11 @@ allExamples = concat
|
||||
, "1-й"
|
||||
, "1го"
|
||||
, "1-го"
|
||||
, "1-ого"
|
||||
, "первой"
|
||||
, "первым"
|
||||
, "первому"
|
||||
, "первым"
|
||||
]
|
||||
, examples (OrdinalData 3)
|
||||
[ "третий"
|
||||
@ -47,6 +53,7 @@ allExamples = concat
|
||||
, "третье"
|
||||
, "третьей"
|
||||
, "третьего"
|
||||
, "третьи"
|
||||
, "3й"
|
||||
, "3ий"
|
||||
, "3я"
|
||||
@ -61,6 +68,11 @@ allExamples = concat
|
||||
, "3-е"
|
||||
, "3-ье"
|
||||
, "3-го"
|
||||
, "3-его"
|
||||
, "третьей"
|
||||
, "третьим"
|
||||
, "третьему"
|
||||
, "третьим"
|
||||
]
|
||||
, examples (OrdinalData 4)
|
||||
[ "четвертый"
|
||||
@ -68,6 +80,8 @@ allExamples = concat
|
||||
, "четвертое"
|
||||
, "четвертой"
|
||||
, "четвертого"
|
||||
, "четвёртый"
|
||||
, "четвертые"
|
||||
, "4й"
|
||||
, "4ый"
|
||||
, "4ая"
|
||||
@ -80,39 +94,102 @@ allExamples = concat
|
||||
, "4-ое"
|
||||
, "4-ой"
|
||||
, "4-го"
|
||||
, "4-ого"
|
||||
, "четвертой"
|
||||
, "четвертым"
|
||||
, "четвёртому"
|
||||
, "четвёртым"
|
||||
]
|
||||
, examples (OrdinalData 15)
|
||||
[ "пятнадцатый"
|
||||
, "15й"
|
||||
, "15-й"
|
||||
, "15-ый"
|
||||
, "пятнадцатая"
|
||||
, "15я"
|
||||
, "15-я"
|
||||
, "15-ая"
|
||||
, "пятнадцатое"
|
||||
, "15е"
|
||||
, "15-е"
|
||||
, "15-ое"
|
||||
, "пятнадцатому"
|
||||
, "пятнадцатые"
|
||||
, "пятнадцатой"
|
||||
, "пятнадцатым"
|
||||
, "пятнадцатому"
|
||||
, "пятнадцатым"
|
||||
]
|
||||
, examples (OrdinalData 10)
|
||||
[ "десятый"
|
||||
, "10й"
|
||||
, "10-й"
|
||||
, "10-ый"
|
||||
, "десятая"
|
||||
, "десятой"
|
||||
]
|
||||
, examples (OrdinalData 21)
|
||||
[ "21й"
|
||||
, "21-й"
|
||||
, "21-го"
|
||||
, "21-ого"
|
||||
, "Двадцать первый"
|
||||
, "двадцать первый"
|
||||
, "двадцать первого"
|
||||
, "двадцать первой"
|
||||
]
|
||||
, examples (OrdinalData 23)
|
||||
[ "23й"
|
||||
, "23-й"
|
||||
, "двадцать третий"
|
||||
, "двадцать третьего"
|
||||
, "двадцать третьей"
|
||||
, "23-го"
|
||||
, "23-его"
|
||||
]
|
||||
, examples (OrdinalData 31)
|
||||
[ "31ый"
|
||||
, "31-ый"
|
||||
, "тридцать первый"
|
||||
]
|
||||
, examples (OrdinalData 30)
|
||||
[ "30ый"
|
||||
, "30-ый"
|
||||
, "тридцатый"
|
||||
]
|
||||
, examples (OrdinalData 48)
|
||||
[ "48ое"
|
||||
, "48-ое"
|
||||
, "сорок восьмое"
|
||||
]
|
||||
, examples (OrdinalData 40)
|
||||
[ "40ое"
|
||||
, "40-ое"
|
||||
, "сороковой"
|
||||
, "сороковое"
|
||||
, "сороковая"
|
||||
]
|
||||
, examples (OrdinalData 99)
|
||||
[ "99ый"
|
||||
, "99-й"
|
||||
, "99-ый"
|
||||
, "девяносто девятый"
|
||||
, "девяносто девятая"
|
||||
]
|
||||
, examples (OrdinalData 90)
|
||||
[ "90ый"
|
||||
, "90-й"
|
||||
, "90-ый"
|
||||
, "девяностый"
|
||||
, "девяностая"
|
||||
]
|
||||
, examples (OrdinalData 100)
|
||||
[ "сотое"
|
||||
, "сотая"
|
||||
, "сотый"
|
||||
, "100-ая"
|
||||
, "100-я"
|
||||
, "100-й"
|
||||
, "100-е"
|
||||
]
|
||||
]
|
||||
|
@ -31,6 +31,7 @@ ordinalsFirstthMap = HashMap.fromList
|
||||
, ( "втор", 2 )
|
||||
, ( "трет", 3 )
|
||||
, ( "четверт", 4 )
|
||||
, ( "четвёрт", 4 )
|
||||
, ( "пят", 5 )
|
||||
, ( "шест", 6 )
|
||||
, ( "седьм", 7 )
|
||||
@ -47,6 +48,14 @@ ordinalsFirstthMap = HashMap.fromList
|
||||
, ( "восемнадцат", 18 )
|
||||
, ( "девятнадцат", 19 )
|
||||
, ( "двадцат", 20 )
|
||||
, ( "тридцат", 30 )
|
||||
, ( "сороков", 40 )
|
||||
, ( "пятидесят", 50 )
|
||||
, ( "шестидесят", 60 )
|
||||
, ( "семидесят", 70 )
|
||||
, ( "восьмидесят", 80 )
|
||||
, ( "девяност", 90 )
|
||||
, ( "сот", 100 )
|
||||
]
|
||||
|
||||
cardinalsMap :: HashMap Text.Text Int
|
||||
@ -59,13 +68,14 @@ cardinalsMap = HashMap.fromList
|
||||
, ( "семьдесят", 70 )
|
||||
, ( "восемьдесят", 80 )
|
||||
, ( "девяносто", 90 )
|
||||
, ( "сто", 100 )
|
||||
]
|
||||
|
||||
ruleOrdinalsFirstth :: Rule
|
||||
ruleOrdinalsFirstth = Rule
|
||||
{ name = "ordinals (first..19th)"
|
||||
{ name = "ordinals (first..20th, then 30th, 40th, ..., 100th)"
|
||||
, pattern =
|
||||
[ regex "(перв|втор|трет|четверт|пят|шест|седьм|восьм|девят|десят|одиннадцат|двенадцат|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат)(ье(го|й)?|ого|ый|ой|ий|ая|ое|ья)"
|
||||
[ regex "(перв|втор|трет|четв[её]рт|пят|шест|седьм|восьм|девят|десят|одиннадцат|двенадцат|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат|тридцат|сороков|пятидесят|шестидесят|семидесят|восьмидесят|девяност|сот)(ь(его|ему|ей|ем|им|их|и|е)|ого|ому|ый|ой|ий|ая|ое|ья|ом|ые|ым|ых)"
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token RegexMatch (GroupMatch (match:_)):_) ->
|
||||
@ -78,7 +88,7 @@ ruleOrdinal = Rule
|
||||
{ name = "ordinal 21..99"
|
||||
, pattern =
|
||||
[ regex "(двадцать|тридцать|сорок|пятьдесят|шестьдесят|семьдесят|восемьдесят|девяносто)"
|
||||
, regex "(перв|втор|трет|четверт|пят|шест|седьм|восьм|девят)(ье(го|й)?|ого|ый|ой|ий|ая|ое|ья)"
|
||||
, regex "(перв|втор|трет|четв[её]рт|пят|шест|седьм|восьм|девят)(ье(го|й)?|ого|ому|ый|ой|ий|ая|ое|ья|ые|ым|ых)"
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token RegexMatch (GroupMatch (m1:_)):
|
||||
@ -94,7 +104,7 @@ ruleOrdinalDigits :: Rule
|
||||
ruleOrdinalDigits = Rule
|
||||
{ name = "ordinal (digits)"
|
||||
, pattern =
|
||||
[ regex "0*(\\d+)-?((ы|о|и|а|e|ь)?(ее|й|я|е|го))"
|
||||
[ regex "0*(\\d+)-?((ы|о|и|а|е|ь)?(ее|й|я|е|го|му?))"
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token RegexMatch (GroupMatch (match:_)):_) -> ordinal <$> parseInt match
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -45,24 +45,43 @@ allExamples = concat
|
||||
, examples (datetime (2013, 2, 11, 0, 0, 0) Day)
|
||||
[ "вчера"
|
||||
]
|
||||
, examples (datetime (2013, 2, 10, 0, 0, 0) Day)
|
||||
[ "позавчера"
|
||||
]
|
||||
, examples (datetime (2013, 2, 9, 0, 0, 0) Day)
|
||||
[ "позапозавчера"
|
||||
]
|
||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
||||
[ "завтра"
|
||||
]
|
||||
, examples (datetime (2013, 2, 14, 0, 0, 0) Day)
|
||||
[ "послезавтра"
|
||||
]
|
||||
, examples (datetime (2013, 2, 15, 0, 0, 0) Day)
|
||||
[ "послепослезавтра"
|
||||
]
|
||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
||||
[ "понедельник"
|
||||
, "в понедельник"
|
||||
]
|
||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
||||
[ "понедельник, 18 февраля"
|
||||
, "18 февраля"
|
||||
, "18-е февраля"
|
||||
, "18-го февраля"
|
||||
, "восемнадцатое февраля"
|
||||
, "восемнадцатого февраля"
|
||||
]
|
||||
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
||||
[ "вторник"
|
||||
, "во вторник"
|
||||
]
|
||||
, examples (datetime (2013, 2, 14, 0, 0, 0) Day)
|
||||
[ "четверг"
|
||||
]
|
||||
, examples (datetime (2013, 2, 15, 0, 0, 0) Day)
|
||||
[ "пятница"
|
||||
, "в пятницу"
|
||||
]
|
||||
, examples (datetime (2013, 2, 16, 0, 0, 0) Day)
|
||||
[ "суббота"
|
||||
@ -70,20 +89,32 @@ allExamples = concat
|
||||
, examples (datetime (2013, 3, 1, 0, 0, 0) Day)
|
||||
[ "1 марта"
|
||||
, "первое марта"
|
||||
, "1 мар."
|
||||
, "1-е мар."
|
||||
]
|
||||
, examples (datetime (2015, 3, 3, 0, 0, 0) Day)
|
||||
[ "3 марта 2015"
|
||||
, "3-его марта 2015"
|
||||
, "3 мар. 2015"
|
||||
, "третьего марта 2015"
|
||||
, "третье марта 2015"
|
||||
, "к третьему марта 2015"
|
||||
]
|
||||
, examples (datetime (2013, 2, 15, 0, 0, 0) Day)
|
||||
[ "15 февраля"
|
||||
, "15.2"
|
||||
, "15 Фев"
|
||||
, "15-го Фев"
|
||||
, "15.02"
|
||||
, "пятнадцатое февраля"
|
||||
, "пятнадцатого фев"
|
||||
]
|
||||
, examples (datetime (2013, 8, 8, 0, 0, 0) Day)
|
||||
[ "8 августа"
|
||||
, "8 Авг"
|
||||
, "восьмое августа"
|
||||
]
|
||||
, examples (datetime (2013, 3, 0, 0, 0, 0) Month)
|
||||
[ "март"
|
||||
]
|
||||
, examples (datetime (2014, 10, 0, 0, 0, 0) Month)
|
||||
[ "Октябрь 2014"
|
||||
@ -94,40 +125,102 @@ allExamples = concat
|
||||
, examples (datetime (1974, 10, 31, 0, 0, 0) Day)
|
||||
[ "31.10.1974"
|
||||
, "31.10.74"
|
||||
, "тридцать первое октября 1974"
|
||||
, "31-ое октября 1974"
|
||||
]
|
||||
, examples (datetime (2015, 4, 14, 0, 0, 0) Day)
|
||||
[ "14 апреля 2015"
|
||||
, "четырнадцатое апреля 2015"
|
||||
]
|
||||
, examples (datetime (2013, 2, 10, 0, 0, 0) Day)
|
||||
[ "Воскресенье, 10 фев."
|
||||
]
|
||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
||||
[ "Среда, 13 февраля"
|
||||
, "Среда, 13-е февраля"
|
||||
, "13-е февраля"
|
||||
]
|
||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
||||
[ "Понедельник, 18 фев"
|
||||
]
|
||||
, examples (datetime (2013, 2, 24, 0, 0, 0) Day)
|
||||
[ "двадцать четвертое фев"
|
||||
, "двадцать четвёртое февраля"
|
||||
, "двадцать четвертого февраля"
|
||||
, "24-ого февраля"
|
||||
, "24-е февраля"
|
||||
, "к двадцать четвёртому февраля"
|
||||
]
|
||||
, examples (datetime (2015, 5, 31, 0, 0, 0) Day)
|
||||
[ "тридцать первое мая 2015"
|
||||
]
|
||||
, examples (datetimeInterval ((2013, 2, 11, 0, 0, 0), (2013, 2, 17, 0, 0, 0)) Day)
|
||||
[ "эта неделя"
|
||||
]
|
||||
, examples (datetime (2013, 2, 1, 0, 0, 0) Month)
|
||||
[ "этот месяц"
|
||||
]
|
||||
, examples (datetime (2013, 1, 1, 0, 0, 0) Year)
|
||||
[ "этот год"
|
||||
]
|
||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Week)
|
||||
[ "следующая неделя"
|
||||
]
|
||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Week)
|
||||
[ "на следующей неделе"
|
||||
]
|
||||
, examples (datetime (2013, 1, 0, 0, 0, 0) Month)
|
||||
[ "прошлый месяц"
|
||||
, "в прошлом месяце"
|
||||
]
|
||||
, examples (datetime (2012, 12, 0, 0, 0, 0) Month)
|
||||
[ "позапрошлый месяц"
|
||||
, "в позапрошлом месяце"
|
||||
]
|
||||
, examples (datetime (2013, 3, 0, 0, 0, 0) Month)
|
||||
[ "следующий месяц"
|
||||
, "в следующем месяце"
|
||||
]
|
||||
, examples (datetime (2014, 0, 0, 0, 0, 0) Year)
|
||||
[ "следующий год"
|
||||
, "в следующем году"
|
||||
]
|
||||
, examples (datetime (2013, 1, 1, 0, 0, 0) Quarter)
|
||||
[ "этот квартал"
|
||||
]
|
||||
, examples (datetime (2013, 4, 1, 0, 0, 0) Quarter)
|
||||
[ "следующий квартал"
|
||||
, "в следующем квартале"
|
||||
]
|
||||
, examples (datetime (2013, 7, 1, 0, 0, 0) Quarter)
|
||||
[ "третий квартал"
|
||||
, "в третьем квартале"
|
||||
]
|
||||
, examples (datetime (2018, 10, 1, 0, 0, 0) Quarter)
|
||||
[ "четвертый квартал 2018"
|
||||
, "четвёртый квартал 2018"
|
||||
]
|
||||
, examples (datetime (2013, 2, 5, 0, 0, 0) Day)
|
||||
[ "в прошлый вторник"
|
||||
]
|
||||
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
||||
[ "следующий вторник"
|
||||
, "вторник на следующей неделе"
|
||||
]
|
||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
||||
[ "следующая среда"
|
||||
, "в следующую среду"
|
||||
, "в след среду"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 4, 0, 0) Hour)
|
||||
[ "в 4 утра"
|
||||
]
|
||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Hour)
|
||||
[ "в полночь"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 12, 0, 0) Hour)
|
||||
[ "в полдень"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 15, 0, 0) Hour)
|
||||
[ "в 3"
|
||||
, "3 часа"
|
||||
@ -136,15 +229,15 @@ allExamples = concat
|
||||
, examples (datetime (2013, 2, 12, 3, 18, 0) Minute)
|
||||
[ "3:18 утра"
|
||||
]
|
||||
, examples (datetime (2013, 2, 13, 3, 18, 0) Minute)
|
||||
[ "3:18"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 15, 0, 0) Hour)
|
||||
[ "в 3 часа дня"
|
||||
, "в 15"
|
||||
, "в 15 часов"
|
||||
, "15 часов"
|
||||
, "в 15ч"
|
||||
, "в пятнадцать часов"
|
||||
, "в 3 часа пополудни"
|
||||
, "в 3 часа после полудня"
|
||||
]
|
||||
, examples (datetime (2013, 4, 1, 18, 0, 0) Hour)
|
||||
[ "01.04. в 18 часов"
|
||||
@ -153,7 +246,7 @@ allExamples = concat
|
||||
[ "в 17 часов завтра"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 15, 15, 0) Minute)
|
||||
["15:15"
|
||||
[ "15:15"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 20, 0, 0) Hour)
|
||||
[ "8 часов вечера"
|
||||
@ -164,6 +257,7 @@ allExamples = concat
|
||||
]
|
||||
, examples (datetime (2013, 2, 16, 9, 0, 0) Hour)
|
||||
[ "в субботу в 9 часов"
|
||||
, "в субботу в девять"
|
||||
]
|
||||
, examples (datetime (2014, 7, 18, 19, 0, 0) Hour)
|
||||
[ "пятница, 18 июля 2014 7 часов вечера"
|
||||
@ -174,6 +268,7 @@ allExamples = concat
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 4, 30, 1) Second)
|
||||
[ "через 1 секунду"
|
||||
, "через секунду"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 4, 31, 0) Second)
|
||||
[ "через 1 минуту"
|
||||
@ -189,6 +284,8 @@ allExamples = concat
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 5, 30, 0) Minute)
|
||||
[ "через 1 час"
|
||||
, "через один час"
|
||||
, "через час"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 6, 30, 0) Minute)
|
||||
[ "через два часа"
|
||||
@ -196,9 +293,6 @@ allExamples = concat
|
||||
, examples (datetime (2013, 2, 13, 4, 30, 0) Minute)
|
||||
[ "через 24 часа"
|
||||
]
|
||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
||||
[ "завтра"
|
||||
]
|
||||
, examples (datetime (2016, 2, 0, 0, 0, 0) Month)
|
||||
[ "через 3 года"
|
||||
]
|
||||
@ -207,9 +301,11 @@ allExamples = concat
|
||||
]
|
||||
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
||||
[ "через 1 неделю"
|
||||
, "через неделю"
|
||||
]
|
||||
, examples (datetime (2013, 2, 5, 4, 0, 0) Hour)
|
||||
[ "7 дней назад"
|
||||
, "7 дней тому назад"
|
||||
]
|
||||
, examples (datetime (2013, 1, 29, 4, 0, 0) Hour)
|
||||
[ "14 дней назад"
|
||||
@ -219,6 +315,7 @@ allExamples = concat
|
||||
]
|
||||
, examples (datetime (2013, 2, 5, 0, 0, 0) Day)
|
||||
[ "1 неделю назад"
|
||||
, "неделю тому назад"
|
||||
]
|
||||
, examples (datetime (2013, 1, 22, 0, 0, 0) Day)
|
||||
[ "три недели назад"
|
||||
@ -368,6 +465,7 @@ allExamples = concat
|
||||
]
|
||||
, examples (datetimeInterval ((2013, 2, 12, 12, 0, 0), (2013, 2, 12, 19, 0, 0)) Hour)
|
||||
[ "сегодня днем"
|
||||
, "сегодня днём"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 13, 30, 0) Minute)
|
||||
[ "в 13:30 дня"
|
||||
@ -406,10 +504,10 @@ allExamples = concat
|
||||
, "с 14.10. по 15.10.2018"
|
||||
]
|
||||
, examples (datetime (2013, 10, 10, 0, 0, 0) Day)
|
||||
["10.10.2013"
|
||||
[ "10.10.2013"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 10, 10, 0) Minute)
|
||||
[ "в 10.10"
|
||||
[ "в 10:10"
|
||||
]
|
||||
, examples (datetime (2013, 2, 12, 17, 10, 0) Minute)
|
||||
[ "17ч10"
|
||||
|
@ -36,7 +36,9 @@ ruleInstants = mkRuleInstants
|
||||
, ( "завтра" , TG.Day , 1, "завтра" )
|
||||
, ( "вчера" , TG.Day , -1, "вчера" )
|
||||
, ( "послезавтра" , TG.Day , 2, "послезавтра" )
|
||||
, ( "послепослезавтра", TG.Day , 3, "послепослезавтра" )
|
||||
, ( "позавчера" , TG.Day , -2, "позавчера" )
|
||||
, ( "позапозавчера", TG.Day , -3, "позапозавчера" )
|
||||
, ( "Конец месяца" , TG.Month , 1, "(конец|конца) месяца" )
|
||||
, ( "Конец года" , TG.Year , 1, "(конец|конца) года" )
|
||||
]
|
||||
@ -93,7 +95,7 @@ ruleLastTime :: Rule
|
||||
ruleLastTime = Rule
|
||||
{ name = "last <time>"
|
||||
, pattern =
|
||||
[ regex "(в )?прошл(ый|ого|ому|ом|ые|ых|ым|ыми|ая)"
|
||||
[ regex "(на |в )?прошл(ый|ого|ому|ом|ое|ые|ых|ыми|ым|ая|ой|ую)"
|
||||
, Predicate isOkWithThisNext
|
||||
]
|
||||
, prod = \case
|
||||
@ -264,11 +266,20 @@ ruleNoon = Rule
|
||||
, prod = \_ -> tt $ hour False 12
|
||||
}
|
||||
|
||||
ruleMidnight :: Rule
|
||||
ruleMidnight = Rule
|
||||
{ name = "midnight"
|
||||
, pattern =
|
||||
[ regex "полночь"
|
||||
]
|
||||
, prod = \_ -> tt $ hour False 0
|
||||
}
|
||||
|
||||
ruleThisnextDayofweek :: Rule
|
||||
ruleThisnextDayofweek = Rule
|
||||
{ name = "this|next <day-of-week>"
|
||||
, pattern =
|
||||
[ regex "следующ(ий|ая|ее)"
|
||||
[ regex "след(ующ(ий|ая|ее|ую))?"
|
||||
, Predicate isADayOfWeek
|
||||
]
|
||||
, prod = \case
|
||||
@ -296,7 +307,7 @@ ruleNextCycle :: Rule
|
||||
ruleNextCycle = Rule
|
||||
{ name = "next <cycle>"
|
||||
, pattern =
|
||||
[ regex "(в |на )?следующ(ий|его|ему|им|ем|ие|их|ими)"
|
||||
[ regex "(на |в |к )?след(ующ(ий|его|ему|ими|ем|ие|их|им|ей|ая|ую))?"
|
||||
, dimension TimeGrain
|
||||
]
|
||||
, prod = \case
|
||||
@ -309,7 +320,7 @@ ruleOnDate :: Rule
|
||||
ruleOnDate = Rule
|
||||
{ name = "on <date>"
|
||||
, pattern =
|
||||
[ regex "в"
|
||||
[ regex "во|в|к"
|
||||
, dimension Time
|
||||
]
|
||||
, prod = \case
|
||||
@ -321,7 +332,7 @@ ruleLastCycle :: Rule
|
||||
ruleLastCycle = Rule
|
||||
{ name = "last <cycle>"
|
||||
, pattern =
|
||||
[ regex "(в )?прошл(ый|ого|ому|ым|ом|ые|ых|ыми)"
|
||||
[ regex "(на |в )?прошл(ый|ого|ому|ом|ое|ые|ых|ыми|ым|ая|ой|ую)"
|
||||
, dimension TimeGrain
|
||||
]
|
||||
, prod = \case
|
||||
@ -330,11 +341,24 @@ ruleLastCycle = Rule
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleBeforeLastCycle :: Rule
|
||||
ruleBeforeLastCycle = Rule
|
||||
{ name = "one <cycle> before last"
|
||||
, pattern =
|
||||
[ regex "(на |в )?позапрошл(ый|ого|ому|ыми|ом|ое|ые|ых|ым|ая|ой|ую)"
|
||||
, dimension TimeGrain
|
||||
]
|
||||
, prod = \case
|
||||
(_:Token TimeGrain grain:_) ->
|
||||
tt . cycleNth grain $ - 2
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleLastCycle2 :: Rule
|
||||
ruleLastCycle2 = Rule
|
||||
{ name = "last <cycle>"
|
||||
, pattern =
|
||||
[ regex "(в )?прошедш(ий|его|ему|им|ем|их|ие|ими)"
|
||||
[ regex "(в )?прошедш(ий|его|ему|ими|ем|их|ие|им)"
|
||||
, dimension TimeGrain
|
||||
]
|
||||
, prod = \case
|
||||
@ -360,7 +384,7 @@ ruleAfternoon :: Rule
|
||||
ruleAfternoon = Rule
|
||||
{ name = "afternoon"
|
||||
, pattern =
|
||||
[ regex "дня|днем"
|
||||
[ regex "(дня|дн[её]м)|пополудни|после полудня"
|
||||
]
|
||||
, prod = \_ ->
|
||||
let from = hour False 12
|
||||
@ -394,7 +418,6 @@ ruleNamedmonthDayofmonthOrdinal = Rule
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
|
||||
ruleHourofdayIntegerAsRelativeMinutes :: Rule
|
||||
ruleHourofdayIntegerAsRelativeMinutes = Rule
|
||||
{ name = "<hour-of-day> <integer> (as relative minutes)"
|
||||
@ -487,7 +510,7 @@ ruleDurationAgo = Rule
|
||||
{ name = "<duration> ago"
|
||||
, pattern =
|
||||
[ dimension Duration
|
||||
, regex "назад"
|
||||
, regex "(тому )?назад"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Duration dd:_:_) ->
|
||||
@ -640,8 +663,6 @@ ruleWeek = Rule
|
||||
let match = Text.strip $ Text.toLower m
|
||||
period <- case match of
|
||||
"эта" -> interval TTime.Closed (cycleNth TG.Week 0) end
|
||||
"rest of the" -> interval TTime.Open today end
|
||||
-- no prefix, implicit 'the'
|
||||
"неделя" -> interval TTime.Open today end
|
||||
_ -> Nothing
|
||||
let l = case match of { "неделя" -> mkLatent; _ -> id; }
|
||||
@ -720,7 +741,7 @@ ruleMorning :: Rule
|
||||
ruleMorning = Rule
|
||||
{ name = "morning"
|
||||
, pattern =
|
||||
[ regex "утро|утром|утра"
|
||||
[ regex "утром|утро|утра"
|
||||
]
|
||||
, prod = \_ ->
|
||||
let from = hour False 3
|
||||
@ -733,7 +754,7 @@ ruleThisPartofday :: Rule
|
||||
ruleThisPartofday = Rule
|
||||
{ name = "this <part-of-day>"
|
||||
, pattern =
|
||||
[ regex "(в )?(это|эту|этот|этого|этому|эти)"
|
||||
[ regex "(в )?(эту|этот|этого|этому|эти|это)"
|
||||
, Predicate isAPartOfDay
|
||||
]
|
||||
, prod = \case
|
||||
@ -745,7 +766,7 @@ ruleThisCycle :: Rule
|
||||
ruleThisCycle = Rule
|
||||
{ name = "this <cycle>"
|
||||
, pattern =
|
||||
[ regex "(в )?(это|эту|этот|этого|этому|эти)"
|
||||
[ regex "(в )?(эту|этот|этого|этому|эти)"
|
||||
, dimension TimeGrain
|
||||
]
|
||||
, prod = \case
|
||||
@ -758,7 +779,7 @@ ruleThisTime :: Rule
|
||||
ruleThisTime = Rule
|
||||
{ name = "this <time>"
|
||||
, pattern =
|
||||
[ regex "(в )?(это|эту|этот|этого|этому|эти)"
|
||||
[ regex "(в )?(эту|этот|этого|этому|эти|это)"
|
||||
, Predicate isOkWithThisNext
|
||||
]
|
||||
, prod = \case
|
||||
@ -797,7 +818,7 @@ ruleNight :: Rule
|
||||
ruleNight = Rule
|
||||
{ name = "night"
|
||||
, pattern =
|
||||
[ regex "ночь|ночи|ночью"
|
||||
[ regex "ночью|ночи|ночь"
|
||||
]
|
||||
, prod = \_ ->
|
||||
let from = hour False 0
|
||||
@ -838,7 +859,7 @@ ruleHhmm :: Rule
|
||||
ruleHhmm = Rule
|
||||
{ name = "hh:mm"
|
||||
, pattern =
|
||||
[ regex "((?:[01]?\\d)|(?:2[0-3]))[:.ч]([0-5]\\d)(?:час(ов|а|у)?|ч)?"
|
||||
[ regex "((?:[01]?\\d)|(?:2[0-3]))[:ч]([0-5]\\d)(?:час(ов|а|у)?|ч)?"
|
||||
]
|
||||
, prod = \case
|
||||
(Token RegexMatch (GroupMatch (m1:m2:_)):_) -> do
|
||||
@ -1082,6 +1103,7 @@ rules =
|
||||
, ruleIntersectBy
|
||||
, ruleIntersectByOfFromS
|
||||
, ruleLastCycle
|
||||
, ruleBeforeLastCycle
|
||||
, ruleLastCycle2
|
||||
, ruleLastCycleOfTime
|
||||
, ruleLastCycleOfTime2
|
||||
@ -1100,6 +1122,7 @@ rules =
|
||||
, ruleNextNCycle
|
||||
, ruleNight
|
||||
, ruleNoon
|
||||
, ruleMidnight
|
||||
, ruleNthTimeAfterTime
|
||||
, ruleNthTimeOfTime
|
||||
, ruleNthTimeOfTime2
|
||||
|
@ -24,10 +24,10 @@ grains = [ ("second (grain) ", "сек(унд(а|у|ы)?)?", Second)
|
||||
, ("minute (grain)" , "мин(ут(а|у|ы)?)?", Minute)
|
||||
, ("hour (grain)" , "ч(ас(а|ов)?)?", Hour)
|
||||
, ("day (grain)" , "день|дня|дней", Day)
|
||||
, ("week (grain)" , "недел(ь|я|и|ю)?", Week)
|
||||
, ("month (grain)" , "месяц(а|ев)?", Month)
|
||||
, ("quarter (grain)", "квартал(а)?", Quarter)
|
||||
, ("year (grain)" , "года?|лет", Year)
|
||||
, ("week (grain)" , "недел(ь|я|и|ю|е)?", Week)
|
||||
, ("month (grain)" , "месяц(а|ев|е)?", Month)
|
||||
, ("quarter (grain)", "квартал(а|е)?", Quarter)
|
||||
, ("year (grain)" , "год(а|у)?|лет", Year)
|
||||
]
|
||||
|
||||
rules :: [Rule]
|
||||
|
Loading…
Reference in New Issue
Block a user