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-ая"
|
, "1-ая"
|
||||||
, "1ый"
|
, "1ый"
|
||||||
@ -40,6 +41,11 @@ allExamples = concat
|
|||||||
, "1-й"
|
, "1-й"
|
||||||
, "1го"
|
, "1го"
|
||||||
, "1-го"
|
, "1-го"
|
||||||
|
, "1-ого"
|
||||||
|
, "первой"
|
||||||
|
, "первым"
|
||||||
|
, "первому"
|
||||||
|
, "первым"
|
||||||
]
|
]
|
||||||
, examples (OrdinalData 3)
|
, examples (OrdinalData 3)
|
||||||
[ "третий"
|
[ "третий"
|
||||||
@ -47,6 +53,7 @@ allExamples = concat
|
|||||||
, "третье"
|
, "третье"
|
||||||
, "третьей"
|
, "третьей"
|
||||||
, "третьего"
|
, "третьего"
|
||||||
|
, "третьи"
|
||||||
, "3й"
|
, "3й"
|
||||||
, "3ий"
|
, "3ий"
|
||||||
, "3я"
|
, "3я"
|
||||||
@ -61,6 +68,11 @@ allExamples = concat
|
|||||||
, "3-е"
|
, "3-е"
|
||||||
, "3-ье"
|
, "3-ье"
|
||||||
, "3-го"
|
, "3-го"
|
||||||
|
, "3-его"
|
||||||
|
, "третьей"
|
||||||
|
, "третьим"
|
||||||
|
, "третьему"
|
||||||
|
, "третьим"
|
||||||
]
|
]
|
||||||
, examples (OrdinalData 4)
|
, examples (OrdinalData 4)
|
||||||
[ "четвертый"
|
[ "четвертый"
|
||||||
@ -68,6 +80,8 @@ allExamples = concat
|
|||||||
, "четвертое"
|
, "четвертое"
|
||||||
, "четвертой"
|
, "четвертой"
|
||||||
, "четвертого"
|
, "четвертого"
|
||||||
|
, "четвёртый"
|
||||||
|
, "четвертые"
|
||||||
, "4й"
|
, "4й"
|
||||||
, "4ый"
|
, "4ый"
|
||||||
, "4ая"
|
, "4ая"
|
||||||
@ -80,39 +94,102 @@ allExamples = concat
|
|||||||
, "4-ое"
|
, "4-ое"
|
||||||
, "4-ой"
|
, "4-ой"
|
||||||
, "4-го"
|
, "4-го"
|
||||||
|
, "4-ого"
|
||||||
|
, "четвертой"
|
||||||
|
, "четвертым"
|
||||||
|
, "четвёртому"
|
||||||
|
, "четвёртым"
|
||||||
]
|
]
|
||||||
, examples (OrdinalData 15)
|
, examples (OrdinalData 15)
|
||||||
[ "пятнадцатый"
|
[ "пятнадцатый"
|
||||||
, "15й"
|
, "15й"
|
||||||
, "15-й"
|
, "15-й"
|
||||||
|
, "15-ый"
|
||||||
|
, "пятнадцатая"
|
||||||
|
, "15я"
|
||||||
|
, "15-я"
|
||||||
|
, "15-ая"
|
||||||
|
, "пятнадцатое"
|
||||||
|
, "15е"
|
||||||
|
, "15-е"
|
||||||
|
, "15-ое"
|
||||||
|
, "пятнадцатому"
|
||||||
|
, "пятнадцатые"
|
||||||
|
, "пятнадцатой"
|
||||||
|
, "пятнадцатым"
|
||||||
|
, "пятнадцатому"
|
||||||
|
, "пятнадцатым"
|
||||||
|
]
|
||||||
|
, examples (OrdinalData 10)
|
||||||
|
[ "десятый"
|
||||||
|
, "10й"
|
||||||
|
, "10-й"
|
||||||
|
, "10-ый"
|
||||||
|
, "десятая"
|
||||||
|
, "десятой"
|
||||||
]
|
]
|
||||||
, examples (OrdinalData 21)
|
, examples (OrdinalData 21)
|
||||||
[ "21й"
|
[ "21й"
|
||||||
, "21-й"
|
, "21-й"
|
||||||
, "21-го"
|
, "21-го"
|
||||||
|
, "21-ого"
|
||||||
, "Двадцать первый"
|
, "Двадцать первый"
|
||||||
, "двадцать первый"
|
, "двадцать первый"
|
||||||
, "двадцать первого"
|
, "двадцать первого"
|
||||||
|
, "двадцать первой"
|
||||||
]
|
]
|
||||||
, examples (OrdinalData 23)
|
, examples (OrdinalData 23)
|
||||||
[ "23й"
|
[ "23й"
|
||||||
, "23-й"
|
, "23-й"
|
||||||
, "двадцать третий"
|
, "двадцать третий"
|
||||||
, "двадцать третьего"
|
, "двадцать третьего"
|
||||||
|
, "двадцать третьей"
|
||||||
|
, "23-го"
|
||||||
|
, "23-его"
|
||||||
]
|
]
|
||||||
, examples (OrdinalData 31)
|
, examples (OrdinalData 31)
|
||||||
[ "31ый"
|
[ "31ый"
|
||||||
, "31-ый"
|
, "31-ый"
|
||||||
, "тридцать первый"
|
, "тридцать первый"
|
||||||
]
|
]
|
||||||
|
, examples (OrdinalData 30)
|
||||||
|
[ "30ый"
|
||||||
|
, "30-ый"
|
||||||
|
, "тридцатый"
|
||||||
|
]
|
||||||
, examples (OrdinalData 48)
|
, examples (OrdinalData 48)
|
||||||
[ "48ое"
|
[ "48ое"
|
||||||
, "48-ое"
|
, "48-ое"
|
||||||
, "сорок восьмое"
|
, "сорок восьмое"
|
||||||
]
|
]
|
||||||
|
, examples (OrdinalData 40)
|
||||||
|
[ "40ое"
|
||||||
|
, "40-ое"
|
||||||
|
, "сороковой"
|
||||||
|
, "сороковое"
|
||||||
|
, "сороковая"
|
||||||
|
]
|
||||||
, examples (OrdinalData 99)
|
, examples (OrdinalData 99)
|
||||||
[ "99ый"
|
[ "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 )
|
, ( "втор", 2 )
|
||||||
, ( "трет", 3 )
|
, ( "трет", 3 )
|
||||||
, ( "четверт", 4 )
|
, ( "четверт", 4 )
|
||||||
|
, ( "четвёрт", 4 )
|
||||||
, ( "пят", 5 )
|
, ( "пят", 5 )
|
||||||
, ( "шест", 6 )
|
, ( "шест", 6 )
|
||||||
, ( "седьм", 7 )
|
, ( "седьм", 7 )
|
||||||
@ -47,6 +48,14 @@ ordinalsFirstthMap = HashMap.fromList
|
|||||||
, ( "восемнадцат", 18 )
|
, ( "восемнадцат", 18 )
|
||||||
, ( "девятнадцат", 19 )
|
, ( "девятнадцат", 19 )
|
||||||
, ( "двадцат", 20 )
|
, ( "двадцат", 20 )
|
||||||
|
, ( "тридцат", 30 )
|
||||||
|
, ( "сороков", 40 )
|
||||||
|
, ( "пятидесят", 50 )
|
||||||
|
, ( "шестидесят", 60 )
|
||||||
|
, ( "семидесят", 70 )
|
||||||
|
, ( "восьмидесят", 80 )
|
||||||
|
, ( "девяност", 90 )
|
||||||
|
, ( "сот", 100 )
|
||||||
]
|
]
|
||||||
|
|
||||||
cardinalsMap :: HashMap Text.Text Int
|
cardinalsMap :: HashMap Text.Text Int
|
||||||
@ -59,13 +68,14 @@ cardinalsMap = HashMap.fromList
|
|||||||
, ( "семьдесят", 70 )
|
, ( "семьдесят", 70 )
|
||||||
, ( "восемьдесят", 80 )
|
, ( "восемьдесят", 80 )
|
||||||
, ( "девяносто", 90 )
|
, ( "девяносто", 90 )
|
||||||
|
, ( "сто", 100 )
|
||||||
]
|
]
|
||||||
|
|
||||||
ruleOrdinalsFirstth :: Rule
|
ruleOrdinalsFirstth :: Rule
|
||||||
ruleOrdinalsFirstth = Rule
|
ruleOrdinalsFirstth = Rule
|
||||||
{ name = "ordinals (first..19th)"
|
{ name = "ordinals (first..20th, then 30th, 40th, ..., 100th)"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(перв|втор|трет|четверт|пят|шест|седьм|восьм|девят|десят|одиннадцат|двенадцат|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат)(ье(го|й)?|ого|ый|ой|ий|ая|ое|ья)"
|
[ regex "(перв|втор|трет|четв[её]рт|пят|шест|седьм|восьм|девят|десят|одиннадцат|двенадцат|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат|тридцат|сороков|пятидесят|шестидесят|семидесят|восьмидесят|девяност|сот)(ь(его|ему|ей|ем|им|их|и|е)|ого|ому|ый|ой|ий|ая|ое|ья|ом|ые|ым|ых)"
|
||||||
]
|
]
|
||||||
, prod = \tokens -> case tokens of
|
, prod = \tokens -> case tokens of
|
||||||
(Token RegexMatch (GroupMatch (match:_)):_) ->
|
(Token RegexMatch (GroupMatch (match:_)):_) ->
|
||||||
@ -78,7 +88,7 @@ ruleOrdinal = Rule
|
|||||||
{ name = "ordinal 21..99"
|
{ name = "ordinal 21..99"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(двадцать|тридцать|сорок|пятьдесят|шестьдесят|семьдесят|восемьдесят|девяносто)"
|
[ regex "(двадцать|тридцать|сорок|пятьдесят|шестьдесят|семьдесят|восемьдесят|девяносто)"
|
||||||
, regex "(перв|втор|трет|четверт|пят|шест|седьм|восьм|девят)(ье(го|й)?|ого|ый|ой|ий|ая|ое|ья)"
|
, regex "(перв|втор|трет|четв[её]рт|пят|шест|седьм|восьм|девят)(ье(го|й)?|ого|ому|ый|ой|ий|ая|ое|ья|ые|ым|ых)"
|
||||||
]
|
]
|
||||||
, prod = \tokens -> case tokens of
|
, prod = \tokens -> case tokens of
|
||||||
(Token RegexMatch (GroupMatch (m1:_)):
|
(Token RegexMatch (GroupMatch (m1:_)):
|
||||||
@ -94,7 +104,7 @@ ruleOrdinalDigits :: Rule
|
|||||||
ruleOrdinalDigits = Rule
|
ruleOrdinalDigits = Rule
|
||||||
{ name = "ordinal (digits)"
|
{ name = "ordinal (digits)"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "0*(\\d+)-?((ы|о|и|а|e|ь)?(ее|й|я|е|го))"
|
[ regex "0*(\\d+)-?((ы|о|и|а|е|ь)?(ее|й|я|е|го|му?))"
|
||||||
]
|
]
|
||||||
, prod = \tokens -> case tokens of
|
, prod = \tokens -> case tokens of
|
||||||
(Token RegexMatch (GroupMatch (match:_)):_) -> ordinal <$> parseInt match
|
(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, 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, 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)
|
||||||
[ "понедельник"
|
[ "понедельник"
|
||||||
|
, "в понедельник"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
||||||
[ "понедельник, 18 февраля"
|
[ "понедельник, 18 февраля"
|
||||||
, "18 февраля"
|
, "18 февраля"
|
||||||
|
, "18-е февраля"
|
||||||
|
, "18-го февраля"
|
||||||
|
, "восемнадцатое февраля"
|
||||||
|
, "восемнадцатого февраля"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
||||||
[ "вторник"
|
[ "вторник"
|
||||||
|
, "во вторник"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 14, 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, 15, 0, 0, 0) Day)
|
||||||
[ "пятница"
|
[ "пятница"
|
||||||
|
, "в пятницу"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 16, 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)
|
, examples (datetime (2013, 3, 1, 0, 0, 0) Day)
|
||||||
[ "1 марта"
|
[ "1 марта"
|
||||||
, "первое марта"
|
, "первое марта"
|
||||||
, "1 мар."
|
, "1-е мар."
|
||||||
]
|
]
|
||||||
, examples (datetime (2015, 3, 3, 0, 0, 0) Day)
|
, examples (datetime (2015, 3, 3, 0, 0, 0) Day)
|
||||||
[ "3 марта 2015"
|
[ "3 марта 2015"
|
||||||
|
, "3-его марта 2015"
|
||||||
, "3 мар. 2015"
|
, "3 мар. 2015"
|
||||||
|
, "третьего марта 2015"
|
||||||
|
, "третье марта 2015"
|
||||||
|
, "к третьему марта 2015"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 15, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 15, 0, 0, 0) Day)
|
||||||
[ "15 февраля"
|
[ "15 февраля"
|
||||||
, "15.2"
|
, "15.2"
|
||||||
, "15 Фев"
|
, "15 Фев"
|
||||||
|
, "15-го Фев"
|
||||||
|
, "15.02"
|
||||||
|
, "пятнадцатое февраля"
|
||||||
|
, "пятнадцатого фев"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 8, 8, 0, 0, 0) Day)
|
, examples (datetime (2013, 8, 8, 0, 0, 0) Day)
|
||||||
[ "8 августа"
|
[ "8 августа"
|
||||||
, "8 Авг"
|
, "8 Авг"
|
||||||
|
, "восьмое августа"
|
||||||
|
]
|
||||||
|
, examples (datetime (2013, 3, 0, 0, 0, 0) Month)
|
||||||
|
[ "март"
|
||||||
]
|
]
|
||||||
, examples (datetime (2014, 10, 0, 0, 0, 0) Month)
|
, examples (datetime (2014, 10, 0, 0, 0, 0) Month)
|
||||||
[ "Октябрь 2014"
|
[ "Октябрь 2014"
|
||||||
@ -94,40 +125,102 @@ allExamples = concat
|
|||||||
, examples (datetime (1974, 10, 31, 0, 0, 0) Day)
|
, examples (datetime (1974, 10, 31, 0, 0, 0) Day)
|
||||||
[ "31.10.1974"
|
[ "31.10.1974"
|
||||||
, "31.10.74"
|
, "31.10.74"
|
||||||
|
, "тридцать первое октября 1974"
|
||||||
|
, "31-ое октября 1974"
|
||||||
]
|
]
|
||||||
, examples (datetime (2015, 4, 14, 0, 0, 0) Day)
|
, examples (datetime (2015, 4, 14, 0, 0, 0) Day)
|
||||||
[ "14 апреля 2015"
|
[ "14 апреля 2015"
|
||||||
|
, "четырнадцатое апреля 2015"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 10, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 10, 0, 0, 0) Day)
|
||||||
[ "Воскресенье, 10 фев."
|
[ "Воскресенье, 10 фев."
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
||||||
[ "Среда, 13 февраля"
|
[ "Среда, 13 февраля"
|
||||||
|
, "Среда, 13-е февраля"
|
||||||
|
, "13-е февраля"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 18, 0, 0, 0) Day)
|
||||||
[ "Понедельник, 18 фев"
|
[ "Понедельник, 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 (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 (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 (2013, 3, 0, 0, 0, 0) Month)
|
||||||
[ "следующий месяц"
|
[ "следующий месяц"
|
||||||
|
, "в следующем месяце"
|
||||||
]
|
]
|
||||||
, examples (datetime (2014, 0, 0, 0, 0, 0) Year)
|
, 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, 5, 0, 0, 0) Day)
|
||||||
[ "в прошлый вторник"
|
[ "в прошлый вторник"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 19, 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)
|
, examples (datetime (2013, 2, 12, 4, 0, 0) Hour)
|
||||||
[ "в 4 утра"
|
[ "в 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)
|
, examples (datetime (2013, 2, 12, 15, 0, 0) Hour)
|
||||||
[ "в 3"
|
[ "в 3"
|
||||||
, "3 часа"
|
, "3 часа"
|
||||||
@ -136,15 +229,15 @@ allExamples = concat
|
|||||||
, examples (datetime (2013, 2, 12, 3, 18, 0) Minute)
|
, examples (datetime (2013, 2, 12, 3, 18, 0) Minute)
|
||||||
[ "3:18 утра"
|
[ "3:18 утра"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 13, 3, 18, 0) Minute)
|
|
||||||
[ "3:18"
|
|
||||||
]
|
|
||||||
, examples (datetime (2013, 2, 12, 15, 0, 0) Hour)
|
, examples (datetime (2013, 2, 12, 15, 0, 0) Hour)
|
||||||
[ "в 3 часа дня"
|
[ "в 3 часа дня"
|
||||||
, "в 15"
|
, "в 15"
|
||||||
, "в 15 часов"
|
, "в 15 часов"
|
||||||
, "15 часов"
|
, "15 часов"
|
||||||
, "в 15ч"
|
, "в 15ч"
|
||||||
|
, "в пятнадцать часов"
|
||||||
|
, "в 3 часа пополудни"
|
||||||
|
, "в 3 часа после полудня"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 4, 1, 18, 0, 0) Hour)
|
, examples (datetime (2013, 4, 1, 18, 0, 0) Hour)
|
||||||
[ "01.04. в 18 часов"
|
[ "01.04. в 18 часов"
|
||||||
@ -153,7 +246,7 @@ allExamples = concat
|
|||||||
[ "в 17 часов завтра"
|
[ "в 17 часов завтра"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 15, 15, 0) Minute)
|
, examples (datetime (2013, 2, 12, 15, 15, 0) Minute)
|
||||||
["15:15"
|
[ "15:15"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 20, 0, 0) Hour)
|
, examples (datetime (2013, 2, 12, 20, 0, 0) Hour)
|
||||||
[ "8 часов вечера"
|
[ "8 часов вечера"
|
||||||
@ -164,6 +257,7 @@ allExamples = concat
|
|||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 16, 9, 0, 0) Hour)
|
, examples (datetime (2013, 2, 16, 9, 0, 0) Hour)
|
||||||
[ "в субботу в 9 часов"
|
[ "в субботу в 9 часов"
|
||||||
|
, "в субботу в девять"
|
||||||
]
|
]
|
||||||
, examples (datetime (2014, 7, 18, 19, 0, 0) Hour)
|
, examples (datetime (2014, 7, 18, 19, 0, 0) Hour)
|
||||||
[ "пятница, 18 июля 2014 7 часов вечера"
|
[ "пятница, 18 июля 2014 7 часов вечера"
|
||||||
@ -174,6 +268,7 @@ allExamples = concat
|
|||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 4, 30, 1) Second)
|
, examples (datetime (2013, 2, 12, 4, 30, 1) Second)
|
||||||
[ "через 1 секунду"
|
[ "через 1 секунду"
|
||||||
|
, "через секунду"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 4, 31, 0) Second)
|
, examples (datetime (2013, 2, 12, 4, 31, 0) Second)
|
||||||
[ "через 1 минуту"
|
[ "через 1 минуту"
|
||||||
@ -189,6 +284,8 @@ allExamples = concat
|
|||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 5, 30, 0) Minute)
|
, examples (datetime (2013, 2, 12, 5, 30, 0) Minute)
|
||||||
[ "через 1 час"
|
[ "через 1 час"
|
||||||
|
, "через один час"
|
||||||
|
, "через час"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 6, 30, 0) Minute)
|
, examples (datetime (2013, 2, 12, 6, 30, 0) Minute)
|
||||||
[ "через два часа"
|
[ "через два часа"
|
||||||
@ -196,9 +293,6 @@ allExamples = concat
|
|||||||
, examples (datetime (2013, 2, 13, 4, 30, 0) Minute)
|
, examples (datetime (2013, 2, 13, 4, 30, 0) Minute)
|
||||||
[ "через 24 часа"
|
[ "через 24 часа"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 13, 0, 0, 0) Day)
|
|
||||||
[ "завтра"
|
|
||||||
]
|
|
||||||
, examples (datetime (2016, 2, 0, 0, 0, 0) Month)
|
, examples (datetime (2016, 2, 0, 0, 0, 0) Month)
|
||||||
[ "через 3 года"
|
[ "через 3 года"
|
||||||
]
|
]
|
||||||
@ -207,9 +301,11 @@ allExamples = concat
|
|||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 19, 0, 0, 0) Day)
|
||||||
[ "через 1 неделю"
|
[ "через 1 неделю"
|
||||||
|
, "через неделю"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 5, 4, 0, 0) Hour)
|
, examples (datetime (2013, 2, 5, 4, 0, 0) Hour)
|
||||||
[ "7 дней назад"
|
[ "7 дней назад"
|
||||||
|
, "7 дней тому назад"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 1, 29, 4, 0, 0) Hour)
|
, examples (datetime (2013, 1, 29, 4, 0, 0) Hour)
|
||||||
[ "14 дней назад"
|
[ "14 дней назад"
|
||||||
@ -219,6 +315,7 @@ allExamples = concat
|
|||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 5, 0, 0, 0) Day)
|
, examples (datetime (2013, 2, 5, 0, 0, 0) Day)
|
||||||
[ "1 неделю назад"
|
[ "1 неделю назад"
|
||||||
|
, "неделю тому назад"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 1, 22, 0, 0, 0) Day)
|
, 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 (datetimeInterval ((2013, 2, 12, 12, 0, 0), (2013, 2, 12, 19, 0, 0)) Hour)
|
||||||
[ "сегодня днем"
|
[ "сегодня днем"
|
||||||
|
, "сегодня днём"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 13, 30, 0) Minute)
|
, examples (datetime (2013, 2, 12, 13, 30, 0) Minute)
|
||||||
[ "в 13:30 дня"
|
[ "в 13:30 дня"
|
||||||
@ -406,10 +504,10 @@ allExamples = concat
|
|||||||
, "с 14.10. по 15.10.2018"
|
, "с 14.10. по 15.10.2018"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 10, 10, 0, 0, 0) Day)
|
, examples (datetime (2013, 10, 10, 0, 0, 0) Day)
|
||||||
["10.10.2013"
|
[ "10.10.2013"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 10, 10, 0) Minute)
|
, examples (datetime (2013, 2, 12, 10, 10, 0) Minute)
|
||||||
[ "в 10.10"
|
[ "в 10:10"
|
||||||
]
|
]
|
||||||
, examples (datetime (2013, 2, 12, 17, 10, 0) Minute)
|
, examples (datetime (2013, 2, 12, 17, 10, 0) Minute)
|
||||||
[ "17ч10"
|
[ "17ч10"
|
||||||
|
@ -36,7 +36,9 @@ ruleInstants = mkRuleInstants
|
|||||||
, ( "завтра" , TG.Day , 1, "завтра" )
|
, ( "завтра" , TG.Day , 1, "завтра" )
|
||||||
, ( "вчера" , TG.Day , -1, "вчера" )
|
, ( "вчера" , TG.Day , -1, "вчера" )
|
||||||
, ( "послезавтра" , TG.Day , 2, "послезавтра" )
|
, ( "послезавтра" , TG.Day , 2, "послезавтра" )
|
||||||
|
, ( "послепослезавтра", TG.Day , 3, "послепослезавтра" )
|
||||||
, ( "позавчера" , TG.Day , -2, "позавчера" )
|
, ( "позавчера" , TG.Day , -2, "позавчера" )
|
||||||
|
, ( "позапозавчера", TG.Day , -3, "позапозавчера" )
|
||||||
, ( "Конец месяца" , TG.Month , 1, "(конец|конца) месяца" )
|
, ( "Конец месяца" , TG.Month , 1, "(конец|конца) месяца" )
|
||||||
, ( "Конец года" , TG.Year , 1, "(конец|конца) года" )
|
, ( "Конец года" , TG.Year , 1, "(конец|конца) года" )
|
||||||
]
|
]
|
||||||
@ -93,7 +95,7 @@ ruleLastTime :: Rule
|
|||||||
ruleLastTime = Rule
|
ruleLastTime = Rule
|
||||||
{ name = "last <time>"
|
{ name = "last <time>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в )?прошл(ый|ого|ому|ом|ые|ых|ым|ыми|ая)"
|
[ regex "(на |в )?прошл(ый|ого|ому|ом|ое|ые|ых|ыми|ым|ая|ой|ую)"
|
||||||
, Predicate isOkWithThisNext
|
, Predicate isOkWithThisNext
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -264,11 +266,20 @@ ruleNoon = Rule
|
|||||||
, prod = \_ -> tt $ hour False 12
|
, prod = \_ -> tt $ hour False 12
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ruleMidnight :: Rule
|
||||||
|
ruleMidnight = Rule
|
||||||
|
{ name = "midnight"
|
||||||
|
, pattern =
|
||||||
|
[ regex "полночь"
|
||||||
|
]
|
||||||
|
, prod = \_ -> tt $ hour False 0
|
||||||
|
}
|
||||||
|
|
||||||
ruleThisnextDayofweek :: Rule
|
ruleThisnextDayofweek :: Rule
|
||||||
ruleThisnextDayofweek = Rule
|
ruleThisnextDayofweek = Rule
|
||||||
{ name = "this|next <day-of-week>"
|
{ name = "this|next <day-of-week>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "следующ(ий|ая|ее)"
|
[ regex "след(ующ(ий|ая|ее|ую))?"
|
||||||
, Predicate isADayOfWeek
|
, Predicate isADayOfWeek
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -296,7 +307,7 @@ ruleNextCycle :: Rule
|
|||||||
ruleNextCycle = Rule
|
ruleNextCycle = Rule
|
||||||
{ name = "next <cycle>"
|
{ name = "next <cycle>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в |на )?следующ(ий|его|ему|им|ем|ие|их|ими)"
|
[ regex "(на |в |к )?след(ующ(ий|его|ему|ими|ем|ие|их|им|ей|ая|ую))?"
|
||||||
, dimension TimeGrain
|
, dimension TimeGrain
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -309,7 +320,7 @@ ruleOnDate :: Rule
|
|||||||
ruleOnDate = Rule
|
ruleOnDate = Rule
|
||||||
{ name = "on <date>"
|
{ name = "on <date>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "в"
|
[ regex "во|в|к"
|
||||||
, dimension Time
|
, dimension Time
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -321,7 +332,7 @@ ruleLastCycle :: Rule
|
|||||||
ruleLastCycle = Rule
|
ruleLastCycle = Rule
|
||||||
{ name = "last <cycle>"
|
{ name = "last <cycle>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в )?прошл(ый|ого|ому|ым|ом|ые|ых|ыми)"
|
[ regex "(на |в )?прошл(ый|ого|ому|ом|ое|ые|ых|ыми|ым|ая|ой|ую)"
|
||||||
, dimension TimeGrain
|
, dimension TimeGrain
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -330,11 +341,24 @@ ruleLastCycle = Rule
|
|||||||
_ -> Nothing
|
_ -> 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
|
||||||
ruleLastCycle2 = Rule
|
ruleLastCycle2 = Rule
|
||||||
{ name = "last <cycle>"
|
{ name = "last <cycle>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в )?прошедш(ий|его|ему|им|ем|их|ие|ими)"
|
[ regex "(в )?прошедш(ий|его|ему|ими|ем|их|ие|им)"
|
||||||
, dimension TimeGrain
|
, dimension TimeGrain
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -360,7 +384,7 @@ ruleAfternoon :: Rule
|
|||||||
ruleAfternoon = Rule
|
ruleAfternoon = Rule
|
||||||
{ name = "afternoon"
|
{ name = "afternoon"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "дня|днем"
|
[ regex "(дня|дн[её]м)|пополудни|после полудня"
|
||||||
]
|
]
|
||||||
, prod = \_ ->
|
, prod = \_ ->
|
||||||
let from = hour False 12
|
let from = hour False 12
|
||||||
@ -394,7 +418,6 @@ ruleNamedmonthDayofmonthOrdinal = Rule
|
|||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ruleHourofdayIntegerAsRelativeMinutes :: Rule
|
ruleHourofdayIntegerAsRelativeMinutes :: Rule
|
||||||
ruleHourofdayIntegerAsRelativeMinutes = Rule
|
ruleHourofdayIntegerAsRelativeMinutes = Rule
|
||||||
{ name = "<hour-of-day> <integer> (as relative minutes)"
|
{ name = "<hour-of-day> <integer> (as relative minutes)"
|
||||||
@ -487,7 +510,7 @@ ruleDurationAgo = Rule
|
|||||||
{ name = "<duration> ago"
|
{ name = "<duration> ago"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ dimension Duration
|
[ dimension Duration
|
||||||
, regex "назад"
|
, regex "(тому )?назад"
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
(Token Duration dd:_:_) ->
|
(Token Duration dd:_:_) ->
|
||||||
@ -640,8 +663,6 @@ ruleWeek = Rule
|
|||||||
let match = Text.strip $ Text.toLower m
|
let match = Text.strip $ Text.toLower m
|
||||||
period <- case match of
|
period <- case match of
|
||||||
"эта" -> interval TTime.Closed (cycleNth TG.Week 0) end
|
"эта" -> 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
|
"неделя" -> interval TTime.Open today end
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
let l = case match of { "неделя" -> mkLatent; _ -> id; }
|
let l = case match of { "неделя" -> mkLatent; _ -> id; }
|
||||||
@ -720,7 +741,7 @@ ruleMorning :: Rule
|
|||||||
ruleMorning = Rule
|
ruleMorning = Rule
|
||||||
{ name = "morning"
|
{ name = "morning"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "утро|утром|утра"
|
[ regex "утром|утро|утра"
|
||||||
]
|
]
|
||||||
, prod = \_ ->
|
, prod = \_ ->
|
||||||
let from = hour False 3
|
let from = hour False 3
|
||||||
@ -733,7 +754,7 @@ ruleThisPartofday :: Rule
|
|||||||
ruleThisPartofday = Rule
|
ruleThisPartofday = Rule
|
||||||
{ name = "this <part-of-day>"
|
{ name = "this <part-of-day>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в )?(это|эту|этот|этого|этому|эти)"
|
[ regex "(в )?(эту|этот|этого|этому|эти|это)"
|
||||||
, Predicate isAPartOfDay
|
, Predicate isAPartOfDay
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -745,7 +766,7 @@ ruleThisCycle :: Rule
|
|||||||
ruleThisCycle = Rule
|
ruleThisCycle = Rule
|
||||||
{ name = "this <cycle>"
|
{ name = "this <cycle>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в )?(это|эту|этот|этого|этому|эти)"
|
[ regex "(в )?(эту|этот|этого|этому|эти)"
|
||||||
, dimension TimeGrain
|
, dimension TimeGrain
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -758,7 +779,7 @@ ruleThisTime :: Rule
|
|||||||
ruleThisTime = Rule
|
ruleThisTime = Rule
|
||||||
{ name = "this <time>"
|
{ name = "this <time>"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "(в )?(это|эту|этот|этого|этому|эти)"
|
[ regex "(в )?(эту|этот|этого|этому|эти|это)"
|
||||||
, Predicate isOkWithThisNext
|
, Predicate isOkWithThisNext
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
@ -797,7 +818,7 @@ ruleNight :: Rule
|
|||||||
ruleNight = Rule
|
ruleNight = Rule
|
||||||
{ name = "night"
|
{ name = "night"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "ночь|ночи|ночью"
|
[ regex "ночью|ночи|ночь"
|
||||||
]
|
]
|
||||||
, prod = \_ ->
|
, prod = \_ ->
|
||||||
let from = hour False 0
|
let from = hour False 0
|
||||||
@ -838,7 +859,7 @@ ruleHhmm :: Rule
|
|||||||
ruleHhmm = Rule
|
ruleHhmm = Rule
|
||||||
{ name = "hh:mm"
|
{ name = "hh:mm"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "((?:[01]?\\d)|(?:2[0-3]))[:.ч]([0-5]\\d)(?:час(ов|а|у)?|ч)?"
|
[ regex "((?:[01]?\\d)|(?:2[0-3]))[:ч]([0-5]\\d)(?:час(ов|а|у)?|ч)?"
|
||||||
]
|
]
|
||||||
, prod = \case
|
, prod = \case
|
||||||
(Token RegexMatch (GroupMatch (m1:m2:_)):_) -> do
|
(Token RegexMatch (GroupMatch (m1:m2:_)):_) -> do
|
||||||
@ -1082,6 +1103,7 @@ rules =
|
|||||||
, ruleIntersectBy
|
, ruleIntersectBy
|
||||||
, ruleIntersectByOfFromS
|
, ruleIntersectByOfFromS
|
||||||
, ruleLastCycle
|
, ruleLastCycle
|
||||||
|
, ruleBeforeLastCycle
|
||||||
, ruleLastCycle2
|
, ruleLastCycle2
|
||||||
, ruleLastCycleOfTime
|
, ruleLastCycleOfTime
|
||||||
, ruleLastCycleOfTime2
|
, ruleLastCycleOfTime2
|
||||||
@ -1100,6 +1122,7 @@ rules =
|
|||||||
, ruleNextNCycle
|
, ruleNextNCycle
|
||||||
, ruleNight
|
, ruleNight
|
||||||
, ruleNoon
|
, ruleNoon
|
||||||
|
, ruleMidnight
|
||||||
, ruleNthTimeAfterTime
|
, ruleNthTimeAfterTime
|
||||||
, ruleNthTimeOfTime
|
, ruleNthTimeOfTime
|
||||||
, ruleNthTimeOfTime2
|
, ruleNthTimeOfTime2
|
||||||
|
@ -24,10 +24,10 @@ grains = [ ("second (grain) ", "сек(унд(а|у|ы)?)?", Second)
|
|||||||
, ("minute (grain)" , "мин(ут(а|у|ы)?)?", Minute)
|
, ("minute (grain)" , "мин(ут(а|у|ы)?)?", Minute)
|
||||||
, ("hour (grain)" , "ч(ас(а|ов)?)?", Hour)
|
, ("hour (grain)" , "ч(ас(а|ов)?)?", Hour)
|
||||||
, ("day (grain)" , "день|дня|дней", Day)
|
, ("day (grain)" , "день|дня|дней", Day)
|
||||||
, ("week (grain)" , "недел(ь|я|и|ю)?", Week)
|
, ("week (grain)" , "недел(ь|я|и|ю|е)?", Week)
|
||||||
, ("month (grain)" , "месяц(а|ев)?", Month)
|
, ("month (grain)" , "месяц(а|ев|е)?", Month)
|
||||||
, ("quarter (grain)", "квартал(а)?", Quarter)
|
, ("quarter (grain)", "квартал(а|е)?", Quarter)
|
||||||
, ("year (grain)" , "года?|лет", Year)
|
, ("year (grain)" , "год(а|у)?|лет", Year)
|
||||||
]
|
]
|
||||||
|
|
||||||
rules :: [Rule]
|
rules :: [Rule]
|
||||||
|
Loading…
Reference in New Issue
Block a user