add distance to SV

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

Reviewed By: chinmay87

Differential Revision: D7322559

Pulled By: patapizza

fbshipit-source-id: 3d4b86068c05a7a82442bc7c182b80b5cf75ec90
This commit is contained in:
hend 2018-03-21 11:01:05 -07:00 committed by Facebook Github Bot
parent 6d7d0ba354
commit f70b4ebe07
7 changed files with 163 additions and 3 deletions

View File

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

View File

@ -0,0 +1,48 @@
-- 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.Distance.SV.Corpus
( corpus
) where
import Data.String
import Prelude
import Duckling.Distance.Types
import Duckling.Locale
import Duckling.Resolve
import Duckling.Testing.Types
corpus :: Corpus
corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)
allExamples :: [Example]
allExamples = concat
[ examples (simple Kilometre 3)
[ "3 kilometer"
, "3 km"
, "3km"
, "3k"
, "3 mil"
, "tre mil"
, "några få mil"
]
, examples (simple Kilometre 3.0)
[ "3,0 km"
]
, examples (simple Metre 9)
[ "9 meter"
, "9m"
]
, examples (simple Centimetre 2)
[ "2cm"
, "2 centimeter"
]
]

View File

@ -0,0 +1,82 @@
-- 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.Distance.SV.Rules
( rules
) where
import Data.String
import Prelude
import Duckling.Dimensions.Types
import Duckling.Distance.Helpers
import Duckling.Types
import qualified Duckling.Distance.Types as TDistance
ruleLatentDistKm :: Rule
ruleLatentDistKm = Rule
{ name = "<latent dist> km"
, pattern =
[ dimension Distance
, regex "k(ilo)?m?(eter)?"
]
, prod = \tokens -> case tokens of
(Token Distance dd:_) ->
Just . Token Distance $ withUnit TDistance.Kilometre dd
_ -> Nothing
}
ruleDistMeters :: Rule
ruleDistMeters = Rule
{ name = "<dist> meter"
, pattern =
[ dimension Distance
, regex "m(eter)?"
]
, prod = \tokens -> case tokens of
(Token Distance dd:_) ->
Just . Token Distance $ withUnit TDistance.Metre dd
_ -> Nothing
}
ruleDistCentimeters :: Rule
ruleDistCentimeters = Rule
{ name = "<dist> centimeters"
, pattern =
[ dimension Distance
, regex "cm|centimeter"
]
, prod = \tokens -> case tokens of
(Token Distance dd:_) ->
Just . Token Distance $ withUnit TDistance.Centimetre dd
_ -> Nothing
}
ruleDistMils :: Rule
ruleDistMils = Rule
{ name = "<dist> mils"
, pattern =
[ dimension Distance
, regex "mils?"
]
, prod = \tokens -> case tokens of
(Token Distance dd:_) ->
Just . Token Distance $ withUnit TDistance.Kilometre dd
_ -> Nothing
}
rules :: [Rule]
rules =
[ ruleDistCentimeters
, ruleDistMeters
, ruleDistMils
, ruleLatentDistKm
]

View File

@ -20,6 +20,7 @@ import Duckling.Locale
import Duckling.Types
import qualified Duckling.AmountOfMoney.SV.Rules as AmountOfMoney
import qualified Duckling.Duration.SV.Rules as Duration
import qualified Duckling.Distance.SV.Rules as Distance
import qualified Duckling.Ordinal.SV.Rules as Ordinal
import qualified Duckling.Numeral.SV.Rules as Numeral
import qualified Duckling.Time.SV.Rules as Time
@ -33,7 +34,7 @@ localeRules _ _ = []
langRules :: Some Dimension -> [Rule]
langRules (This AmountOfMoney) = AmountOfMoney.rules
langRules (This Distance) = []
langRules (This Distance) = Distance.rules
langRules (This Duration) = Duration.rules
langRules (This Email) = []
langRules (This Numeral) = Numeral.rules

View File

@ -225,6 +225,8 @@ library
, Duckling.Distance.RU.Rules
, Duckling.Distance.TR.Corpus
, Duckling.Distance.TR.Rules
, Duckling.Distance.SV.Corpus
, Duckling.Distance.SV.Rules
, Duckling.Distance.Helpers
, Duckling.Distance.Rules
, Duckling.Distance.Types
@ -699,6 +701,7 @@ test-suite duckling-test
, Duckling.Distance.RO.Tests
, Duckling.Distance.RU.Tests
, Duckling.Distance.TR.Tests
, Duckling.Distance.SV.Tests
, Duckling.Distance.Tests
-- Duration

View File

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

View File

@ -28,6 +28,7 @@ import qualified Duckling.Distance.PT.Tests as PT
import qualified Duckling.Distance.RO.Tests as RO
import qualified Duckling.Distance.RU.Tests as RU
import qualified Duckling.Distance.TR.Tests as TR
import qualified Duckling.Distance.SV.Tests as SV
tests :: TestTree
tests = testGroup "Distance Tests"
@ -44,4 +45,5 @@ tests = testGroup "Distance Tests"
, RO.tests
, RU.tests
, TR.tests
, SV.tests
]