Update RU Rules HashMap lookups update

Summary: Update of RU Rules hashmap

Reviewed By: patapizza

Differential Revision: D4840947

fbshipit-source-id: 00cb679
This commit is contained in:
ADAM LIU 2017-04-06 15:40:16 -07:00 committed by Facebook Github Bot
parent 78ecaa3728
commit 572ff95adf

View File

@ -12,8 +12,11 @@
module Duckling.Numeral.RU.Rules
( rules ) where
import qualified Data.HashMap.Strict as HashMap
import Data.HashMap.Strict (HashMap)
import Data.Maybe
import qualified Data.Text as Text
import Data.Text (Text)
import Prelude
import Data.String
@ -24,6 +27,18 @@ import qualified Duckling.Numeral.Types as TNumeral
import Duckling.Regex.Types
import Duckling.Types
dozensMap :: HashMap Text Integer
dozensMap = HashMap.fromList
[ ( "\x0434\x0432\x0430\x0434\x0446\x0430\x0442\x044c", 20)
, ( "\x0442\x0440\x0438\x0434\x0446\x0430\x0442\x044c", 30)
, ( "\x0441\x043e\x0440\x043e\x043a", 40)
, ( "\x043f\x044f\x0442\x044c\x0434\x0435\x0441\x044f\x0442", 50)
, ( "\x0448\x0435\x0441\x0442\x044c\x0434\x0435\x0441\x044f\x0442", 60)
, ( "\x0441\x0435\x043c\x044c\x0434\x0435\x0441\x044f\x0442", 70)
, ( "\x0432\x043e\x0441\x0435\x043c\x044c\x0434\x0435\x0441\x044f\x0442", 80)
, ( "\x0434\x0435\x0432\x044f\x043d\x043e\x0441\x0442\x043e", 90)
]
ruleInteger5 :: Rule
ruleInteger5 = Rule
{ name = "integer (20..90)"
@ -31,16 +46,8 @@ ruleInteger5 = Rule
[ regex "(\x0434\x0432\x0430\x0434\x0446\x0430\x0442\x044c|\x0442\x0440\x0438\x0434\x0446\x0430\x0442\x044c|\x0441\x043e\x0440\x043e\x043a|\x043f\x044f\x0442\x044c\x0434\x0435\x0441\x044f\x0442|\x0448\x0435\x0441\x0442\x044c\x0434\x0435\x0441\x044f\x0442|\x0441\x0435\x043c\x044c\x0434\x0435\x0441\x044f\x0442|\x0432\x043e\x0441\x0435\x043c\x044c\x0434\x0435\x0441\x044f\x0442|\x0434\x0435\x0432\x044f\x043d\x043e\x0441\x0442\x043e)"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) -> case match of
"\x0434\x0432\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 20
"\x0442\x0440\x0438\x0434\x0446\x0430\x0442\x044c" -> integer 30
"\x0441\x043e\x0440\x043e\x043a" -> integer 40
"\x043f\x044f\x0442\x044c\x0434\x0435\x0441\x044f\x0442" -> integer 50
"\x0448\x0435\x0441\x0442\x044c\x0434\x0435\x0441\x044f\x0442" -> integer 60
"\x0441\x0435\x043c\x044c\x0434\x0435\x0441\x044f\x0442" -> integer 70
"\x0432\x043e\x0441\x0435\x043c\x044c\x0434\x0435\x0441\x044f\x0442" -> integer 80
"\x0434\x0435\x0432\x044f\x043d\x043e\x0441\x0442\x043e" -> integer 90
_ -> Nothing
(Token RegexMatch (GroupMatch (match:_)):_) ->
HashMap.lookup (Text.toLower match) dozensMap >>= integer
_ -> Nothing
}
@ -89,6 +96,19 @@ ruleInteger3 = Rule
, prod = \_ -> integer 2
}
hundredsMap :: HashMap Text Integer
hundredsMap = HashMap.fromList
[ ( "\x0441\x0442\x043e", 100)
, ( "\x0434\x0432\x0435\x0441\x0442\x0438", 200)
, ( "\x0442\x0440\x0438\x0441\x0442\x043e", 300)
, ( "\x0447\x0435\x0442\x044b\x0440\x0435\x0441\x0442\x043e", 400)
, ( "\x043f\x044f\x0442\x044c\x0441\x043e\x0442", 500)
, ( "\x0448\x0435\x0441\x0442\x044c\x0441\x043e\x0442", 600)
, ( "\x0441\x0435\x043c\x044c\x0441\x043e\x0442", 700)
, ( "\x0432\x043e\x0441\x0435\x043c\x044c\x0441\x043e\x0442", 800)
, ( "\x0434\x0435\x0432\x044f\x0442\x044c\x0441\x043e\x0442", 900)
]
ruleInteger6 :: Rule
ruleInteger6 = Rule
{ name = "integer (100..900)"
@ -96,17 +116,8 @@ ruleInteger6 = Rule
[ regex "(\x0441\x0442\x043e|\x0434\x0432\x0435\x0441\x0442\x0438|\x0442\x0440\x0438\x0441\x0442\x043e|\x0447\x0435\x0442\x044b\x0440\x0435\x0441\x0442\x043e|\x043f\x044f\x0442\x044c\x0441\x043e\x0442|\x0448\x0435\x0441\x0442\x044c\x0441\x043e\x0442|\x0441\x0435\x043c\x044c\x0441\x043e\x0442|\x0432\x043e\x0441\x0435\x043c\x044c\x0441\x043e\x0442|\x0434\x0435\x0432\x044f\x0442\x044c\x0441\x043e\x0442)"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) -> case match of
"\x0441\x0442\x043e" -> integer 100
"\x0434\x0432\x0435\x0441\x0442\x0438" -> integer 200
"\x0442\x0440\x0438\x0441\x0442\x043e" -> integer 300
"\x0447\x0435\x0442\x044b\x0440\x0435\x0441\x0442\x043e" -> integer 400
"\x043f\x044f\x0442\x044c\x0441\x043e\x0442" -> integer 500
"\x0448\x0435\x0441\x0442\x044c\x0441\x043e\x0442" -> integer 600
"\x0441\x0435\x043c\x044c\x0441\x043e\x0442" -> integer 700
"\x0432\x043e\x0441\x0435\x043c\x044c\x0441\x043e\x0442" -> integer 800
"\x0434\x0435\x0432\x044f\x0442\x044c\x0441\x043e\x0442" -> integer 900
_ -> Nothing
(Token RegexMatch (GroupMatch (match:_)):_) ->
HashMap.lookup (Text.toLower match) hundredsMap >>= integer
_ -> Nothing
}
@ -180,6 +191,27 @@ ruleInteger = Rule
, prod = \_ -> integer 0
}
threeToNineteenMap:: HashMap Text Integer
threeToNineteenMap = HashMap.fromList
[ ( "\x0442\x0440\x0438", 3)
, ( "\x0447\x0435\x0442\x044b\x0440\x0435", 4)
, ( "\x043f\x044f\x0442\x044c", 5)
, ( "\x0448\x0435\x0441\x0442\x044c", 6)
, ( "\x0441\x0435\x043c\x044c", 7)
, ( "\x0432\x043e\x0441\x0435\x043c\x044c", 8)
, ( "\x0434\x0435\x0432\x044f\x0442\x044c", 9)
, ( "\x0434\x0435\x0441\x044f\x0442\x044c", 10)
, ( "\x043e\x0434\x0438\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 11)
, ( "\x0434\x0432\x0435\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 12)
, ( "\x0442\x0440\x0438\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 13)
, ( "\x0447\x0435\x0442\x044b\x0440\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 14)
, ( "\x043f\x044f\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 15)
, ( "\x0448\x0435\x0441\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 16)
, ( "\x0441\x0435\x043c\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 17)
, ( "\x0432\x043e\x0441\x0435\x043c\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 18)
, ( "\x0434\x0435\x0432\x044f\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c", 19)
]
ruleInteger4 :: Rule
ruleInteger4 = Rule
{ name = "integer (3..19)"
@ -187,25 +219,8 @@ ruleInteger4 = Rule
[ regex "(\x0442\x0440\x0438|\x0447\x0435\x0442\x044b\x0440\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0447\x0435\x0442\x044b\x0440\x0435|\x043f\x044f\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x043f\x044f\x0442\x044c|\x0448\x0435\x0441\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0448\x0435\x0441\x0442\x044c|\x0441\x0435\x043c\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0441\x0435\x043c\x044c|\x0432\x043e\x0441\x0435\x043c\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0432\x043e\x0441\x0435\x043c\x044c|\x0434\x0435\x0432\x044f\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0434\x0435\x0432\x044f\x0442\x044c|\x0434\x0435\x0441\x044f\x0442\x044c|\x043e\x0434\x0438\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0434\x0432\x0435\x043d\x0430\x0434\x0446\x0430\x0442\x044c|\x0442\x0440\x0438\x043d\x0430\x0434\x0446\x0430\x0442\x044c)"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) -> case match of
"\x0442\x0440\x0438" -> integer 3
"\x0447\x0435\x0442\x044b\x0440\x0435" -> integer 4
"\x043f\x044f\x0442\x044c" -> integer 5
"\x0448\x0435\x0441\x0442\x044c" -> integer 6
"\x0441\x0435\x043c\x044c" -> integer 7
"\x0432\x043e\x0441\x0435\x043c\x044c" -> integer 8
"\x0434\x0435\x0432\x044f\x0442\x044c" -> integer 9
"\x0434\x0435\x0441\x044f\x0442\x044c" -> integer 10
"\x043e\x0434\x0438\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 11
"\x0434\x0432\x0435\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 12
"\x0442\x0440\x0438\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 13
"\x0447\x0435\x0442\x044b\x0440\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 14
"\x043f\x044f\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 15
"\x0448\x0435\x0441\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 16
"\x0441\x0435\x043c\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 17
"\x0432\x043e\x0441\x0435\x043c\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 18
"\x0434\x0435\x0432\x044f\x0442\x043d\x0430\x0434\x0446\x0430\x0442\x044c" -> integer 19
_ -> Nothing
(Token RegexMatch (GroupMatch (match:_)):_) ->
HashMap.lookup (Text.toLower match) threeToNineteenMap >>= integer
_ -> Nothing
}