mirror of
https://github.com/facebook/duckling.git
synced 2024-09-11 21:27:13 +03:00
Add ZH distance support
Summary: Add ZH distance support Reviewed By: patapizza Differential Revision: D7341977 fbshipit-source-id: 301d90515c492da9fa4c4faf5bcc3351eacbed1b
This commit is contained in:
parent
1a41d3f7f4
commit
22d11c055b
@ -14,7 +14,8 @@ import Duckling.Dimensions.Types
|
||||
|
||||
allDimensions :: [Some Dimension]
|
||||
allDimensions =
|
||||
[ This Duration
|
||||
[ This Distance
|
||||
, This Duration
|
||||
, This Numeral
|
||||
, This Ordinal
|
||||
, This Temperature
|
||||
|
73
Duckling/Distance/ZH/Corpus.hs
Normal file
73
Duckling/Distance/ZH/Corpus.hs
Normal file
@ -0,0 +1,73 @@
|
||||
-- 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.ZH.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 ZH Nothing}, testOptions, allExamples)
|
||||
|
||||
allExamples :: [Example]
|
||||
allExamples = concat
|
||||
[ examples (simple Centimetre 2)
|
||||
[ "2cm"
|
||||
, "2 厘米"
|
||||
, "二厘米"
|
||||
, "2公分"
|
||||
, "二公分"
|
||||
]
|
||||
, examples (simple Metre 9)
|
||||
[ "9m"
|
||||
, "9 m"
|
||||
, "九米"
|
||||
, "9公尺"
|
||||
]
|
||||
, examples (simple Kilometre 3)
|
||||
[ "3千米"
|
||||
, "3公里"
|
||||
, "三公裏"
|
||||
, "3 km"
|
||||
, "3km"
|
||||
]
|
||||
, examples (simple Kilometre 3.0)
|
||||
[ "3.0 公里"
|
||||
]
|
||||
, examples (simple Foot 8)
|
||||
[ "8 foot"
|
||||
, "8 feet"
|
||||
, "8 foots"
|
||||
, "8 feets"
|
||||
, "8'"
|
||||
, "8英尺"
|
||||
, "8呎"
|
||||
]
|
||||
, examples (simple Inch 4)
|
||||
[ "4 inch"
|
||||
, "4 inches"
|
||||
, "4''"
|
||||
, "4英寸"
|
||||
, "4英吋"
|
||||
, "四吋"
|
||||
]
|
||||
, examples (simple Mile 1)
|
||||
[ "1 mile"
|
||||
, "1 miles"
|
||||
, "1英里"
|
||||
, "一英裏"
|
||||
]
|
||||
]
|
129
Duckling/Distance/ZH/Rules.hs
Normal file
129
Duckling/Distance/ZH/Rules.hs
Normal file
@ -0,0 +1,129 @@
|
||||
-- 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 LambdaCase #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Duckling.Distance.ZH.Rules
|
||||
( rules ) where
|
||||
|
||||
import Data.String
|
||||
import Prelude
|
||||
|
||||
import Duckling.Dimensions.Types
|
||||
import Duckling.Distance.Helpers
|
||||
import Duckling.Numeral.Types (NumeralData (..))
|
||||
import Duckling.Types
|
||||
import qualified Duckling.Distance.Types as TDistance
|
||||
import qualified Duckling.Numeral.Types as TNumeral
|
||||
|
||||
ruleDistCentimeters :: Rule
|
||||
ruleDistCentimeters = Rule
|
||||
{ name = "<dist> centimeters"
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "cm|厘米|公分"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Centimetre dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleDistMeters :: Rule
|
||||
ruleDistMeters = Rule
|
||||
{ name = "<dist> meters"
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "m|米|公尺"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Metre dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleDistKm :: Rule
|
||||
ruleDistKm = Rule
|
||||
{ name = "<dist> km"
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "km|千米|公(里|裏)"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Kilometre dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
|
||||
ruleDistFeetAndDistInch :: Rule
|
||||
ruleDistFeetAndDistInch = Rule
|
||||
{ name = "<dist> feet and <dist> inch "
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "'|f(oo|ee)?ts?|英尺|呎"
|
||||
, dimension Distance
|
||||
, regex "''|inch(es)?|英寸|英吋|吋"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Foot dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleDistInch :: Rule
|
||||
ruleDistInch = Rule
|
||||
{ name = "<dist> inch"
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "''|inch(es)?|英寸|英吋|吋"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Inch dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleDistFeet :: Rule
|
||||
ruleDistFeet = Rule
|
||||
{ name = "<dist> feet"
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "'|f(oo|ee)?ts?|英尺|呎"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Foot dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
ruleDistMiles :: Rule
|
||||
ruleDistMiles = Rule
|
||||
{ name = "<dist> miles"
|
||||
, pattern =
|
||||
[ dimension Distance
|
||||
, regex "miles?|英(里|裏)"
|
||||
]
|
||||
, prod = \case
|
||||
(Token Distance dd:_) ->
|
||||
Just . Token Distance $ withUnit TDistance.Mile dd
|
||||
_ -> Nothing
|
||||
}
|
||||
|
||||
rules :: [Rule]
|
||||
rules =
|
||||
[ ruleDistCentimeters
|
||||
, ruleDistFeet
|
||||
, ruleDistFeetAndDistInch
|
||||
, ruleDistInch
|
||||
, ruleDistKm
|
||||
, ruleDistMeters
|
||||
, ruleDistMiles
|
||||
]
|
@ -18,6 +18,7 @@ module Duckling.Rules.ZH
|
||||
import Duckling.Dimensions.Types
|
||||
import Duckling.Locale
|
||||
import Duckling.Types
|
||||
import qualified Duckling.Distance.ZH.Rules as Distance
|
||||
import qualified Duckling.Numeral.ZH.Rules as Numeral
|
||||
import qualified Duckling.Ordinal.ZH.Rules as Ordinal
|
||||
import qualified Duckling.Temperature.ZH.Rules as Temperature
|
||||
@ -40,7 +41,7 @@ localeRules _ _ = []
|
||||
|
||||
langRules :: Some Dimension -> [Rule]
|
||||
langRules (This AmountOfMoney) = []
|
||||
langRules (This Distance) = []
|
||||
langRules (This Distance) = Distance.rules
|
||||
langRules (This Duration) = []
|
||||
langRules (This Email) = []
|
||||
langRules (This Numeral) = Numeral.rules
|
||||
|
@ -227,6 +227,8 @@ library
|
||||
, Duckling.Distance.TR.Rules
|
||||
, Duckling.Distance.SV.Corpus
|
||||
, Duckling.Distance.SV.Rules
|
||||
, Duckling.Distance.ZH.Corpus
|
||||
, Duckling.Distance.ZH.Rules
|
||||
, Duckling.Distance.Helpers
|
||||
, Duckling.Distance.Rules
|
||||
, Duckling.Distance.Types
|
||||
@ -702,6 +704,7 @@ test-suite duckling-test
|
||||
, Duckling.Distance.RU.Tests
|
||||
, Duckling.Distance.TR.Tests
|
||||
, Duckling.Distance.SV.Tests
|
||||
, Duckling.Distance.ZH.Tests
|
||||
, Duckling.Distance.Tests
|
||||
|
||||
-- Duration
|
||||
|
@ -17,7 +17,6 @@ import Test.Tasty
|
||||
import qualified Duckling.Distance.BG.Tests as BG
|
||||
import qualified Duckling.Distance.CS.Tests as CS
|
||||
import qualified Duckling.Distance.EN.Tests as EN
|
||||
import qualified Duckling.Distance.BG.Tests as BG
|
||||
import qualified Duckling.Distance.ES.Tests as ES
|
||||
import qualified Duckling.Distance.FR.Tests as FR
|
||||
import qualified Duckling.Distance.GA.Tests as GA
|
||||
@ -29,6 +28,7 @@ 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
|
||||
import qualified Duckling.Distance.ZH.Tests as ZH
|
||||
|
||||
tests :: TestTree
|
||||
tests = testGroup "Distance Tests"
|
||||
@ -46,4 +46,5 @@ tests = testGroup "Distance Tests"
|
||||
, RU.tests
|
||||
, TR.tests
|
||||
, SV.tests
|
||||
, ZH.tests
|
||||
]
|
||||
|
23
tests/Duckling/Distance/ZH/Tests.hs
Normal file
23
tests/Duckling/Distance/ZH/Tests.hs
Normal 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.ZH.Tests
|
||||
( tests ) where
|
||||
|
||||
import Data.String
|
||||
import Prelude
|
||||
import Test.Tasty
|
||||
|
||||
import Duckling.Dimensions.Types
|
||||
import Duckling.Distance.ZH.Corpus
|
||||
import Duckling.Testing.Asserts
|
||||
|
||||
tests :: TestTree
|
||||
tests = testGroup "ZH Tests"
|
||||
[ makeCorpusTest [This Distance] corpus
|
||||
]
|
Loading…
Reference in New Issue
Block a user