mirror of
https://github.com/facebook/duckling.git
synced 2024-09-11 21:27:13 +03:00
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:
parent
380457db8f
commit
c056a0b46a
@ -17,6 +17,7 @@ allDimensions =
|
||||
[ This Duration
|
||||
, This Numeral
|
||||
, This Ordinal
|
||||
, This Temperature
|
||||
, This Time
|
||||
, This Volume
|
||||
]
|
||||
|
@ -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) = []
|
||||
|
50
Duckling/Temperature/AR/Corpus.hs
Normal file
50
Duckling/Temperature/AR/Corpus.hs
Normal 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 تحت الصفر"
|
||||
]
|
||||
]
|
100
Duckling/Temperature/AR/Rules.hs
Normal file
100
Duckling/Temperature/AR/Rules.hs
Normal 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
|
||||
]
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
24
tests/Duckling/Temperature/AR/Tests.hs
Normal file
24
tests/Duckling/Temperature/AR/Tests.hs
Normal 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
|
||||
]
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user