diff --git a/Duckling/Dimensions/IT.hs b/Duckling/Dimensions/IT.hs index 84e00bd3..b7f9a2d7 100644 --- a/Duckling/Dimensions/IT.hs +++ b/Duckling/Dimensions/IT.hs @@ -17,5 +17,6 @@ allDimensions = [ This Duration , This Numeral , This Ordinal + , This Temperature , This Time ] diff --git a/Duckling/Rules/IT.hs b/Duckling/Rules/IT.hs index 170a4af4..a85697c0 100644 --- a/Duckling/Rules/IT.hs +++ b/Duckling/Rules/IT.hs @@ -18,6 +18,7 @@ import qualified Duckling.Duration.IT.Rules as Duration import qualified Duckling.Email.IT.Rules as Email import qualified Duckling.Numeral.IT.Rules as Numeral import qualified Duckling.Ordinal.IT.Rules as Ordinal +import qualified Duckling.Temperature.IT.Rules as Temperature import qualified Duckling.Time.IT.Rules as Time import qualified Duckling.TimeGrain.IT.Rules as TimeGrain import Duckling.Types @@ -32,7 +33,7 @@ rules (This Ordinal) = Ordinal.rules rules (This PhoneNumber) = [] rules (This Quantity) = [] rules (This RegexMatch) = [] -rules (This Temperature) = [] +rules (This Temperature) = Temperature.rules rules (This Time) = Time.rules rules (This TimeGrain) = TimeGrain.rules rules (This Url) = [] diff --git a/Duckling/Temperature/IT/Corpus.hs b/Duckling/Temperature/IT/Corpus.hs new file mode 100644 index 00000000..bbc67331 --- /dev/null +++ b/Duckling/Temperature/IT/Corpus.hs @@ -0,0 +1,52 @@ +-- 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.IT.Corpus + ( corpus ) where + +import Data.String +import Prelude + +import Duckling.Lang +import Duckling.Resolve +import Duckling.Temperature.Types +import Duckling.Testing.Types + +corpus :: Corpus +corpus = (testContext {lang = IT}, allExamples) + +allExamples :: [Example] +allExamples = concat + [ examples (TemperatureValue Celsius 37) + [ "37°C" + , "37 ° celsius" + , "37 ° centigradi" + , "37 gradi Celsius" + , "37 gradi Centigradi" + , "trentasette celsius" + , "trentasette gradi centigradi" + ] + , examples (TemperatureValue Celsius 1) + [ "1 grado centigrado" + ] + , examples (TemperatureValue Fahrenheit 70) + [ "70°F" + , "70 ° Fahrenheit" + , "70 gradi F" + , "70 gradi Fahreneit" + , "settanta Fahrenheit" + ] + , examples (TemperatureValue Degree 45) + [ "45°" + , "45 gradi" + ] + , examples (TemperatureValue Degree 1) + [ "1 grado" + ] + ] diff --git a/Duckling/Temperature/IT/Rules.hs b/Duckling/Temperature/IT/Rules.hs new file mode 100644 index 00000000..5339800c --- /dev/null +++ b/Duckling/Temperature/IT/Rules.hs @@ -0,0 +1,67 @@ +-- 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.IT.Rules + ( rules ) where + +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 + +ruleLatentTempDegrees :: Rule +ruleLatentTempDegrees = Rule + { name = " degrees" + , pattern = + [ dimension Temperature + , regex "(grad[io]?\\.?)|\x00b0" + ] + , prod = \tokens -> case tokens of + (Token Temperature td:_) -> Just . Token Temperature $ + withUnit TTemperature.Degree td + _ -> Nothing + } + +ruleTempCelcius :: Rule +ruleTempCelcius = Rule + { name = " Celcius" + , pattern = + [ dimension Temperature + , regex "(c((el[cs]?(ius)?)|(entigrad[io]))?\\.?)" + ] + , prod = \tokens -> case tokens of + (Token Temperature td:_) -> Just . Token Temperature $ + withUnit TTemperature.Celsius td + _ -> Nothing + } + +ruleTempFahrenheit :: Rule +ruleTempFahrenheit = Rule + { name = " Fahrenheit" + , pattern = + [ dimension Temperature + , regex "f(ah?rh?eh?n(h?eit)?)?\\.?" + ] + , prod = \tokens -> case tokens of + (Token Temperature td:_) -> Just . Token Temperature $ + withUnit TTemperature.Fahrenheit td + _ -> Nothing + } + +rules :: [Rule] +rules = + [ ruleLatentTempDegrees + , ruleTempCelcius + , ruleTempFahrenheit + ] diff --git a/duckling.cabal b/duckling.cabal index 51bbebef..73280415 100644 --- a/duckling.cabal +++ b/duckling.cabal @@ -367,6 +367,8 @@ library , Duckling.Temperature.GA.Rules , Duckling.Temperature.HR.Corpus , Duckling.Temperature.HR.Rules + , Duckling.Temperature.IT.Corpus + , Duckling.Temperature.IT.Rules , Duckling.Temperature.JA.Corpus , Duckling.Temperature.JA.Rules , Duckling.Temperature.KO.Corpus @@ -646,6 +648,7 @@ test-suite duckling-test , Duckling.Temperature.FR.Tests , Duckling.Temperature.GA.Tests , Duckling.Temperature.HR.Tests + , Duckling.Temperature.IT.Tests , Duckling.Temperature.JA.Tests , Duckling.Temperature.KO.Tests , Duckling.Temperature.PT.Tests diff --git a/tests/Duckling/Temperature/IT/Tests.hs b/tests/Duckling/Temperature/IT/Tests.hs new file mode 100644 index 00000000..1a2c52ba --- /dev/null +++ b/tests/Duckling/Temperature/IT/Tests.hs @@ -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.Temperature.IT.Tests + ( tests ) where + +import Data.String +import Prelude +import Test.Tasty + +import Duckling.Dimensions.Types +import Duckling.Temperature.IT.Corpus +import Duckling.Testing.Asserts + +tests :: TestTree +tests = testGroup "IT Tests" + [ makeCorpusTest [This Temperature] corpus + ] diff --git a/tests/Duckling/Temperature/Tests.hs b/tests/Duckling/Temperature/Tests.hs index 42c988e0..9de57151 100644 --- a/tests/Duckling/Temperature/Tests.hs +++ b/tests/Duckling/Temperature/Tests.hs @@ -17,6 +17,7 @@ import qualified Duckling.Temperature.ES.Tests as ES import qualified Duckling.Temperature.FR.Tests as FR import qualified Duckling.Temperature.GA.Tests as GA import qualified Duckling.Temperature.HR.Tests as HR +import qualified Duckling.Temperature.IT.Tests as IT import qualified Duckling.Temperature.JA.Tests as JA import qualified Duckling.Temperature.KO.Tests as KO import qualified Duckling.Temperature.PT.Tests as PT @@ -30,6 +31,7 @@ tests = testGroup "Temperature Tests" , FR.tests , GA.tests , HR.tests + , IT.tests , JA.tests , KO.tests , PT.tests