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 2022/10/16 07:50:54 UTC

[incubator-nlpcraft] branch NLPCRAFT-517 created (now 012665db)

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

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


      at 012665db WIP.

This branch includes the following new commits:

     new 012665db WIP.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-nlpcraft] 01/01: WIP.

Posted by se...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 012665dbfd3c39760617a1d68866c2811c69d018
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Sun Oct 16 11:50:41 2022 +0400

    WIP.
---
 .../nlpcraft/models/NCIntCalcModelSpec.scala       | 40 +++++++---------------
 .../nlpcraft/nlp/parsers/NCNLPEntityParser.scala   |  4 +--
 2 files changed, 15 insertions(+), 29 deletions(-)

diff --git a/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala b/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala
index b92e6304..5eb57bd9 100644
--- a/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala
+++ b/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala
@@ -31,38 +31,29 @@ import scala.util.Using
 
 object NCIntCalcModelSpec:
     val MDL: NCModel = new NCTestModelAdapter:
+        private val OPS: Map[String, (Int, Int) => Int] = Map("+" -> (_ + _), "-" -> (_ - _), "*" -> (_ * _), "/" -> (_ / _))
+
         private var mem: Option[Int] = None
 
         override val getPipeline: NCPipeline =
-            val stanford =
-                val props = new Properties()
-                props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner")
-                new StanfordCoreNLP(props)
+            val stanford = new StanfordCoreNLP(mkProps("annotators", "tokenize, ssplit, pos, lemma, ner"))
 
             new NCPipelineBuilder().
                 withTokenParser(new NCStanfordNLPTokenParser(stanford)).
-                // For operations.
-                withEntityParser(new NCNLPEntityParser).
-                // For numerics.
-                withEntityParser(new NCStanfordNLPEntityParser(stanford, Set("number"))).
+                withEntityParser(new NCNLPEntityParser(t => OPS.contains(t.getText))). // For operations.
+                withEntityParser(new NCStanfordNLPEntityParser(stanford, Set("number"))). // For numerics.
                 build
 
         private def nne(e: NCEntity): Int = java.lang.Double.parseDouble(e[String]("stanford:number:nne")).intValue
+        private def mkProps(k: String, v: String): Properties =
+            val p = new Properties(); p.setProperty(k, v); p
 
         private def calc(x: Int, op: String, y: Int): NCResult =
-            mem =
-                Some(op match
-                    case "+" => x + y
-                    case "-" => x - y
-                    case "*" => x * y
-                    case "/" => x / y
-                    case _ => throw new IllegalStateException()
-                )
-
+            mem = Some(OPS.getOrElse(op, throw new IllegalStateException()).apply(x, y))
             NCResult(mem.get)
 
         @NCIntent(
-            "intent=calc options={ 'ordered': false }" +
+            "intent=calc options={ 'ordered': true }" +
             "  term(x)={# == 'stanford:number'} " +
             "  term(op)={# == 'nlp:token' && has(list('+', '-', '*', '/'), meta_ent('nlp:token:text')) == true} " +
             "  term(y)={# == 'stanford:number'}"
@@ -76,7 +67,7 @@ object NCIntCalcModelSpec:
         ): NCResult = calc(nne(x), op.mkText, nne(y))
 
         @NCIntent(
-            "intent=calcMem options={ 'ordered': false }" +
+            "intent=calcMem options={ 'ordered': true }" +
             "  term(op)={# == 'nlp:token' && has(list('+', '-', '*', '/'), meta_ent('nlp:token:text')) == true} " +
             "  term(y)={# == 'stanford:number'}"
         )
@@ -85,16 +76,12 @@ object NCIntCalcModelSpec:
             im: NCIntentMatch,
             @NCIntentTerm("op") op: NCEntity,
             @NCIntentTerm("y") y: NCEntity
-        ): NCResult =
-            mem match
-                case Some(x) => calc(x, op.mkText, nne(y))
-                case None => throw new NCRejection("Memory is empty.")
+        ): NCResult = calc(mem.getOrElse(throw new NCRejection("Memory is empty.")), op.mkText, nne(y))
 
 class NCIntCalcModelSpec extends AnyFunSuite:
     test("test") {
         Using.resource(new NCModelClient(NCIntCalcModelSpec.MDL)) { client =>
-            def check(txt: String, v: Int): Unit =
-                require(v == client.ask(txt, "userId").getBody)
+            def check(txt: String, v: Int): Unit = require(v == client.ask(txt, "userId").getBody)
 
             check("2 + 2", 4)
             check("3 * 4", 12)
@@ -102,5 +89,4 @@ class NCIntCalcModelSpec extends AnyFunSuite:
             check("+ twenty two", 28)
             check("7 + 2", 9)
         }
-    }
-
+    }
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala
index 9f812749..ffeff290 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala
@@ -33,9 +33,9 @@ import org.apache.nlpcraft.nlp.parsers.NCNLPEntityParser.*
 /**
   *
   */
-class NCNLPEntityParser extends NCEntityParser:
+class NCNLPEntityParser(predicate: NCToken => Boolean = _ => true) extends NCEntityParser:
     override def parse(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): List[NCEntity] =
-        toks.map(t =>
+        toks.filter(predicate).map(t =>
             new NCPropertyMapAdapter with NCEntity:
                 put(s"$id:text", t.getText)
                 put(s"$id:index", t.getIndex)