You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2021/01/20 09:35:48 UTC
[incubator-nlpcraft] branch master updated: LimitManager bugfixes.
This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/master by this push:
new 4599203 LimitManager bugfixes.
4599203 is described below
commit 459920365c81b3bedcb8dffa77027c08f59b36c4
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Wed Jan 20 12:28:03 2021 +0300
LimitManager bugfixes.
---
.../common/nlp/numeric/NCNumericManager.scala | 24 ++++++++++++++--------
.../mgrs/nlp/enrichers/limit/NCLimitEnricher.scala | 2 +-
.../nlp/enrichers/limit/NCEnricherLimitSpec.scala | 10 +++++++++
3 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/numeric/NCNumericManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/numeric/NCNumericManager.scala
index 4fa8ef5..d359100 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/numeric/NCNumericManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/numeric/NCNumericManager.scala
@@ -361,7 +361,7 @@ object NCNumericManager extends NCService {
}).toSeq.map(_._2)
val nums = grps.flatMap(seq ⇒ {
- def mkNum(v: Double, isFractional: Boolean): NCNumeric = {
+ def mkNums(v: Double, isFractional: Boolean): Seq[NCNumeric] = {
// Units synonyms are not stemmed.
Range.inclusive(1, maxSynWords).reverse.toStream.flatMap(i ⇒ {
val afterNum = ns.slice(seq.last.index + 1, seq.last.index + i + 1)
@@ -386,8 +386,16 @@ object NCNumericManager extends NCService {
else
None
}).headOption match {
- case Some((unit, unitToks)) ⇒ NCNumeric(seq ++ unitToks, v, isFractional = isFractional, Some(unit))
- case None ⇒ NCNumeric(seq, v, isFractional = isFractional, None)
+ case Some((unit, unitToks)) ⇒
+ val numWithUnit = NCNumeric(seq ++ unitToks, v, isFractional = isFractional, Some(unit))
+
+ // If unit name is same as user element name,
+ // it returns both variants: numeric with unit and without.
+ unitToks.flatten.count(p ⇒ !p.isNlp && p.noteType != "nlpcraft:num") match {
+ case 1 ⇒ Seq(numWithUnit, NCNumeric(seq, v, isFractional = isFractional, None))
+ case _ ⇒ Seq(numWithUnit)
+ }
+ case None ⇒ Seq(NCNumeric(seq, v, isFractional = isFractional, None))
}
}
@@ -395,17 +403,17 @@ object NCNumericManager extends NCService {
case 1 ⇒
val txt = seq.head.normText
genNums.get(txt) match {
- case Some(intVal) ⇒ Some(mkNum(intVal.toDouble, isFractional = false))
+ case Some(intVal) ⇒ mkNums(intVal.toDouble, isFractional = false)
case None ⇒
toNumeric(txt) match {
- case Some(dblVal) ⇒ Some(mkNum(dblVal, isFractional = isFractional(txt)))
+ case Some(dblVal) ⇒ mkNums(dblVal, isFractional = isFractional(txt))
case None ⇒ None
}
}
case _ ⇒
genNums.get(toString(seq)) match {
- case Some(intVal) ⇒ Some(mkNum(intVal.toDouble, isFractional = false))
+ case Some(intVal) ⇒ mkNums(intVal.toDouble, isFractional = false)
// Try to parse space separated numerics 1 000 000.
case None ⇒
@@ -414,7 +422,7 @@ object NCNumericManager extends NCService {
val txt = toString(seq, "")
toNumeric(txt) match {
- case Some(dblVal) ⇒ Some(mkNum(dblVal, isFractional = isFractional(txt)))
+ case Some(dblVal) ⇒ mkNums(dblVal, isFractional = isFractional(txt))
case None ⇒ None
}
}
@@ -426,7 +434,7 @@ object NCNumericManager extends NCService {
val usedToks = nums.flatMap(_.tokens)
- (nums ++ ns.filter(t ⇒ !usedToks.contains(t)).flatMap(mkSolidNumUnit)).sortBy(_.tokens.head.index)
+ (nums ++ ns.filter(t ⇒ !usedToks.contains(t)).flatMap(mkSolidNumUnit)).sortBy(_.tokens.head.index).distinct
}
}
}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCLimitEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCLimitEnricher.scala
index 9e57605..fcfafd9 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCLimitEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCLimitEnricher.scala
@@ -255,7 +255,7 @@ object NCLimitEnricher extends NCProbeEnricher {
"mdlId" → mdl.model.getId,
"txt" → ns.text) { _ ⇒
val notes = mutable.HashSet.empty[NCNlpSentenceNote]
- val numsMap = NCNumericManager.find(ns).filter(_.unit.isEmpty).map(p ⇒ p.tokens → p).toMap
+ val numsMap = NCNumericManager.find(ns).map(p ⇒ p.tokens → p).toMap
val groupsMap = groupNums(ns, numsMap.values)
// Tries to grab tokens reverse way.
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
index 00f21e6..e983030 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
@@ -34,6 +34,16 @@ class NCEnricherLimitSpec extends NCEnricherBaseSpec {
def test(): Unit =
runBatch(
_ ⇒ checkExists(
+ "top 23 A",
+ lim(text = "top 23", limit = 23, index = 1, note = "A", asc = false),
+ usr(text = "A", id = "A")
+ ),
+ _ ⇒ checkExists(
+ "top 10 A",
+ lim(text = "top 10", limit = 10, index = 1, note = "A", asc = false),
+ usr(text = "A", id = "A")
+ ),
+ _ ⇒ checkExists(
"top A",
lim(text = "top", limit = 10, index = 1, note = "A", asc = false),
usr(text = "A", id = "A")