Skip to content

Commit 75e4c6c

Browse files
authored
duration: 增加 一点五二小时 类的支持 (#252)
1 parent af3a3f8 commit 75e4c6c

File tree

2 files changed

+10
-5
lines changed
  • duckling-fork-chinese
    • core/src/main/scala/com/xiaomi/duckling/dimension/time/duration
    • learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration

2 files changed

+10
-5
lines changed

Diff for: duckling-fork-chinese/core/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Rules.scala

+9-5
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,18 @@ trait Rules extends DimRules {
116116

117117
val ruleDurationDotNumeral = Rule(
118118
name = "number.number grain",
119-
pattern = List("(\\d+)\\.(\\d+)".regex, isDimension(TimeGrain).predicate),
119+
pattern = List(isInteger.predicate, "[点\\.]".regex, or(isDimension(DigitSequence), isIntegerBetween(0, 9)).predicate, isDimension(TimeGrain).predicate),
120120
prod = tokens {
121-
case Token(_, GroupMatch(_ :: integer :: decimal :: _)) :: Token(_, GrainData(g, false, _)) :: _ =>
121+
case (t1@ Token(_, nd: NumeralData)) :: _ :: Token(_, decimal) :: Token(_, GrainData(g, false, _)) :: _ =>
122+
val (dOpt, length) = decimal match {
123+
case ds: DigitSequenceData => (parseInt(ds.seq).toOption, ds.seq.length)
124+
case nd: NumeralData => (getIntValue(nd.value).map(_.toInt), 1)
125+
}
122126
(for {
123-
i <- parseInt(integer).toOption
124-
d <- parseInt(decimal).toOption
127+
i <- getIntValue(t1).map(_.toInt)
128+
d <- dOpt
125129
} yield {
126-
val mden = math.pow(10, decimal.length).toInt
130+
val mden = math.pow(10, length).toInt
127131
val token: Option[Token] = g match {
128132
case Grain.NoGrain => None
129133
case Grain.Second => None

Diff for: duckling-fork-chinese/learning/src/main/scala/com/xiaomi/duckling/dimension/time/duration/Examples.scala

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ object Examples extends DimExamples {
3838
(DurationData(2000, Year, schema = Some("P2000Y")), List("两千年")),
3939
(DurationData(30, Minute, schema = Some("PT0H30M")), List("半小时")),
4040
(DurationData(30, Minute, schema = Some("PT30M")), List("0.5小时")),
41+
(DurationData(90, Minute, schema = Some("PT90M")), List("1.5小时", "1.50小时", "一点五小时", "一点五零小时")),
4142
(DurationData(30, Minute, schema = Some("PT30M")), List("30分钟", "半个钟头")),
4243
(DurationData(12, Hour, schema = Some("P0DT12H")), List("半天")),
4344
(DurationData(90, Minute, schema = Some("PT1H30M")), List("一个半小时", "一小时30分钟", "一个小时30分钟")),

0 commit comments

Comments
 (0)