This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch NLPCRAFT-371
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-371 by this push:
new 69ee467 WIP.
69ee467 is described below
commit 69ee467fa47436610e819d10ea11c399f7163e06
Author: Sergey Kamov <[email protected]>
AuthorDate: Sat Jul 24 11:47:36 2021 +0300
WIP.
---
.../nlpcraft/probe/mgrs/cmd/NCCommandManager.scala | 9 +--
.../nlpcraft/server/probe/NCProbeManager.scala | 35 ++++++++++-
.../nlpcraft/server/rest/NCBasicRestApi.scala | 11 +++-
.../nlpcraft/server/rest/NCRestModelSpec.scala | 73 +++++++++++++---------
4 files changed, 91 insertions(+), 37 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
index ef676af..f63a088 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
@@ -168,9 +168,9 @@ object NCCommandManager extends NCService {
val mdlId = msg.data[String]("mdlId")
val elmId = msg.data[String]("elmId")
- val elm = NCModelManager.
- getModel(mdlId).
- model.getElements.asScala.find(_.getId ==
elmId).
+ val mdl = NCModelManager.getModel(mdlId).model
+
+ val elm = mdl.getElements.asScala.find(_.getId
== elmId).
getOrElse(throw new NCE(s"Element not
found in model: $elmId"))
val vals: util.Map[String, JList[String]] =
@@ -185,7 +185,8 @@ object NCCommandManager extends NCService {
"resp" -> GSON.toJson(
Map(
"synonyms" ->
elm.getSynonyms.asInstanceOf[JSerializable],
- "values" ->
vals.asInstanceOf[JSerializable]
+ "values" ->
vals.asInstanceOf[JSerializable],
+ "macros" ->
mdl.getMacros.asInstanceOf[JSerializable]
).asJava
)
)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
index 12db28b..8f402db 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
@@ -23,8 +23,9 @@ import io.opencensus.trace.Span
import org.apache.nlpcraft.common.ascii.NCAsciiTable
import org.apache.nlpcraft.common.config.NCConfigurable
import org.apache.nlpcraft.common.crypto.NCCipher
+import org.apache.nlpcraft.common.makro.NCMacroParser
import org.apache.nlpcraft.common.nlp.NCNlpSentence
-import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
+import org.apache.nlpcraft.common.nlp.core.{NCNlpCoreManager,
NCNlpPorterStemmer}
import org.apache.nlpcraft.common.pool.NCThreadPoolManager
import org.apache.nlpcraft.common.socket.NCSocket
import org.apache.nlpcraft.common.version.NCVersion
@@ -45,7 +46,7 @@ import java.util.Collections
import java.util.concurrent.ConcurrentHashMap
import scala.collection.mutable
import scala.concurrent.{ExecutionContext, Future, Promise}
-import scala.jdk.CollectionConverters.SetHasAsScala
+import scala.jdk.CollectionConverters.{ListHasAsScala, MapHasAsJava,
MapHasAsScala, SeqHasAsJava, SetHasAsScala}
import scala.util.{Failure, Success}
/**
@@ -1112,6 +1113,36 @@ object NCProbeManager extends NCService {
NCProbeMessage("S2P_MODEL_ELEMENT_INFO", "mdlId" -> mdlId,
"elmId" -> elmId),
modelElmsInfo,
parent
+ ).map(
+ res => {
+ require(
+ res.containsKey("synonyms") &&
+ res.containsKey("values") &&
+ res.containsKey("macros")
+ )
+
+ val macros =
res.remove("macros").asInstanceOf[java.util.Map[String, String]]
+ val syns =
res.get("synonyms").asInstanceOf[java.util.List[String]]
+ val vals =
res.get("values").asInstanceOf[java.util.Map[String, java.util.List[String]]]
+
+ val parser = new NCMacroParser
+
+ macros.asScala.foreach(t => parser.addMacro(t._1, t._2))
+
+ val synsExpanded: java.util.List[String] =
+ syns.asScala.flatMap(s =>
parser.expand(s).map(NCNlpPorterStemmer.stem)).asJava
+
+ val valsExpanded: java.util.Map[String,
java.util.List[String]] =
+ vals.asScala.map(v =>
+ v._1 ->
+ v._2.asScala.flatMap(s =>
parser.expand(s).map(NCNlpPorterStemmer.stem)).asJava
+ ).toMap.asJava
+
+ res.put("synonymsExpanded", synsExpanded)
+ res.put("valuesExpanded", valsExpanded)
+
+ res
+ }
)
}
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
index cdbde7d..e52923a 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
@@ -857,13 +857,20 @@ class NCBasicRestApi extends NCRestApi with LazyLogging
with NCOpenCensusTrace w
fut.collect {
// We have to use Jackson (not spray) here to
serialize 'result' field.
case res =>
- require(res.containsKey("synonyms") &&
res.containsKey("values"))
+ require(
+ res.containsKey("synonyms") &&
+ res.containsKey("synonymsExpanded") &&
+ res.containsKey("values") &&
+ res.containsKey("valuesExpanded")
+ )
toJs(
Map(
"status" -> API_OK.toString,
"synonyms" -> res.get("synonyms"),
- "values" -> res.get("values")
+ "synonymsExpanded" ->
res.get("synonymsExpanded"),
+ "values" -> res.get("values"),
+ "valuesExpanded" ->
res.get("valuesExpanded")
)
)
}
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
index 7543f3a..62f7ce9 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
@@ -17,17 +17,19 @@
package org.apache.nlpcraft.server.rest
-import org.apache.nlpcraft.NCTestEnvironment
+import org.apache.nlpcraft.model.NCElement
+import org.apache.nlpcraft.{NCTestElement, NCTestEnvironment}
import org.junit.jupiter.api.Assertions._
import org.junit.jupiter.api.Test
-import scala.jdk.CollectionConverters.ListHasAsScala
+import java.util
+import scala.jdk.CollectionConverters.{ListHasAsScala, MapHasAsJava,
SetHasAsJava, SetHasAsScala}
/**
* Note that context word server should be started.
*/
@NCTestEnvironment(model = classOf[RestTestModel], startClient = false)
-class NCRestModelSpec extends NCRestSpec {
+class NCRestModelSpec1 extends NCRestSpec {
@Test
def testSugsyn(): Unit = {
def extract(data: JList[java.util.Map[String, Object]]): Seq[Double] =
@@ -59,36 +61,49 @@ class NCRestModelSpec extends NCRestSpec {
postError("model/sugsyn", 400, "NC_INVALID_FIELD", "mdlId" ->
"rest.test.model", "minScore" -> 2)
postError("model/sugsyn", 400, "NC_ERROR")
}
+}
- @Test
- def testSyns(): Unit = {
- // Note that checked values are valid for current configuration of
`RestTestModel` model.
- post("model/syns", "mdlId" -> "rest.test.model", "elmId" -> "x")(
- ("$.status", (status: String) => assertEquals("API_OK", status)),
- ("$.synonyms", (syns: ResponseList) => {
- println("synonyms="+syns)
-
- assertTrue(!syns.isEmpty)
- }),
- ("$.values", (vals: java.util.Map[Object, Object]) => {
- println("values="+vals)
+class RestTestModelExt extends RestTestModel {
+ override def getMacros: util.Map[String, String] = {
+ Map(
+ "<M1>" -> "mtest1 {x|_}",
+ "<M2>" -> "<M1> mtest2 {mtest3|_}"
+ ).asJava
+ }
- assertTrue(vals.isEmpty)
- })
- )
- post("model/syns", "mdlId" -> "rest.test.model", "elmId" -> "valElem")(
- ("$.status", (status: String) => assertEquals("API_OK", status)),
- ("$.synonyms", (syns: ResponseList) => {
- println("synonyms="+syns)
+ override def getElements: util.Set[NCElement] = {
+ (
+ super.getElements.asScala ++
+ Set(
+ NCTestElement("eExt1", "<M1>", "<M1> more"),
+ NCTestElement("eExt2", Seq("<M1>", "<M1> more"), Map("v1"->
Seq("<M2>", "<M2> more"), "v2" -> Seq("<M2>")))
+ )
+ ).asJava
+ }
+}
- assertTrue(!syns.isEmpty)
- }),
- ("$.values", (vals: java.util.Map[Object, Object]) => {
- println("values="+vals)
+/**
+ *
+ */
+@NCTestEnvironment(model = classOf[RestTestModelExt], startClient = false)
+class NCRestModelSpec2 extends NCRestSpec {
+ @Test
+ def testSyns(): Unit = {
+ // Note that checked values are valid for current configuration of
`RestTestModelExt` model.
+ def post0(elemId: String, valsShouldBe: Boolean): Unit =
+ post("model/syns", "mdlId" -> "rest.test.model", "elmId" ->
elemId)(
+ ("$.status", (status: String) => assertEquals("API_OK",
status)),
+ ("$.synonyms", (data: ResponseList) =>
assertTrue(!data.isEmpty)),
+ ("$.synonymsExpanded", (data: ResponseList) =>
assertTrue(!data.isEmpty)),
+ ("$.values", (data: java.util.Map[Object, Object]) =>
+ if (valsShouldBe) assertTrue(!data.isEmpty) else
assertTrue(data.isEmpty)),
+ ("$.valuesExpanded", (data: java.util.Map[Object, Object]) =>
+ if (valsShouldBe) assertTrue(!data.isEmpty) else
assertTrue(data.isEmpty)
+ )
+ )
- assertTrue(!vals.isEmpty)
- })
- )
+ post0("eExt1", valsShouldBe = false)
+ post0("eExt2", valsShouldBe = true)
postError("model/syns", 400, "NC_INVALID_FIELD", "mdlId" -> "UNKNOWN",
"elmId" -> "UNKNOWN")
postError("model/syns", 400, "NC_INVALID_FIELD", "mdlId" ->
"rest.test.model", "elmId" -> "UNKNOWN")