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")

Reply via email to