Extend distance rules

Summary:
Add rules:
- one meter and <dist>
- <dist> meters and <dist>

Reviewed By: girifb

Differential Revision: D26191350

Pulled By: chessai

fbshipit-source-id: 52c85c94647e98fba866c24d3386eea988f7f58c
This commit is contained in:
kcnhk1@gmail.com 2021-02-03 14:50:37 -08:00 committed by Facebook GitHub Bot
parent 776b1ec64d
commit b6da3929ce
2 changed files with 42 additions and 1 deletions

View File

@ -68,4 +68,14 @@ allExamples = concat
, "1英里"
, "一英裏"
]
, examples (simple Metre 1.9)
[ "1.9 m"
, "1.9米"
, "米九"
]
, examples (simple Metre 3.9)
[ "3.9 m"
, "3.9米"
, "三米九"
]
]

View File

@ -17,7 +17,8 @@ import Prelude
import Duckling.Dimensions.Types
import Duckling.Distance.Helpers
import Duckling.Numeral.Types (NumeralData (..))
import Duckling.Numeral.Helpers
import Duckling.Numeral.Types
import Duckling.Types
import qualified Duckling.Distance.Types as TDistance
import qualified Duckling.Numeral.Types as TNumeral
@ -116,6 +117,34 @@ ruleDistMiles = Rule
_ -> Nothing
}
ruleDistOneMeterAnd :: Rule
ruleDistOneMeterAnd = Rule
{ name = "one meter and <dist>"
, pattern =
[ regex ""
, Predicate isPositive
]
, prod = \case
(_:Token Numeral NumeralData{TNumeral.value = v}:_) ->
Just . Token Distance $ withUnit TDistance.Metre (distance (1 + v/10))
_ -> Nothing
}
ruleDistMetersAnd :: Rule
ruleDistMetersAnd = Rule
{ name = "<dist> meters and <dist>"
, pattern =
[ Predicate isPositive
, regex ""
, Predicate isPositive
]
, prod = \case
(Token Numeral NumeralData{TNumeral.value = v1}:_:
Token Numeral NumeralData{TNumeral.value = v2}:_) ->
Just . Token Distance $ withUnit TDistance.Metre (distance (v1 + v2/10))
_ -> Nothing
}
rules :: [Rule]
rules =
[ ruleDistCentimeters
@ -125,4 +154,6 @@ rules =
, ruleDistKm
, ruleDistMeters
, ruleDistMiles
, ruleDistOneMeterAnd
, ruleDistMetersAnd
]