mirror of
https://github.com/facebook/duckling.git
synced 2024-11-29 01:03:44 +03:00
HashMap lookups for large regexes
Summary: Added Hashmap lookups for Regex for Numeral/ID Reviewed By: patapizza Differential Revision: D5128492 fbshipit-source-id: 5ab928b
This commit is contained in:
parent
69ce841710
commit
21c9b8ed7a
@ -12,8 +12,11 @@
|
|||||||
module Duckling.Numeral.ID.Rules
|
module Duckling.Numeral.ID.Rules
|
||||||
( rules ) where
|
( rules ) where
|
||||||
|
|
||||||
|
import qualified Data.HashMap.Strict as HashMap
|
||||||
|
import Data.HashMap.Strict (HashMap)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import qualified Data.Text as Text
|
import qualified Data.Text as Text
|
||||||
|
import Data.Text (Text)
|
||||||
import Prelude
|
import Prelude
|
||||||
import Data.String
|
import Data.String
|
||||||
|
|
||||||
@ -24,6 +27,22 @@ import qualified Duckling.Numeral.Types as TNumeral
|
|||||||
import Duckling.Regex.Types
|
import Duckling.Regex.Types
|
||||||
import Duckling.Types
|
import Duckling.Types
|
||||||
|
|
||||||
|
ruleIntegerMap :: HashMap Text Integer
|
||||||
|
ruleIntegerMap = HashMap.fromList
|
||||||
|
[ ( "kosong" , 0 )
|
||||||
|
, ( "nol" , 0 )
|
||||||
|
, ( "satu" , 1 )
|
||||||
|
, ( "dua" , 2 )
|
||||||
|
, ( "tiga" , 3 )
|
||||||
|
, ( "empat" , 4 )
|
||||||
|
, ( "lima" , 5 )
|
||||||
|
, ( "enam" , 6 )
|
||||||
|
, ( "tujuh" , 7 )
|
||||||
|
, ( "delapan" , 8 )
|
||||||
|
, ( "sembilan", 9 )
|
||||||
|
, ( "sebelas" , 11 )
|
||||||
|
]
|
||||||
|
|
||||||
ruleTeen :: Rule
|
ruleTeen :: Rule
|
||||||
ruleTeen = Rule
|
ruleTeen = Rule
|
||||||
{ name = "teen"
|
{ name = "teen"
|
||||||
@ -209,20 +228,8 @@ ruleInteger = Rule
|
|||||||
[ regex "(kosong|nol|satu|dua|tiga|empat|lima|enam|tujuh|delapan|sembilan|sebelas)"
|
[ regex "(kosong|nol|satu|dua|tiga|empat|lima|enam|tujuh|delapan|sembilan|sebelas)"
|
||||||
]
|
]
|
||||||
, prod = \tokens -> case tokens of
|
, prod = \tokens -> case tokens of
|
||||||
(Token RegexMatch (GroupMatch (match:_)):_) -> case Text.toLower match of
|
(Token RegexMatch (GroupMatch (match:_)):_) ->
|
||||||
"kosong" -> integer 0
|
HashMap.lookup (Text.toLower match) ruleIntegerMap >>= integer
|
||||||
"nol" -> integer 0
|
|
||||||
"satu" -> integer 1
|
|
||||||
"dua" -> integer 2
|
|
||||||
"tiga" -> integer 3
|
|
||||||
"empat" -> integer 4
|
|
||||||
"lima" -> integer 5
|
|
||||||
"enam" -> integer 6
|
|
||||||
"tujuh" -> integer 7
|
|
||||||
"delapan" -> integer 8
|
|
||||||
"sembilan" -> integer 9
|
|
||||||
"sebelas" -> integer 11
|
|
||||||
_ -> Nothing
|
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user