mirror of
https://github.com/facebook/duckling.git
synced 2024-11-28 08:34:46 +03:00
Support intervals
Summary: Support intervals for Duckling AmountOfMoney KO Reviewed By: haoxuany Differential Revision: D13020692 fbshipit-source-id: 79e1d99acf317467c1b06b156f47a497c91062da
This commit is contained in:
parent
1052914cb4
commit
5de0b1fbb6
@ -76,4 +76,38 @@ allExamples = concat
|
|||||||
, "10원"
|
, "10원"
|
||||||
, "10₩"
|
, "10₩"
|
||||||
]
|
]
|
||||||
|
, examples (between KRW (25000, 30000))
|
||||||
|
[ "25000 - 30000원"
|
||||||
|
, "25000원 - 30000원"
|
||||||
|
, "이만오천원 - 삼만원"
|
||||||
|
]
|
||||||
|
, examples (above KRW 5000)
|
||||||
|
[ "5000원 이상"
|
||||||
|
, "5000원 초과"
|
||||||
|
, "오천원 이상"
|
||||||
|
, "오천원 초과"
|
||||||
|
]
|
||||||
|
, examples (under KRW 10000)
|
||||||
|
[ "10000원 이하"
|
||||||
|
, "10000원 미만"
|
||||||
|
, "만원 이하"
|
||||||
|
, "만원 미만"
|
||||||
|
]
|
||||||
|
, examples (between Dollar (10, 20))
|
||||||
|
[ "10 - 20 달러"
|
||||||
|
, "10달러 - 20달러"
|
||||||
|
, "십달러 - 이십달러"
|
||||||
|
]
|
||||||
|
, examples (above Dollar 10)
|
||||||
|
[ "10달러 이상"
|
||||||
|
, "10달러 초과"
|
||||||
|
, "십달러 이상"
|
||||||
|
, "십달러 초과"
|
||||||
|
]
|
||||||
|
, examples (under Dollar 10)
|
||||||
|
[ "10달러 이하"
|
||||||
|
, "10달러 미만"
|
||||||
|
, "십달러 이하"
|
||||||
|
, "십달러 미만"
|
||||||
|
]
|
||||||
]
|
]
|
||||||
|
@ -21,7 +21,7 @@ import Prelude
|
|||||||
import Duckling.Dimensions.Types
|
import Duckling.Dimensions.Types
|
||||||
import Duckling.AmountOfMoney.Helpers
|
import Duckling.AmountOfMoney.Helpers
|
||||||
import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..))
|
import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..))
|
||||||
import Duckling.Numeral.Helpers (isPositive)
|
import Duckling.Numeral.Helpers (isNatural, isPositive)
|
||||||
import Duckling.Numeral.Types (NumeralData (..))
|
import Duckling.Numeral.Types (NumeralData (..))
|
||||||
import Duckling.Types
|
import Duckling.Types
|
||||||
import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney
|
import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney
|
||||||
@ -87,7 +87,7 @@ ruleCent :: Rule
|
|||||||
ruleCent = Rule
|
ruleCent = Rule
|
||||||
{ name = "cent"
|
{ name = "cent"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "cents?|센(트|츠)"
|
[ regex "센트"
|
||||||
]
|
]
|
||||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Cent
|
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Cent
|
||||||
}
|
}
|
||||||
@ -158,11 +158,108 @@ ruleDirham :: Rule
|
|||||||
ruleDirham = Rule
|
ruleDirham = Rule
|
||||||
{ name = "dirham"
|
{ name = "dirham"
|
||||||
, pattern =
|
, pattern =
|
||||||
[ regex "dirhams?"
|
[ regex "디르함"
|
||||||
]
|
]
|
||||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly AED
|
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly AED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ruleIntervalBetweenNumeral :: Rule
|
||||||
|
ruleIntervalBetweenNumeral = Rule
|
||||||
|
{ name = "between|from <numeral> to|and <amount-of-money>"
|
||||||
|
, pattern =
|
||||||
|
[ Predicate isPositive
|
||||||
|
, regex "에서"
|
||||||
|
, Predicate isSimpleAmountOfMoney
|
||||||
|
]
|
||||||
|
, prod = \case
|
||||||
|
(Token Numeral NumeralData {TNumeral.value = from}:
|
||||||
|
_:
|
||||||
|
Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just to, TAmountOfMoney.currency = c}:
|
||||||
|
_) ->
|
||||||
|
(Just (Token AmountOfMoney $ withInterval (from, to) $ currencyOnly c))
|
||||||
|
_ -> Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleIntervalBetween :: Rule
|
||||||
|
ruleIntervalBetween = Rule
|
||||||
|
{ name = "between|from <amount-of-money> to|and <amount-of-money>"
|
||||||
|
, pattern =
|
||||||
|
[ Predicate isSimpleAmountOfMoney
|
||||||
|
, regex "부터"
|
||||||
|
, Predicate isSimpleAmountOfMoney
|
||||||
|
]
|
||||||
|
, prod = \case
|
||||||
|
(Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just from, TAmountOfMoney.currency = c1}:
|
||||||
|
_:
|
||||||
|
Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just to, TAmountOfMoney.currency = c2}:
|
||||||
|
_) | c1 == c2 ->
|
||||||
|
(Just (Token AmountOfMoney $ withInterval (from, to) $ currencyOnly c1))
|
||||||
|
_ -> Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleIntervalNumeralDash :: Rule
|
||||||
|
ruleIntervalNumeralDash = Rule
|
||||||
|
{ name = "<numeral> - <amount-of-money>"
|
||||||
|
, pattern =
|
||||||
|
[ Predicate isNatural
|
||||||
|
, regex "-"
|
||||||
|
, Predicate isSimpleAmountOfMoney
|
||||||
|
]
|
||||||
|
, prod = \case
|
||||||
|
(Token Numeral NumeralData {TNumeral.value = from}:
|
||||||
|
_:
|
||||||
|
Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just to, TAmountOfMoney.currency = c}:
|
||||||
|
_) ->
|
||||||
|
(Just (Token AmountOfMoney $ withInterval (from, to) $ currencyOnly c))
|
||||||
|
_ -> Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleIntervalDash :: Rule
|
||||||
|
ruleIntervalDash = Rule
|
||||||
|
{ name = "<amount-of-money> - <amount-of-money>"
|
||||||
|
, pattern =
|
||||||
|
[ Predicate isSimpleAmountOfMoney
|
||||||
|
, regex "-"
|
||||||
|
, Predicate isSimpleAmountOfMoney
|
||||||
|
]
|
||||||
|
, prod = \case
|
||||||
|
(Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just from, TAmountOfMoney.currency = c1}:
|
||||||
|
_:
|
||||||
|
Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just to, TAmountOfMoney.currency = c2}:
|
||||||
|
_) | c1 == c2 ->
|
||||||
|
(Just (Token AmountOfMoney $ withInterval (from, to) $ currencyOnly c1))
|
||||||
|
_ -> Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleIntervalMax :: Rule
|
||||||
|
ruleIntervalMax = Rule
|
||||||
|
{ name = "under/less/lower/no more than <amount-of-money>"
|
||||||
|
, pattern =
|
||||||
|
[ Predicate isSimpleAmountOfMoney
|
||||||
|
, regex "미만|이하"
|
||||||
|
]
|
||||||
|
, prod = \case
|
||||||
|
(Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just to, TAmountOfMoney.currency = c}:
|
||||||
|
_:
|
||||||
|
_) -> (Just (Token AmountOfMoney $ withMax to $ currencyOnly c))
|
||||||
|
_ -> Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleIntervalMin :: Rule
|
||||||
|
ruleIntervalMin = Rule
|
||||||
|
{ name = "over/above/at least/more than <amount-of-money>"
|
||||||
|
, pattern =
|
||||||
|
[ Predicate isSimpleAmountOfMoney
|
||||||
|
, regex "초과|이상"
|
||||||
|
]
|
||||||
|
, prod = \case
|
||||||
|
(Token AmountOfMoney AmountOfMoneyData {TAmountOfMoney.value = Just to, TAmountOfMoney.currency = c}:
|
||||||
|
_:
|
||||||
|
_) -> (Just (Token AmountOfMoney $ withMin to $ currencyOnly c))
|
||||||
|
_ -> Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
rules :: [Rule]
|
rules :: [Rule]
|
||||||
rules =
|
rules =
|
||||||
[ ruleUnitAmount
|
[ ruleUnitAmount
|
||||||
@ -178,4 +275,10 @@ rules =
|
|||||||
, ruleIntersectXCents
|
, ruleIntersectXCents
|
||||||
, ruleKrw
|
, ruleKrw
|
||||||
, rulePounds
|
, rulePounds
|
||||||
|
, ruleIntervalBetweenNumeral
|
||||||
|
, ruleIntervalBetween
|
||||||
|
, ruleIntervalNumeralDash
|
||||||
|
, ruleIntervalDash
|
||||||
|
, ruleIntervalMax
|
||||||
|
, ruleIntervalMin
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user