diff --git a/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/numeral/Predicates.scala b/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/numeral/Predicates.scala index 9e17178..5879035 100644 --- a/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/numeral/Predicates.scala +++ b/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/numeral/Predicates.scala @@ -63,6 +63,12 @@ object Predicates { case _ => false } + val isNonNegative: Predicate = { + case Token(Numeral, NumeralData(v, _, _, _, _, precision)) => precision == 0 && isInteger(v) && v >= 0 + case Token(UnitNumber, NumeralData(v, _, _, _, _, precision)) => precision == 0 && isInteger(v) && v >= 0 + case _ => false + } + val isInteger: Predicate = { case Token(_, NumeralData(v, _, _, _, _, precision)) => precision == 0 && isInteger(v) } diff --git a/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Rules.scala b/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Rules.scala index 9d44c9f..80fd0a7 100644 --- a/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Rules.scala +++ b/duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Rules.scala @@ -53,7 +53,7 @@ trait Rules extends DimRules { val n = math.floor(v).toInt // 2012年 不召回, 两千年召回 if (seq.nonEmpty && g == Year && 1950 <= n && n <= 2050) None - else Token(Duration, DurationData(n, g, latent = latent, schema = durationSchema(n.toString, g))) + else Token(Duration, DurationData(n, g, latent = if (v == 0) true else latent, schema = durationSchema(n.toString, g))) case _ => None } } @@ -64,7 +64,7 @@ trait Rules extends DimRules { name = " ", pattern = List( and( - isNatural, + isNonNegative, isNumberOrUnitNumber, not(isDigitLengthGt(1)), // 一九八七 年 不召回