Added Temperature Dimension to Arabic language

Summary: Closes https://github.com/facebook/duckling/pull/126

Reviewed By: panagosg7

Differential Revision: D6614995

Pulled By: patapizza

fbshipit-source-id: 35ff142a3fc8a498d9abbb80d28dc9be6cdcbc4d
This commit is contained in:
Abdallatif Sulaiman 2017-12-20 17:51:20 -08:00 committed by Facebook Github Bot
parent 380457db8f
commit c056a0b46a
10 changed files with 205 additions and 21 deletions

View File

@ -17,6 +17,7 @@ allDimensions =
[ This Duration
, This Numeral
, This Ordinal
, This Temperature
, This Time
, This Volume
]

View File

@ -21,6 +21,7 @@ import Duckling.Types
import qualified Duckling.Duration.AR.Rules as Duration
import qualified Duckling.Numeral.AR.Rules as Numeral
import qualified Duckling.Ordinal.AR.Rules as Ordinal
import qualified Duckling.Temperature.AR.Rules as Temperature
import qualified Duckling.Time.AR.Rules as Time
import qualified Duckling.TimeGrain.AR.Rules as TimeGrain
import qualified Duckling.Volume.AR.Rules as Volume
@ -41,7 +42,7 @@ langRules (This Ordinal) = Ordinal.rules
langRules (This PhoneNumber) = []
langRules (This Quantity) = []
langRules (This RegexMatch) = []
langRules (This Temperature) = []
langRules (This Temperature) = Temperature.rules
langRules (This Time) = Time.rules
langRules (This TimeGrain) = TimeGrain.rules
langRules (This Url) = []

View File

@ -0,0 +1,50 @@
-- 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.Temperature.AR.Corpus
( corpus
) where
import Data.String
import Prelude
import Duckling.Locale
import Duckling.Resolve
import Duckling.Temperature.Types
import Duckling.Testing.Types
corpus :: Corpus
corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)
allExamples :: [Example]
allExamples = concat
[ examples (TemperatureValue Celsius 37)
[ "37° سلزيوس"
, "37 ° سلزيوس"
, "37 درجة سلزيوس"
, "سبع وثلاثون سلزيوس"
]
, examples (TemperatureValue Fahrenheit 70)
[ "70° فهرنهايت"
, "70 درجة فهرنهايت"
, "سبعون فهرنهايت"
]
, examples (TemperatureValue Degree 45)
[ "45°"
, "45 درجة"
, "45 درجه مئوية"
]
, examples (TemperatureValue Degree (-2))
[ "-2°"
, "- 2 درجة"
, "درجتين تحت الصفر"
, "2 تحت الصفر"
]
]

View File

@ -0,0 +1,100 @@
-- 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.Temperature.AR.Rules
( rules
) where
import Data.Maybe
import Data.String
import Prelude
import Duckling.Dimensions.Types
import Duckling.Temperature.Helpers
import Duckling.Temperature.Types (TemperatureData(..))
import Duckling.Types
import qualified Duckling.Temperature.Types as TTemperature
ruleTemperatureDegrees :: Rule
ruleTemperatureDegrees = Rule
{ name = "<latent temp> degrees"
, pattern =
[ dimension Temperature
, regex "(درج([ةه]|ات)( مئوي[ةه])?)|°"
]
, prod = \tokens -> case tokens of
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Degree td
_ -> Nothing
}
ruleTemperatureTwoDegrees :: Rule
ruleTemperatureTwoDegrees = Rule
{ name = "two degrees"
, pattern =
[ regex "درجت(ين|ان)"
]
, prod = \_ -> Just . Token Temperature $ TemperatureData
{ TTemperature.unit = Nothing
, TTemperature.value = 2
}
}
ruleTemperatureCelsius :: Rule
ruleTemperatureCelsius = Rule
{ name = "<temp> Celsius"
, pattern =
[ dimension Temperature
, regex "(درج([ةه]|ات) )?سي?لي?[سز]ي?وس"
]
, prod = \tokens -> case tokens of
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Celsius td
_ -> Nothing
}
ruleTemperatureFahrenheit :: Rule
ruleTemperatureFahrenheit = Rule
{ name = "<temp> Fahrenheit"
, pattern =
[ dimension Temperature
, regex "(درج([ةه]|ات) )?ف(ا|ي)?هرنها?يت"
]
, prod = \tokens -> case tokens of
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Fahrenheit td
_ -> Nothing
}
ruleTemperatureBelowZero :: Rule
ruleTemperatureBelowZero = Rule
{ name = "<temp> below zero"
, pattern =
[ dimension Temperature
, regex "تحت الصفر"
]
, prod = \tokens -> case tokens of
(Token Temperature td@TemperatureData {TTemperature.value = v}:
_) -> case TTemperature.unit td of
Nothing -> Just . Token Temperature . withUnit TTemperature.Degree $
td {TTemperature.value = - v}
_ -> Just . Token Temperature $ td {TTemperature.value = - v}
_ -> Nothing
}
rules :: [Rule]
rules =
[ ruleTemperatureDegrees
, ruleTemperatureTwoDegrees
, ruleTemperatureCelsius
, ruleTemperatureFahrenheit
, ruleTemperatureBelowZero
]

View File

@ -9,10 +9,11 @@
{-# LANGUAGE OverloadedStrings #-}
module Duckling.Temperature.EN.Corpus
( corpus ) where
( corpus
) where
import Prelude
import Data.String
import Prelude
import Duckling.Temperature.Types
import Duckling.Testing.Types

View File

@ -10,17 +10,18 @@
{-# LANGUAGE OverloadedStrings #-}
module Duckling.Temperature.EN.Rules
( rules ) where
( rules
) where
import Data.Maybe
import Prelude
import Data.String
import Prelude
import Duckling.Dimensions.Types
import Duckling.Temperature.Helpers
import qualified Duckling.Temperature.Types as TTemperature
import Duckling.Temperature.Types (TemperatureData(..))
import Duckling.Types
import qualified Duckling.Temperature.Types as TTemperature
ruleTemperatureDegrees :: Rule
ruleTemperatureDegrees = Rule
@ -30,9 +31,9 @@ ruleTemperatureDegrees = Rule
, regex "(deg(ree?)?s?\\.?)|°"
]
, prod = \tokens -> case tokens of
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Degree td
_ -> Nothing
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Degree td
_ -> Nothing
}
ruleTemperatureCelsius :: Rule
@ -43,9 +44,9 @@ ruleTemperatureCelsius = Rule
, regex "c(el[cs]?(ius)?)?\\.?"
]
, prod = \tokens -> case tokens of
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Celsius td
_ -> Nothing
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Celsius td
_ -> Nothing
}
ruleTemperatureFahrenheit :: Rule
@ -56,9 +57,9 @@ ruleTemperatureFahrenheit = Rule
, regex "f(ah?rh?eh?n(h?eit)?)?\\.?"
]
, prod = \tokens -> case tokens of
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Fahrenheit td
_ -> Nothing
(Token Temperature td:_) -> Just . Token Temperature $
withUnit TTemperature.Fahrenheit td
_ -> Nothing
}
ruleTemperatureBelowZero :: Rule
@ -69,11 +70,11 @@ ruleTemperatureBelowZero = Rule
, regex "below zero"
]
, prod = \tokens -> case tokens of
(Token Temperature td@(TemperatureData {TTemperature.value = v}):_) ->
case TTemperature.unit td of
Nothing -> Just . Token Temperature . withUnit TTemperature.Degree $
td {TTemperature.value = - v}
_ -> Just . Token Temperature $ td {TTemperature.value = - v}
(Token Temperature td@TemperatureData {TTemperature.value = v}:
_) -> case TTemperature.unit td of
Nothing -> Just . Token Temperature . withUnit TTemperature.Degree $
td {TTemperature.value = - v}
_ -> Just . Token Temperature $ td {TTemperature.value = - v}
_ -> Nothing
}

View File

@ -427,6 +427,8 @@ library
, Duckling.Regex.Types
-- Temperature
, Duckling.Temperature.AR.Corpus
, Duckling.Temperature.AR.Rules
, Duckling.Temperature.EN.Corpus
, Duckling.Temperature.EN.Rules
, Duckling.Temperature.ES.Corpus
@ -779,6 +781,7 @@ test-suite duckling-test
, Duckling.Quantity.Tests
-- Temperature
, Duckling.Temperature.AR.Tests
, Duckling.Temperature.EN.Tests
, Duckling.Temperature.ES.Tests
, Duckling.Temperature.FR.Tests

View File

@ -123,6 +123,7 @@ supportedDimensionsTest = testCase "Supported Dimensions Test" $ do
[ ( AR
, [ This Email, This AmountOfMoney, This PhoneNumber, This Url
, This Duration, This Numeral, This Ordinal, This Time, This Volume
, This Temperature
]
)
, ( PL

View File

@ -0,0 +1,24 @@
-- 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.Temperature.AR.Tests
( tests
) where
import Prelude
import Data.String
import Test.Tasty
import Duckling.Dimensions.Types
import Duckling.Temperature.AR.Corpus
import Duckling.Testing.Asserts
tests :: TestTree
tests = testGroup "AR Tests"
[ makeCorpusTest [This Temperature] corpus
]

View File

@ -12,6 +12,7 @@ import Prelude
import Data.String
import Test.Tasty
import qualified Duckling.Temperature.AR.Tests as AR
import qualified Duckling.Temperature.EN.Tests as EN
import qualified Duckling.Temperature.ES.Tests as ES
import qualified Duckling.Temperature.FR.Tests as FR
@ -27,7 +28,8 @@ import qualified Duckling.Temperature.ZH.Tests as ZH
tests :: TestTree
tests = testGroup "Temperature Tests"
[ EN.tests
[ AR.tests
, EN.tests
, ES.tests
, FR.tests
, GA.tests