From d61a384f43745da2211941eeaeaf3017476daebd Mon Sep 17 00:00:00 2001 From: Ninglin Du Date: Wed, 26 Nov 2025 19:58:24 +0800 Subject: [PATCH 1/3] 0 second --- .../com/xiaomi/duckling/dimension/numeral/Predicates.scala | 6 ++++++ .../com/xiaomi/duckling/dimension/time/duration/Rules.scala | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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..8066f10 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 @@ -64,7 +64,7 @@ trait Rules extends DimRules { name = " ", pattern = List( and( - isNatural, + isNonNegative, isNumberOrUnitNumber, not(isDigitLengthGt(1)), // 一九八七 年 不召回 From 6bdd2832078b0e23196ee80a4af5bbeec4e746a7 Mon Sep 17 00:00:00 2001 From: Ninglin Du Date: Wed, 26 Nov 2025 20:00:48 +0800 Subject: [PATCH 2/3] 0 second --- .../com/xiaomi/duckling/dimension/time/duration/Examples.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala b/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala index 207947b..f90db69 100644 --- a/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala +++ b/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala @@ -24,6 +24,7 @@ object Examples extends DimExamples { override def pairs: List[(ResolvedValue, List[String])] = List( (DurationData(1, Second, schema = Some("PT1S")), List("1秒钟", "1秒")), + (DurationData(0, Second, schema = Some("PT0S")), List("0秒")), (DurationData(69, Second, schema = Some("PT1M9S")), List("1分09秒", "一分零九秒", "一分九秒")), (DurationData(185, Minute, schema = Some("PT3H5M")), List("3小时05分", "三小时零五分钟")), (DurationData(90, Second, schema = Some("PT1M30S")), List("1分半", "1分半钟")), From 2f7bb1b2f3729b8fad7a84d20bcc42af1901dc7a Mon Sep 17 00:00:00 2001 From: Ninglin Du Date: Wed, 26 Nov 2025 20:06:41 +0800 Subject: [PATCH 3/3] 0 second --- .../com/xiaomi/duckling/dimension/time/duration/Rules.scala | 2 +- .../com/xiaomi/duckling/dimension/time/duration/Examples.scala | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) 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 8066f10..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 } } diff --git a/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala b/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala index f90db69..207947b 100644 --- a/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala +++ b/duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala @@ -24,7 +24,6 @@ object Examples extends DimExamples { override def pairs: List[(ResolvedValue, List[String])] = List( (DurationData(1, Second, schema = Some("PT1S")), List("1秒钟", "1秒")), - (DurationData(0, Second, schema = Some("PT0S")), List("0秒")), (DurationData(69, Second, schema = Some("PT1M9S")), List("1分09秒", "一分零九秒", "一分九秒")), (DurationData(185, Minute, schema = Some("PT3H5M")), List("3小时05分", "三小时零五分钟")), (DurationData(90, Second, schema = Some("PT1M30S")), List("1分半", "1分半钟")),