2017-03-08 21:33:55 +03:00
|
|
|
-- Copyright (c) 2016-present, Facebook, Inc.
|
|
|
|
-- All rights reserved.
|
|
|
|
--
|
|
|
|
-- This source code is licensed under the BSD-style license found in the
|
2019-05-22 20:36:43 +03:00
|
|
|
-- LICENSE file in the root directory of this source tree.
|
2017-03-08 21:33:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
{-# LANGUAGE GADTs #-}
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
|
|
|
|
module Duckling.Quantity.KO.Rules
|
|
|
|
( rules ) where
|
|
|
|
|
|
|
|
import Prelude
|
|
|
|
import Data.String
|
|
|
|
|
|
|
|
import Duckling.Dimensions.Types
|
2017-03-16 23:42:15 +03:00
|
|
|
import Duckling.Numeral.Types (NumeralData (..))
|
|
|
|
import qualified Duckling.Numeral.Types as TNumeral
|
2017-03-08 21:33:55 +03:00
|
|
|
import Duckling.Quantity.Helpers
|
|
|
|
import qualified Duckling.Quantity.Types as TQuantity
|
|
|
|
import Duckling.Regex.Types
|
|
|
|
import Duckling.Types
|
|
|
|
|
|
|
|
ruleQuantityOfProduct :: Rule
|
|
|
|
ruleQuantityOfProduct = Rule
|
|
|
|
{ name = "<quantity> of product"
|
|
|
|
, pattern =
|
|
|
|
[ dimension Quantity
|
2017-09-07 22:33:31 +03:00
|
|
|
, regex "의 (삼겹살|콜라)"
|
2017-03-08 21:33:55 +03:00
|
|
|
]
|
|
|
|
, prod = \tokens -> case tokens of
|
|
|
|
(Token Quantity qd:
|
|
|
|
Token RegexMatch (GroupMatch (match:_)):
|
|
|
|
_) -> Just . Token Quantity $ withProduct match qd
|
|
|
|
_ -> Nothing
|
|
|
|
}
|
|
|
|
|
|
|
|
ruleQuantityOfProduct2 :: Rule
|
|
|
|
ruleQuantityOfProduct2 = Rule
|
|
|
|
{ name = "<quantity> of product"
|
|
|
|
, pattern =
|
2017-09-07 22:33:31 +03:00
|
|
|
[ regex "(삼겹살|콜라)"
|
2017-03-08 21:33:55 +03:00
|
|
|
, dimension Quantity
|
|
|
|
]
|
|
|
|
, prod = \tokens -> case tokens of
|
|
|
|
(Token RegexMatch (GroupMatch (match:_)):
|
|
|
|
Token Quantity qd:
|
|
|
|
_) -> Just . Token Quantity $ withProduct match qd
|
|
|
|
_ -> Nothing
|
|
|
|
}
|
|
|
|
|
2017-03-16 23:42:15 +03:00
|
|
|
ruleNumeralUnits :: Rule
|
|
|
|
ruleNumeralUnits = Rule
|
2017-03-08 21:33:55 +03:00
|
|
|
{ name = "<number> <units>"
|
|
|
|
, pattern =
|
2017-03-14 23:19:13 +03:00
|
|
|
[ dimension Numeral
|
2017-09-07 22:33:31 +03:00
|
|
|
, regex "(개|판|그(램|람)|근|파운(드|즈)|접1시|그릇|컵)"
|
2017-03-08 21:33:55 +03:00
|
|
|
]
|
|
|
|
, prod = \tokens -> case tokens of
|
2017-03-16 23:42:15 +03:00
|
|
|
(Token Numeral NumeralData {TNumeral.value = v}:
|
2017-03-08 21:33:55 +03:00
|
|
|
Token RegexMatch (GroupMatch (match:_)):
|
|
|
|
_) -> case match of
|
2017-09-07 22:33:31 +03:00
|
|
|
"개" -> Just . Token Quantity $ quantity TQuantity.Unnamed v
|
|
|
|
"판" -> Just . Token Quantity $ quantity (TQuantity.Custom "판") v
|
|
|
|
"근" -> Just . Token Quantity $ quantity (TQuantity.Custom "근") v
|
|
|
|
"그램" -> Just . Token Quantity $ quantity TQuantity.Gram v
|
|
|
|
"그람" -> Just . Token Quantity $ quantity TQuantity.Gram v
|
|
|
|
"파운드" -> Just . Token Quantity $ quantity TQuantity.Pound v
|
|
|
|
"파운즈" -> Just . Token Quantity $ quantity TQuantity.Pound v
|
|
|
|
"접1시" -> Just . Token Quantity $ quantity TQuantity.Dish v
|
|
|
|
"그릇" -> Just . Token Quantity $ quantity TQuantity.Bowl v
|
|
|
|
"컵" -> Just . Token Quantity $ quantity TQuantity.Cup v
|
2017-03-08 21:33:55 +03:00
|
|
|
_ -> Nothing
|
|
|
|
_ -> Nothing
|
|
|
|
}
|
|
|
|
|
|
|
|
rules :: [Rule]
|
|
|
|
rules =
|
2017-03-16 23:42:15 +03:00
|
|
|
[ ruleNumeralUnits
|
2017-03-08 21:33:55 +03:00
|
|
|
, ruleQuantityOfProduct
|
|
|
|
, ruleQuantityOfProduct2
|
|
|
|
]
|