From b12a30b7500d020120b2834a267319305401068c Mon Sep 17 00:00:00 2001 From: "f.abapolov" Date: Wed, 6 Sep 2023 10:30:42 +0300 Subject: [PATCH] =?UTF-8?q?support=20mm/yyyy=20and=20"=D0=B2=20=D0=BC?= =?UTF-8?q?=D0=B0=D0=B5",=20"=D0=B2=20=D0=BE=D0=BA=D1=82=D1=8F=D0=B1=D1=80?= =?UTF-8?q?=D0=B5",=20etc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Duckling/Time/RU/Rules.hs | 51 ++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/Duckling/Time/RU/Rules.hs b/Duckling/Time/RU/Rules.hs index 66f88b8dd..36e49da4f 100644 --- a/Duckling/Time/RU/Rules.hs +++ b/Duckling/Time/RU/Rules.hs @@ -56,17 +56,17 @@ ruleDaysOfWeek = mkRuleDaysOfWeek ruleMonths :: [Rule] ruleMonths = mkRuleMonths - [ ( "Январь" , "январ(ь|я)|янв\\.?" ) - , ( "Февраль" , "феврал(ь|я)|фев\\.?" ) - , ( "Март" , "март(а)?|мар\\.?" ) - , ( "Апрель" , "апрел(ь|я)|апр\\.?" ) - , ( "Май" , "ма(й|я)" ) - , ( "Июнь" , "июн(ь|я)|июн\\.?" ) - , ( "Июль" , "июл(ь|я)|июл\\.?" ) - , ( "Август" , "август(а)?|авг\\.?" ) - , ( "Сентябрь" , "сентябр(ь|я)|сен\\.?" ) - , ( "Октябрь" , "октябр(ь|я)|окт\\.?" ) - , ( "Ноябрь" , "ноябр(ь|я)?|ноя\\.?" ) + [ ( "Январь" , "январ(ь|я|е)|янв\\.?" ) + , ( "Февраль" , "феврал(ь|я|e)|фев\\.?" ) + , ( "Март" , "март(а|е)?|мар\\.?" ) + , ( "Апрель" , "апрел(ь|я|е)|апр\\.?" ) + , ( "Май" , "ма(й|я|е)" ) + , ( "Июнь" , "июн(ь|я|е)|июн\\.?" ) + , ( "Июль" , "июл(ь|я|е)|июл\\.?" ) + , ( "Август" , "август(а|е)?|авг\\.?" ) + , ( "Сентябрь" , "сентябр(ь|я|е)|сен\\.?" ) + , ( "Октябрь" , "октябр(ь|я|е)|окт\\.?" ) + , ( "Ноябрь" , "ноябр(ь|я|е)?|ноя\\.?" ) , ( "Декабрь" , "декабр(ь|я)|дек\\.?" ) ] @@ -708,6 +708,20 @@ ruleYyyymmdd = Rule _ -> Nothing } +ruleMMYYYY :: Rule +ruleMMYYYY = Rule + { name = "mm/yyyy" + , pattern = + [ regex "(0?[1-9]|1[0-2])[/-](\\d{4})" + ] + , prod = \case + (Token RegexMatch (GroupMatch (mm:yy:_)):_) -> do + y <- parseInt yy + m <- parseInt mm + tt $ yearMonth y m + _ -> Nothing + } + ruleIntersectByOfFromS :: Rule ruleIntersectByOfFromS = Rule { name = "intersect by 'of', 'from', 's" @@ -1031,6 +1045,20 @@ ruleMmddyyyy = Rule _ -> Nothing } +ruleMmyyyy :: Rule +ruleMmyyyy = Rule + { name = "mm/yyyy" + , pattern = + [ regex "([012]?[1-9]|10|20|30|31)\\.(\\d{2,4})" + ] + , prod = \case + (Token RegexMatch (GroupMatch (m1:m2:m3:_)):_) -> do + y <- parseInt m3 + m <- parseInt m2 + tt $ yearMonth y m + _ -> Nothing + } + ruleTimeofdayOclock :: Rule ruleTimeofdayOclock = Rule { name = " o'clock" @@ -1148,6 +1176,7 @@ rules = , ruleYearLatent , ruleYearLatent2 , ruleYyyymmdd + , ruleMMYYYY , ruleTimezone ] ++ ruleInstants