This is an automated email from the ASF dual-hosted git repository.

sergeykamov pushed a commit to branch NLPCRAFT-70_NEW
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/NLPCRAFT-70_NEW by this push:
     new a6e01c2  WIP.
a6e01c2 is described below

commit a6e01c2b665d1fc7c1c280eb21248c1cec93e97e
Author: Sergey Kamov <[email protected]>
AuthorDate: Sat Jun 26 10:59:40 2021 +0300

    WIP.
---
 .../apache/nlpcraft/common/nlp/NCNlpSentence.scala |  1 +
 .../mgrs/nlp/enrichers/model/NCModelEnricher.scala | 11 ++++++++++
 .../enrichers/ctxword/NCContextWordEnricher.scala  |  5 ++++-
 .../nlpcraft/model/ctxword/NCContextWordSpec.scala | 25 ++++++++++++++--------
 4 files changed, 32 insertions(+), 10 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/NCNlpSentence.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/NCNlpSentence.scala
index eef05de..d237558 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/NCNlpSentence.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/NCNlpSentence.scala
@@ -53,6 +53,7 @@ class NCNlpSentence(
     val text: String,
     val enabledBuiltInToks: Set[String],
     val mlConfig: Option[NCModelMLConfigMdo],
+    var mlData: Map[Int, Map[String, Double]] = Map.empty,
     override val tokens: mutable.ArrayBuffer[NCNlpSentenceToken] = new 
mutable.ArrayBuffer[NCNlpSentenceToken](32),
     var firstProbePhase: Boolean = true,
     private val deletedNotes: mutable.HashMap[NCNlpSentenceNote, 
Seq[NCNlpSentenceToken]] = mutable.HashMap.empty,
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/model/NCModelEnricher.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/model/NCModelEnricher.scala
index a2deee8..c3f5e3d 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/model/NCModelEnricher.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/model/NCModelEnricher.scala
@@ -29,6 +29,7 @@ import 
org.apache.nlpcraft.probe.mgrs.sentence.NCSentenceManager
 import org.apache.nlpcraft.probe.mgrs.{NCProbeModel, NCProbeVariants, 
NCTokenPartKey, NCProbeSynonym => Synonym}
 
 import java.io.Serializable
+import java.lang
 import java.util.{List => JList}
 import scala.collection.mutable
 import scala.collection.mutable.ArrayBuffer
@@ -447,6 +448,16 @@ object NCModelEnricher extends NCProbeEnricher {
         startScopedSpan(
             "enrich", parent, "srvReqId" -> ns.srvReqId, "mdlId" -> 
mdl.model.getId, "txt" -> ns.text
         ) { span =>
+            if (ns.firstProbePhase)
+                for ((tokIdx, map) <- ns.mlData; (elemId, score) <- map)
+                    mark(
+                        ns = ns,
+                        elem = mdl.elements.find(_._1 == 
elemId).getOrElse(throw new NCE(s"Element not found: $elemId"))._2,
+                        toks = Seq(ns.tokens(tokIdx)),
+                        direct = true,
+                        metaOpt = Some(Map("score" -> 
score.asInstanceOf[AnyRef]))
+                    )
+
             val req = NCRequestImpl(senMeta, ns.srvReqId)
             val combToks = combos(ns.toSeq)
             lazy val ch = mkComplexes(mdl, ns)
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
index 0ee5932..d60d15b 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
@@ -215,9 +215,12 @@ object NCContextWordEnricher extends NCServerEnricher {
                         score = (sampleSuggScore + senSuggScore) / 2
                         if score >= elemScore
                     )
-                        //println(s"elemId=$elemId, 
word=${ns.tokens(tokIdx).origText}, sampleScore=$sampleScore, 
suggScore=$suggScore, avg=$avg, suggStem=$suggStem, ")
                         add(ns.tokens(tokIdx), elemId, score)
                 }
+
+                ns.mlData = detected.map {
+                    case (tok, scores) => tok.index -> scores.map(p => 
p.elementId -> p.score).toMap
+                }.toMap
             case None => // No-op.
         }
 }
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
index 82610f5..95e5e6d 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
@@ -17,13 +17,13 @@
 
 package org.apache.nlpcraft.model.ctxword
 
-import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentSample, 
NCIntentTerm, NCModel, NCResult, NCToken, NCValue}
+import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentMatch, 
NCIntentSample, NCIntentTerm, NCModel, NCResult, NCToken, NCValue}
 import org.apache.nlpcraft.{NCTestContext, NCTestEnvironment}
 import org.junit.jupiter.api.Test
 
-import java.{lang, util}
 import java.util.{Collections, Optional}
-import scala.jdk.CollectionConverters.{ListHasAsScala, SeqHasAsJava, 
SetHasAsJava}
+import java.{lang, util}
+import scala.jdk.CollectionConverters.{SeqHasAsJava, SetHasAsJava}
 
 /**
   * Test model.
@@ -78,12 +78,19 @@ class NCContextWordSpecModel extends NCModel {
             "It is the beautiful day, the sun is shining ",
         )
     )
-    @NCIntent("intent=classification term(cars)~{has(tok_groups(), 
'testGroup')}*")
-    def onMatch(@NCIntentTerm("classification") toks: List[NCToken]): NCResult 
= {
-        val groups = toks.flatMap(_.getGroups.asScala).mkString(" ")
+    @NCIntent("intent=classification term(toks)~{has(tok_groups(), 
'testGroup')}*")
+    def onMatch(ctx: NCIntentMatch, @NCIntentTerm("toks") toks: 
List[NCToken]): NCResult = {
+        val txt = ctx.getContext.getRequest.getNormalizedText
+        val toksStr = toks.map(t =>
+            s"[text=${t.getOriginalText}, elementId=${t.getId}, 
score=${t.getMetadata.get(s"${t.getId}:score")}]"
+        ).mkString(", ")
+
+        println(s"Matched [text=$txt, tokens=$toksStr")
+
+        val elemIds = toks.map(_.getId).distinct.mkString(" ")
         val words = toks.map(_.getOriginalText).mkString(" ")
 
-        NCResult.text(s"${groups.mkString(" ")} ${words.mkString(" ")}")
+        NCResult.text(s"$elemIds $words")
     }
 }
 
@@ -92,8 +99,8 @@ class NCContextWordSpecModel extends NCModel {
   */
 @NCTestEnvironment(model = classOf[NCContextWordSpecModel], startClient = true)
 class NCContextWordSpec extends NCTestContext {
-    private def check(txt: String, group: String, words: String*): Unit =
-        require(s"$group ${words.mkString(" ")}" == getClient.ask(txt).getText)
+    private def check(txt: String, elemId: String, words: String*): Unit =
+        require(s"$elemId ${words.mkString(" ")}" == 
getClient.ask(txt).getResult.get())
 
     @Test
     @throws[Exception]

Reply via email to