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