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]