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/07/26 09:11:04 UTC

[incubator-nlpcraft] branch NLPCRAFT-376 updated: WIP.

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

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


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

commit 87491210c8c4a2bc272b7329fe5ead29198a2a13
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Mon Jul 26 12:10:53 2021 +0300

    WIP.
---
 .../scala/org/apache/nlpcraft/NCTestContext.scala  | 15 ++++
 .../models/stm/NCStmIndexesTestModelSpec.scala     | 89 +++++++++++++++-------
 2 files changed, 78 insertions(+), 26 deletions(-)

diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestContext.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestContext.scala
index 9487e55..a713cd1 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestContext.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestContext.scala
@@ -151,6 +151,21 @@ abstract class NCTestContext {
         assertEquals(expResp, res.getResult.get)
     }
 
+    /**
+      *
+      * @param req
+      * @param resExtractor
+      * @param expResp
+      * @tparam T
+      */
+    protected def checkResult[T](req: String, resExtractor: String => T, expResp: T): Unit = {
+        val res = getClient.ask(req)
+
+        assertTrue(res.isOk, s"Unexpected result, error=${res.getResultError.orElse(null)}")
+        assertTrue(res.getResult.isPresent)
+        assertEquals(expResp, resExtractor(res.getResult.get))
+    }
+
     final protected def getClient: NCTestClient = {
         if (cli == null)
             throw new IllegalStateException("Client is not started.")
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmIndexesTestModelSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmIndexesTestModelSpec.scala
index 9965597..be94a42 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmIndexesTestModelSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmIndexesTestModelSpec.scala
@@ -17,56 +17,93 @@
 
 package org.apache.nlpcraft.models.stm
 
-import org.apache.nlpcraft.model.impl.NCTokenPimp
-import org.apache.nlpcraft.{NCTestContext, NCTestElement, NCTestEnvironment}
-import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentMatch, NCModelAdapter, NCResult}
-import org.apache.nlpcraft.model.{NCIntentMatch, _}
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.module.scala.DefaultScalaModule
+import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentMatch, NCModelAdapter, NCResult, _}
+import org.apache.nlpcraft.models.stm.NCStmIndexesTestModelData.mapper
+import org.apache.nlpcraft.{NCTestContext, NCTestEnvironment}
 import org.junit.jupiter.api.Test
 
 import java.util
-import scala.jdk.CollectionConverters.{ListHasAsScala, SeqHasAsJava, SetHasAsJava}
-import scala.language.implicitConversions
-import java.util
 import java.util.Collections
+import scala.jdk.CollectionConverters.{ListHasAsScala, MapHasAsScala, SeqHasAsJava, SetHasAsJava}
+import scala.language.implicitConversions
+import java.util.{List => JList}
+
+object NCStmIndexesTestModelData {
+    val mapper = new ObjectMapper()
+
+    mapper.registerModule(new DefaultScalaModule())
+}
+
+case class NCStmIndexesTestModelData(
+    subjnotes: Seq[String] = Seq.empty,
+    subjindexes: Seq[Int] = Seq.empty,
+    bynotes: Seq[String] = Seq.empty,
+    byindexes: Seq[Int] = Seq.empty
+)
 
 class NCStmIndexesTestModel extends NCModelAdapter("nlpcraft.stm.idxs.test", "STM Indexes Test Model", "1.0") {
     override def getElements: util.Set[NCElement] =
         Set(
-            mkElement("A", "G"),
-            mkElement("B", "G")
+            mkElement("A", "G", "a a"),
+            mkElement("B", "G", "b b")
         ).asJava
 
-    private def mkElement(id: String, group: String): NCElement =
+    private def mkElement(id: String, group: String, syns: String*): NCElement =
         new NCElement {
             override def getId: String = id
-            override def getSynonyms: util.List[String] = Collections.singletonList(id)
+            override def getSynonyms: util.List[String] = {
+                val seq: Seq[String] = syns
+
+                seq.asJava
+            }
             override def getGroups: util.List[String] = Collections.singletonList(group)
         }
 
-    @NCIntent("intent=i term(sort)~{tok_id() == 'nlpcraft:sort'} term(elem)={has(tok_groups(), 'G')}")
-    private def onI(ctx: NCIntentMatch, @NCIntentTerm("sort") sort: NCToken): NCResult = {
-        val bynotes = sort.meta[java.util.List[String]]("nlpcraft:sort:bynotes")
-        val byindexes = sort.meta[java.util.List[String]]("nlpcraft:sort:byindexes")
+    @NCIntent("intent=onBySort term(sort)~{tok_id() == 'nlpcraft:sort'} term(elem)={has(tok_groups(), 'G')}")
+    private def onBySort(ctx: NCIntentMatch, @NCIntentTerm("sort") sort: NCToken): NCResult = {
+        def toStr(t: NCToken): String = s"${t.origText}(${t.index})"
 
-        def str(t: NCToken): String = s"${t.origText}(${t.index})"
+        println(s"sort: $sort")
+        println(s"sort-nlp-meta: ${sort.getMetadata.asScala.filter(_._1.startsWith("nlpcraft:nlp:")).mkString(", ")}")
+        println(s"sort-not-nlp-meta: ${sort.getMetadata.asScala.filter(!_._1.startsWith("nlpcraft:nlp:")).mkString(", ")}")
 
-        println(s"variant: ${ctx.getVariant.asScala.map(str).mkString("|")}")
-        println(s"variant sort bynotes: $bynotes")
-        println(s"variant sort byindexes: $byindexes")
-        println(s"variant freeTokens: ${ctx.getVariant.getFreeTokens.asScala.map(str).mkString("|")}")
-        println(s"variant matchedTokens: ${ctx.getVariant.getMatchedTokens.asScala.map(str).mkString("|")}")
-        println(s"variant userDefinedTokens: ${ctx.getVariant.getUserDefinedTokens.asScala.map(str).mkString("|")}")
-        println(s"variant conversation: ${ctx.getContext.getConversation.getTokens.asScala.map(str).mkString("|")}")
+        println(s"variant: ${ctx.getVariant.asScala.map(toStr).mkString("|")}")
+        println(s"variant freeTokens: ${ctx.getVariant.getFreeTokens.asScala.map(toStr).mkString("|")}")
+        println(s"variant matchedTokens: ${ctx.getVariant.getMatchedTokens.asScala.map(toStr).mkString("|")}")
+        println(s"variant userDefinedTokens: ${ctx.getVariant.getUserDefinedTokens.asScala.map(toStr).mkString("|")}")
+        println(s"variant conversation: ${ctx.getContext.getConversation.getTokens.asScala.map(toStr).mkString("|")}")
 
-        NCResult.text("OK")
+        val bynotes = sort.meta[JList[String]]("nlpcraft:sort:bynotes")
+        val byindexes = sort.meta[JList[Int]]("nlpcraft:sort:byindexes")
+
+        NCResult.json(
+            mapper.writeValueAsString(
+                NCStmIndexesTestModelData(
+                    bynotes = bynotes.asScala.toSeq,
+                    byindexes = byindexes.asScala.toSeq
+                )
+            )
+        )
     }
 }
 
 @NCTestEnvironment(model = classOf[NCStmIndexesTestModel], startClient = true)
 class NCStmIndexesTestModelSpec extends NCTestContext {
+    private def extract(s: String): NCStmIndexesTestModelData = mapper.readValue(s, classOf[NCStmIndexesTestModelData])
+
     @Test
     private[stm] def test(): Unit = {
-        checkResult("test test sort by A", "OK")
-        checkResult("B", "OK")
+        checkResult(
+            "test test sort by a a",
+            extract,
+            NCStmIndexesTestModelData(bynotes = Seq("A"), byindexes = Seq(3))
+        )
+        checkResult(
+            "b b",
+            extract,
+            NCStmIndexesTestModelData(bynotes = Seq("A"), byindexes = Seq(3))
+        )
     }
 }
\ No newline at end of file