mirror of
https://github.com/facebook/duckling.git
synced 2024-09-11 21:27:13 +03:00
AmountOfMoney
Summary: AmountOfMoney dimension for Croatian. Reviewed By: niteria Differential Revision: D4947584 fbshipit-source-id: a20670a
This commit is contained in:
parent
0f98a42b03
commit
b32696f8eb
96
Duckling/AmountOfMoney/HR/Corpus.hs
Normal file
96
Duckling/AmountOfMoney/HR/Corpus.hs
Normal file
@ -0,0 +1,96 @@
|
||||
-- Copyright (c) 2016-present, Facebook, Inc.
|
||||
-- All rights reserved.
|
||||
--
|
||||
-- This source code is licensed under the BSD-style license found in the
|
||||
-- LICENSE file in the root directory of this source tree. An additional grant
|
||||
-- of patent rights can be found in the PATENTS file in the same directory.
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Duckling.AmountOfMoney.HR.Corpus
|
||||
( corpus ) where
|
||||
|
||||
import Prelude
|
||||
import Data.String
|
||||
|
||||
import Duckling.Lang
|
||||
import Duckling.AmountOfMoney.Types
|
||||
import Duckling.Resolve
|
||||
import Duckling.Testing.Types
|
||||
|
||||
corpus :: Corpus
|
||||
corpus = (testContext {lang = HR}, allExamples)
|
||||
|
||||
allExamples :: [Example]
|
||||
allExamples = concat
|
||||
[ examples (AmountOfMoneyValue Dollar 10)
|
||||
[ "$10"
|
||||
, "10$"
|
||||
, "deset dolara"
|
||||
]
|
||||
, examples (AmountOfMoneyValue Cent 10)
|
||||
[ "deset centa"
|
||||
]
|
||||
, examples (AmountOfMoneyValue Dollar 10000)
|
||||
[ "$10.000"
|
||||
, "10K$"
|
||||
, "$10k"
|
||||
]
|
||||
, examples (AmountOfMoneyValue USD 1.23)
|
||||
[ "USD1,23"
|
||||
]
|
||||
, examples (AmountOfMoneyValue Dollar 2.23)
|
||||
[ "2 dolara i 23 centa"
|
||||
, "dva dolara 23 centa"
|
||||
, "2 dolara 23"
|
||||
, "dva dolara i 23"
|
||||
]
|
||||
, examples (AmountOfMoneyValue HRK 2.23)
|
||||
[ "2 kune i 23 lipe"
|
||||
, "dvije kune 23 lipe"
|
||||
, "2 kune 23"
|
||||
, "dvije kune i 23"
|
||||
]
|
||||
, examples (AmountOfMoneyValue HRK 100)
|
||||
[ "100 kuna"
|
||||
, "sto kuna"
|
||||
]
|
||||
, examples (AmountOfMoneyValue HRK 200)
|
||||
[ "200 kuna"
|
||||
, "dvije stotine kuna"
|
||||
, "dvjesto kuna"
|
||||
, "dvjesta kuna"
|
||||
]
|
||||
, examples (AmountOfMoneyValue EUR 20)
|
||||
[ "20€"
|
||||
, "20 euros"
|
||||
, "20 Euro"
|
||||
, "20 Euros"
|
||||
, "EUR 20"
|
||||
]
|
||||
, examples (AmountOfMoneyValue EUR 29.99)
|
||||
[ "EUR29,99"
|
||||
]
|
||||
, examples (AmountOfMoneyValue INR 20)
|
||||
[ "Rs. 20"
|
||||
, "Rs 20"
|
||||
, "20 Rupija"
|
||||
, "20Rs"
|
||||
, "Rs20"
|
||||
]
|
||||
, examples (AmountOfMoneyValue INR 20.43)
|
||||
[ "20 Rupija 43"
|
||||
, "dvadeset rupija 43"
|
||||
]
|
||||
, examples (AmountOfMoneyValue INR 33)
|
||||
[ "INR33"
|
||||
]
|
||||
, examples (AmountOfMoneyValue Pound 9)
|
||||
[ "£9"
|
||||
, "devet funti"
|
||||
]
|
||||
, examples (AmountOfMoneyValue GBP 3.01)
|
||||
[ "GBP3,01"
|
||||
, "GBP 3,01"
|
||||
]
|
||||
]
|
200
Duckling/AmountOfMoney/HR/Rules.hs
Normal file
200
Duckling/AmountOfMoney/HR/Rules.hs
Normal file
@ -0,0 +1,200 @@
|
||||
-- Copyright (c) 2016-present, Facebook, Inc.
|
||||
-- All rights reserved.
|
||||
--
|
||||
-- This source code is licensed under the BSD-style license found in the
|
||||
-- LICENSE file in the root directory of this source tree. An additional grant
|
||||
-- of patent rights can be found in the PATENTS file in the same directory.
|
||||
|
||||
{-# LANGUAGE GADTs #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Duckling.AmountOfMoney.HR.Rules
|
||||
( rules ) where
|
||||
|
||||
import Data.Maybe
|
||||
import Data.String
|
||||
import Data.Text (Text)
|
||||
import Prelude
|
||||
import qualified Data.Text as Text
|
||||
|
||||
import Duckling.AmountOfMoney.Helpers
|
||||
import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..))
|
||||
import Duckling.Dimensions.Types
|
||||
import Duckling.Numeral.Types (NumeralData (..))
|
||||
import Duckling.Regex.Types
|
||||
import Duckling.Types
|
||||
import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney
|
||||
import qualified Duckling.Numeral.Types as TNumeral
|
||||
|
||||
ruleIntersectAndNumber :: Rule
|
||||
ruleIntersectAndNumber = Rule
|
||||
{ name = "intersect (and number)"
|
||||
, pattern =
|
||||
[ financeWith TAmountOfMoney.value isJust
|
||||
, regex "i"
|
||||
, dimension Numeral
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token AmountOfMoney fd:
|
||||
_:
|
||||
Token Numeral (NumeralData {TNumeral.value = c}):
|
||||
_) -> Just . Token AmountOfMoney $ withCents c fd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleSar :: Rule
|
||||
ruleSar = Rule
|
||||
{ name = "SAR"
|
||||
, pattern =
|
||||
[ regex "saudijskirijal|saudi rijal?"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly SAR
|
||||
}
|
||||
|
||||
ruleDollar :: Rule
|
||||
ruleDollar = Rule
|
||||
{ name = "$"
|
||||
, pattern =
|
||||
[ regex "dolar(a|i|e)?"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Dollar
|
||||
}
|
||||
|
||||
ruleCent :: Rule
|
||||
ruleCent = Rule
|
||||
{ name = "cent"
|
||||
, pattern =
|
||||
[ regex "cent(i|a)?|penij(i|a)?|c|\x00a2|lp|lip(a|e)"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Cent
|
||||
}
|
||||
|
||||
ruleIntersectIXLipa :: Rule
|
||||
ruleIntersectIXLipa = Rule
|
||||
{ name = "intersect (i X lipa)"
|
||||
, pattern =
|
||||
[ financeWith TAmountOfMoney.value isJust
|
||||
, regex "i"
|
||||
, financeWith TAmountOfMoney.currency (== Cent)
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token AmountOfMoney fd:
|
||||
_:
|
||||
Token AmountOfMoney (AmountOfMoneyData {TAmountOfMoney.value = Just c}):
|
||||
_) -> Just . Token AmountOfMoney $ withCents c fd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleIntersectXCents :: Rule
|
||||
ruleIntersectXCents = Rule
|
||||
{ name = "intersect (X cents)"
|
||||
, pattern =
|
||||
[ financeWith TAmountOfMoney.value isJust
|
||||
, financeWith TAmountOfMoney.currency (== Cent)
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token AmountOfMoney fd:
|
||||
Token AmountOfMoney (AmountOfMoneyData {TAmountOfMoney.value = Just c}):
|
||||
_) -> Just . Token AmountOfMoney $ withCents c fd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
rulePound :: Rule
|
||||
rulePound = Rule
|
||||
{ name = "£"
|
||||
, pattern =
|
||||
[ regex "funt(a|e|i)?"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Pound
|
||||
}
|
||||
|
||||
ruleHrk :: Rule
|
||||
ruleHrk = Rule
|
||||
{ name = "HRK"
|
||||
, pattern =
|
||||
[ regex "kn|(hrvatsk(a|ih|e) )?kun(a|e)"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly HRK
|
||||
}
|
||||
|
||||
ruleIntersect :: Rule
|
||||
ruleIntersect = Rule
|
||||
{ name = "intersect"
|
||||
, pattern =
|
||||
[ financeWith TAmountOfMoney.value isJust
|
||||
, dimension Numeral
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token AmountOfMoney fd:
|
||||
Token Numeral (NumeralData {TNumeral.value = c}):
|
||||
_) -> Just . Token AmountOfMoney $ withCents c fd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleOtherPounds :: Rule
|
||||
ruleOtherPounds = Rule
|
||||
{ name = "other pounds"
|
||||
, pattern =
|
||||
[ regex "(egipatska|libanonska) ?funta"
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token RegexMatch (GroupMatch (match:_)):_) -> case Text.toLower match of
|
||||
"egipatska" -> Just . Token AmountOfMoney $ currencyOnly EGP
|
||||
"libanonska" -> Just . Token AmountOfMoney $ currencyOnly LBP
|
||||
_ -> Nothing
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleInr :: Rule
|
||||
ruleInr = Rule
|
||||
{ name = "INR"
|
||||
, pattern =
|
||||
[ regex "rupija?"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly INR
|
||||
}
|
||||
|
||||
ruleKwd :: Rule
|
||||
ruleKwd = Rule
|
||||
{ name = "KWD"
|
||||
, pattern =
|
||||
[ regex "kuvajtski ?dinar"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly KWD
|
||||
}
|
||||
|
||||
ruleQar :: Rule
|
||||
ruleQar = Rule
|
||||
{ name = "QAR"
|
||||
, pattern =
|
||||
[ regex "katarski(i| )rijal"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly QAR
|
||||
}
|
||||
|
||||
ruleAed :: Rule
|
||||
ruleAed = Rule
|
||||
{ name = "AED"
|
||||
, pattern =
|
||||
[ regex "drahma?"
|
||||
]
|
||||
, prod = \_ -> Just . Token AmountOfMoney $ currencyOnly AED
|
||||
}
|
||||
|
||||
rules :: [Rule]
|
||||
rules =
|
||||
[ ruleDollar
|
||||
, rulePound
|
||||
, ruleOtherPounds
|
||||
, ruleAed
|
||||
, ruleCent
|
||||
, ruleHrk
|
||||
, ruleInr
|
||||
, ruleIntersect
|
||||
, ruleIntersectAndNumber
|
||||
, ruleIntersectIXLipa
|
||||
, ruleIntersectXCents
|
||||
, ruleKwd
|
||||
, ruleQar
|
||||
, ruleSar
|
||||
]
|
@ -51,6 +51,7 @@ currencies = HashMap.fromList
|
||||
, ("\x20acuros", EUR)
|
||||
, ("\x20acurs", EUR)
|
||||
, ("gbp", GBP)
|
||||
, ("hrk", HRK)
|
||||
, ("idr", IDR)
|
||||
, ("inr", INR)
|
||||
, ("rs", INR)
|
||||
@ -83,7 +84,7 @@ ruleCurrencies :: Rule
|
||||
ruleCurrencies = Rule
|
||||
{ name = "currencies"
|
||||
, pattern =
|
||||
[ regex "(aed|aud|brl|\x00a2|c|\\$|dollars?|egp|(e|\x20ac)uro?s?|\x20ac|gbp|idr|inr|\x00a5|jpy|krw|kwd|lbp|nok|\x00a3|pta?s?|qar|rs\\.?|ron|rupees?|sar|sek|sgb|us(d|\\$)|vnd|yen)"
|
||||
[ regex "(aed|aud|brl|\x00a2|c|\\$|dollars?|egp|(e|\x20ac)uro?s?|\x20ac|gbp|hrk|idr|inr|\x00a5|jpy|krw|kwd|lbp|nok|\x00a3|pta?s?|qar|rs\\.?|ron|rupees?|sar|sek|sgb|us(d|\\$)|vnd|yen)"
|
||||
]
|
||||
, prod = \tokens -> case tokens of
|
||||
(Token RegexMatch (GroupMatch (match:_)):_) -> do
|
||||
|
@ -37,6 +37,7 @@ data Currency
|
||||
| EGP
|
||||
| EUR
|
||||
| GBP
|
||||
| HRK
|
||||
| IDR
|
||||
| INR
|
||||
| JPY
|
||||
@ -65,6 +66,7 @@ instance ToJSON Currency where
|
||||
toJSON EGP = "EGP"
|
||||
toJSON EUR = "EUR"
|
||||
toJSON GBP = "GBP"
|
||||
toJSON HRK = "HRK"
|
||||
toJSON IDR = "IDR"
|
||||
toJSON INR = "INR"
|
||||
toJSON JPY = "JPY"
|
||||
|
@ -15,6 +15,7 @@ module Duckling.Rules.HR
|
||||
|
||||
import Duckling.Dimensions.Types
|
||||
import Duckling.Types
|
||||
import qualified Duckling.AmountOfMoney.HR.Rules as AmountOfMoney
|
||||
import qualified Duckling.Numeral.HR.Rules as Numeral
|
||||
import qualified Duckling.Ordinal.HR.Rules as Ordinal
|
||||
|
||||
@ -23,7 +24,7 @@ rules (This Distance) = []
|
||||
rules (This Duration) = []
|
||||
rules (This Numeral) = Numeral.rules
|
||||
rules (This Email) = []
|
||||
rules (This AmountOfMoney) = []
|
||||
rules (This AmountOfMoney) = AmountOfMoney.rules
|
||||
rules (This Ordinal) = Ordinal.rules
|
||||
rules (This PhoneNumber) = []
|
||||
rules (This Quantity) = []
|
||||
|
@ -138,6 +138,8 @@ library
|
||||
, Duckling.AmountOfMoney.FR.Rules
|
||||
, Duckling.AmountOfMoney.GA.Corpus
|
||||
, Duckling.AmountOfMoney.GA.Rules
|
||||
, Duckling.AmountOfMoney.HR.Corpus
|
||||
, Duckling.AmountOfMoney.HR.Rules
|
||||
, Duckling.AmountOfMoney.ID.Corpus
|
||||
, Duckling.AmountOfMoney.ID.Rules
|
||||
, Duckling.AmountOfMoney.KO.Corpus
|
||||
@ -508,6 +510,7 @@ test-suite duckling-test
|
||||
, Duckling.AmountOfMoney.ES.Tests
|
||||
, Duckling.AmountOfMoney.FR.Tests
|
||||
, Duckling.AmountOfMoney.GA.Tests
|
||||
, Duckling.AmountOfMoney.HR.Tests
|
||||
, Duckling.AmountOfMoney.ID.Tests
|
||||
, Duckling.AmountOfMoney.KO.Tests
|
||||
, Duckling.AmountOfMoney.NB.Tests
|
||||
|
22
tests/Duckling/AmountOfMoney/HR/Tests.hs
Normal file
22
tests/Duckling/AmountOfMoney/HR/Tests.hs
Normal file
@ -0,0 +1,22 @@
|
||||
-- Copyright (c) 2016-present, Facebook, Inc.
|
||||
-- All rights reserved.
|
||||
--
|
||||
-- This source code is licensed under the BSD-style license found in the
|
||||
-- LICENSE file in the root directory of this source tree. An additional grant
|
||||
-- of patent rights can be found in the PATENTS file in the same directory.
|
||||
|
||||
module Duckling.AmountOfMoney.HR.Tests
|
||||
( tests ) where
|
||||
|
||||
import Data.String
|
||||
import Prelude
|
||||
import Test.Tasty
|
||||
|
||||
import Duckling.Dimensions.Types
|
||||
import Duckling.AmountOfMoney.HR.Corpus
|
||||
import Duckling.Testing.Asserts
|
||||
|
||||
tests :: TestTree
|
||||
tests = testGroup "HR Tests"
|
||||
[ makeCorpusTest [This AmountOfMoney] corpus
|
||||
]
|
@ -16,6 +16,7 @@ import qualified Duckling.AmountOfMoney.EN.Tests as EN
|
||||
import qualified Duckling.AmountOfMoney.ES.Tests as ES
|
||||
import qualified Duckling.AmountOfMoney.FR.Tests as FR
|
||||
import qualified Duckling.AmountOfMoney.GA.Tests as GA
|
||||
import qualified Duckling.AmountOfMoney.HR.Tests as HR
|
||||
import qualified Duckling.AmountOfMoney.ID.Tests as ID
|
||||
import qualified Duckling.AmountOfMoney.KO.Tests as KO
|
||||
import qualified Duckling.AmountOfMoney.NB.Tests as NB
|
||||
@ -30,6 +31,7 @@ tests = testGroup "AmountOfMoney Tests"
|
||||
, ES.tests
|
||||
, FR.tests
|
||||
, GA.tests
|
||||
, HR.tests
|
||||
, ID.tests
|
||||
, KO.tests
|
||||
, NB.tests
|
||||
|
Loading…
Reference in New Issue
Block a user