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/08/23 16:30:43 UTC

[incubator-nlpcraft] 01/01: NCPropertyMap methods related fixes.

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

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

commit 30996df259cbb97a4fa9a0b83e23f03d92e77524
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Tue Aug 23 19:30:33 2022 +0300

    NCPropertyMap methods related fixes.
---
 .../nlp/token/enricher/NCFrStopWordsTokenEnricher.scala        |  4 ++--
 .../nlp/token/enricher/NCRuStopWordsTokenEnricher.scala        |  4 ++--
 .../org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala  | 10 +++++-----
 .../examples/pizzeria/components/PizzeriaOrderMapper.scala     |  4 ++--
 .../token/parser/stanford/NCStanfordNLPTokenParserSpec.scala   |  4 ++--
 .../src/main/scala/org/apache/nlpcraft/NCPropertyMap.scala     |  4 ++--
 .../main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala  |  6 ++----
 .../apache/nlpcraft/internal/impl/NCModelPipelineManager.scala |  2 +-
 .../nlpcraft/internal/intent/compiler/NCIDLCodeGenerator.scala |  4 ++--
 .../internal/intent/matcher/NCIntentSolverManager.scala        |  2 +-
 .../nlpcraft/nlp/enrichers/NCEnDictionaryTokenEnricher.scala   |  2 +-
 .../nlpcraft/nlp/enrichers/NCEnQuotesTokenEnricher.scala       |  2 +-
 .../nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala    |  6 +++---
 .../org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala    |  2 +-
 .../apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala   |  6 +++---
 .../internal/conversation/NCConversationTimeoutSpec.scala      |  2 +-
 .../org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala  |  2 +-
 .../nlpcraft/nlp/enrichers/NCBracketsTokenEnricherSpec.scala   |  2 +-
 .../nlpcraft/nlp/enrichers/NCDictionaryTokenEnricherSpec.scala |  8 ++++----
 .../nlpcraft/nlp/enrichers/NCQuotesTokenEnricherSpec.scala     |  2 +-
 .../nlpcraft/nlp/enrichers/NCStopWordsEnricherSpec.scala       |  4 ++--
 .../nlpcraft/nlp/enrichers/NCSwearWordsTokenEnricherSpec.scala |  8 ++++----
 .../nlpcraft/nlp/parsers/NCOpenNLPEntityParserSpec.scala       |  2 +-
 .../apache/nlpcraft/nlp/parsers/NCOpenNLPTokenParserSpec.scala |  2 +-
 .../nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala  |  2 +-
 .../nlpcraft/nlp/parsers/NCSemanticEntityParserLemmaSpec.scala |  2 +-
 .../nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala      |  4 ++--
 .../test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala  |  4 ++--
 28 files changed, 52 insertions(+), 54 deletions(-)

diff --git a/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCFrStopWordsTokenEnricher.scala b/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCFrStopWordsTokenEnricher.scala
index be791402..ffc68de0 100644
--- a/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCFrStopWordsTokenEnricher.scala
+++ b/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCFrStopWordsTokenEnricher.scala
@@ -29,8 +29,8 @@ import scala.jdk.CollectionConverters.*
 class NCFrStopWordsTokenEnricher extends NCTokenEnricher:
     private final val stops = FrenchAnalyzer.getDefaultStopSet
 
-    private def getPos(t: NCToken): String = t.getOpt("pos").getOrElse(throw new NCException("POS not found in token."))
-    private def getLemma(t: NCToken): String = t.getOpt("lemma").getOrElse(throw new NCException("Lemma not found in token."))
+    private def getPos(t: NCToken): String = t.get("pos").getOrElse(throw new NCException("POS not found in token."))
+    private def getLemma(t: NCToken): String = t.get("lemma").getOrElse(throw new NCException("Lemma not found in token."))
 
     override def enrich(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): Unit =
         for (t <- toks)
diff --git a/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCRuStopWordsTokenEnricher.scala b/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCRuStopWordsTokenEnricher.scala
index 1759c70f..7871450f 100644
--- a/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCRuStopWordsTokenEnricher.scala
+++ b/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/token/enricher/NCRuStopWordsTokenEnricher.scala
@@ -26,8 +26,8 @@ import org.apache.nlpcraft.*
 class NCRuStopWordsTokenEnricher extends NCTokenEnricher:
     private final val stops = RussianAnalyzer.getDefaultStopSet
 
-    private def getPos(t: NCToken): String = t.getOpt("pos").getOrElse(throw new NCException("POS not found in token."))
-    private def getLemma(t: NCToken): String = t.getOpt("lemma").getOrElse(throw new NCException("Lemma not found in token."))
+    private def getPos(t: NCToken): String = t.get("pos").getOrElse(throw new NCException("POS not found in token."))
+    private def getLemma(t: NCToken): String = t.get("lemma").getOrElse(throw new NCException("Lemma not found in token."))
 
     override def enrich(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): Unit =
         for (t <- toks)
diff --git a/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala b/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
index d661b813..242f3b46 100644
--- a/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
+++ b/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
@@ -27,12 +27,12 @@ import org.apache.nlpcraft.examples.pizzeria.components.PizzeriaModelPipeline
 import org.apache.nlpcraft.nlp.*
 
 object PizzeriaExtractors:
-    def extractPizzaSize(e: NCEntity): String = e.get[String]("ord:pizza:size:value")
-    def extractQty(e: NCEntity, qty: String): Option[Int] = Option.when(e.contains(qty))(e.get[String](qty).toDouble.toInt)
+    def extractPizzaSize(e: NCEntity): String = e[String]("ord:pizza:size:value")
+    def extractQty(e: NCEntity, qty: String): Option[Int] = Option.when(e.contains(qty))(e[String](qty).toDouble.toInt)
     def extractPizza(e: NCEntity): Pizza =
-        Pizza(e.get[String]("ord:pizza:value"), e.getOpt[String]("ord:pizza:size"), extractQty(e, "ord:pizza:qty"))
+        Pizza(e[String]("ord:pizza:value"), e.get[String]("ord:pizza:size"), extractQty(e, "ord:pizza:qty"))
     def extractDrink(e: NCEntity): Drink =
-        Drink(e.get[String]("ord:drink:value"), extractQty(e, "ord:drink:qty"))
+        Drink(e[String]("ord:drink:value"), extractQty(e, "ord:drink:qty"))
 
 import PizzeriaExtractors.*
 
@@ -46,7 +46,7 @@ object PizzeriaModel extends LazyLogging:
     private def getCurrentOrder()(using ctx: NCContext): Order =
         val sess = ctx.getConversation.getData
         val usrId = ctx.getRequest.getUserId
-        sess.getOpt[Order](usrId) match
+        sess.get[Order](usrId) match
             case Some(ord) => ord
             case None =>
                 val ord = new Order()
diff --git a/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/components/PizzeriaOrderMapper.scala b/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/components/PizzeriaOrderMapper.scala
index e267b332..673b62b8 100644
--- a/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/components/PizzeriaOrderMapper.scala
+++ b/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/components/PizzeriaOrderMapper.scala
@@ -59,8 +59,8 @@ case class PizzeriaOrderMapper(extra: PizzeriaOrderMapperDesc, dests: Seq[Pizzer
     override def map(req: NCRequest, cfg: NCModelConfig, ents: List[NCEntity]): List[NCEntity] =
         def map(destEnt: NCEntity, destProp: String, extraEnt: NCEntity): NCEntity =
             new NCPropertyMapAdapter with NCEntity:
-                destEnt.keysSet.foreach(k => put(k, destEnt.get(k)))
-                put[String](destProp, extraEnt.get[String](extra.propertyName).toLowerCase)
+                destEnt.keysSet.foreach(k => put(k, destEnt(k)))
+                put[String](destProp, extraEnt[String](extra.propertyName).toLowerCase)
                 override val getTokens: List[NCToken] = (destEnt.tokens ++ extraEnt.tokens).sortBy(_.getIndex)
                 override val getRequestId: String = req.getRequestId
                 override val getId: String = destEnt.getId
diff --git a/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/nlp/token/parser/stanford/NCStanfordNLPTokenParserSpec.scala b/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/nlp/token/parser/stanford/NCStanfordNLPTokenParserSpec.scala
index 954078c2..bfbbaa90 100644
--- a/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/nlp/token/parser/stanford/NCStanfordNLPTokenParserSpec.scala
+++ b/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/nlp/token/parser/stanford/NCStanfordNLPTokenParserSpec.scala
@@ -37,5 +37,5 @@ class NCStanfordNLPTokenParserSpec:
         NCTestUtils.printTokens(toks)
 
         val words = toks.map(_.getText)
-        require(toks.map(_.get["String"]("pos")).filter(_ != null).distinct.sizeIs > 1)
-        require(toks.map(_.get[String]("lemma")).filter(_ != null).zip(words).exists {_ != _})
+        require(toks.map(_["String"]("pos")).filter(_ != null).distinct.sizeIs > 1)
+        require(toks.map(_[String]("lemma")).filter(_ != null).zip(words).exists {_ != _})
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMap.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMap.scala
index 5565b7fa..114453df 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMap.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMap.scala
@@ -30,7 +30,7 @@ trait NCPropertyMap:
       * @param key The key whose associated value is to be returned.
       * @param <T> Type of the returned value.
       * @return The value to which the specified key is mapped, or `null` if this map contains no mapping for the key. */
-    def get[T](key: String): T
+    def apply[T](key: String): T
 
     /**
       * Returns the value to which the specified key is mapped as an optional. This method is equivalent to:
@@ -41,7 +41,7 @@ trait NCPropertyMap:
       * @param key The key whose associated value is to be returned.
       * @param <T> Type of the returned value.
       * @return The value to which the specified key is mapped as an optional. */
-    def getOpt[T](key: String): Option[T]
+    def get[T](key: String): Option[T]
 
     /**
       * Associates the specified value with the specified key in this map. If the map previously contained a mapping
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala
index 44430183..2a56c952 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala
@@ -25,11 +25,9 @@ import java.util.concurrent.ConcurrentHashMap
 class NCPropertyMapAdapter extends NCPropertyMap:
     private val map = new ConcurrentHashMap[String, Any]
 
-    // TODO: or error?
+    override def apply[T](key: String): T = get(key).getOrElse(throw new NoSuchElementException(s"Key not found: $key"))
 
-    override def get[T](key: String): T = getOpt(key).orNull.asInstanceOf[T]
-
-    override def getOpt[T](key: String): Option[T] =
+    override def get[T](key: String): Option[T] =
         map.get(key) match
             case null => None
             case x => Some(x.asInstanceOf[T])
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala
index 78d9e5df..9e096efa 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala
@@ -90,7 +90,7 @@ class NCModelPipelineManager(cfg: NCModelConfig, pipeline: NCPipeline) extends L
       */
     private def mkProps(m: NCPropertyMap): String =
         if m.keysSet.isEmpty then ""
-        else m.keysSet.toSeq.sorted.map(p => s"$p=${m.get[Any](p)}").mkString("{", ", ", "}")
+        else m.keysSet.toSeq.sorted.map(p => s"$p=${m(p)}").mkString("{", ", ", "}")
 
     /**
       *
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCodeGenerator.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCodeGenerator.scala
index 6c48be8c..cfc3352f 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCodeGenerator.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCodeGenerator.scala
@@ -895,8 +895,8 @@ trait NCIDLCodeGenerator:
         try
             fun match
                 // Metadata access.
-                case "meta_ent" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(ent.impl.get[Object](toStr(v))), 0) })
-                case "meta_cfg" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(idlCtx.mdlCfg.get[Object](toStr(v))), 0) })
+                case "meta_ent" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(ent.impl.get[Object](toStr(v)).orNull), 0) })
+                case "meta_cfg" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(idlCtx.mdlCfg.get[Object](toStr(v)).orNull), 0) })
                 case "meta_req" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(idlCtx.req.getRequestData.get(toStr(v)).orNull.asInstanceOf[Object]), 0) })
                 case "meta_intent" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(idlCtx.intentMeta.get(toStr(v)).orNull), 0) })
                 case "meta_conv" => z[ST](arg1, { x => val Z(v, _) = x(); Z(box(idlCtx.convMeta.get(toStr(v)).orNull), 0) })
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
index a16a94d6..707c2cc1 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
@@ -448,7 +448,7 @@ class NCIntentSolverManager(
             var abort = false
             var lastTermMatch: TermMatch = null
             val sess = ctx.getConversation.getData // Conversation metadata (shared across all terms).
-            val convMeta = sess.keysSet.map(k => k -> sess.get(k).asInstanceOf[Object]).toMap
+            val convMeta = sess.keysSet.map(k => k -> sess(k).asInstanceOf[Object]).toMap
             val ents = senEnts.map(_.entity)
 
             // Check terms.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnDictionaryTokenEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnDictionaryTokenEnricher.scala
index 7960f2e8..7360ac3e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnDictionaryTokenEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnDictionaryTokenEnricher.scala
@@ -29,7 +29,7 @@ class NCEnDictionaryTokenEnricher extends NCTokenEnricher:
     init()
 
     private def init(): Unit = dict = NCUtils.readResource("moby/354984si.ngl", "iso-8859-1").toSet
-    private def getLemma(t: NCToken): String = t.getOpt("lemma").getOrElse(throw new NCException("Lemma not found in token."))
+    private def getLemma(t: NCToken): String = t.get("lemma").getOrElse(throw new NCException("Lemma not found in token."))
 
     override def enrich(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): Unit =
         toks.foreach(t => t.put("dict", dict.contains(getLemma(t))))
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnQuotesTokenEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnQuotesTokenEnricher.scala
index 320ffe86..5c514a71 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnQuotesTokenEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnQuotesTokenEnricher.scala
@@ -25,7 +25,7 @@ import org.apache.nlpcraft.*
   */
 class NCEnQuotesTokenEnricher extends NCTokenEnricher with LazyLogging:
     private final val Q_POS: Set[String] = Set("``", "''")
-    private def getPos(t: NCToken): String = t.getOpt("pos").getOrElse(throw new NCException("POS not found in token."))
+    private def getPos(t: NCToken): String = t.get("pos").getOrElse(throw new NCException("POS not found in token."))
     private def isQuote(t: NCToken): Boolean = Q_POS.contains(getPos(t))
 
     override def enrich(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): Unit =
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala
index 1174a978..7a791630 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala
@@ -95,13 +95,13 @@ object NCEnStopWordsTokenEnricher:
         "percent"
     )
 
-    private def getPos(t: NCToken): String = t.getOpt("pos").getOrElse(throw new NCException(s"POS not found in token: ${t.keysSet}"))
-    private def getLemma(t: NCToken): String = t.getOpt("lemma").getOrElse(throw new NCException(s"Lemma not found in token: ${t.keysSet}"))
+    private def getPos(t: NCToken): String = t.get("pos").getOrElse(throw new NCException(s"POS not found in token: ${t.keysSet}"))
+    private def getLemma(t: NCToken): String = t.get("lemma").getOrElse(throw new NCException(s"Lemma not found in token: ${t.keysSet}"))
     private def isQuote(t: NCToken): Boolean = Q_POS.contains(getPos(t))
     private def toLemmaKey(toks: Seq[NCToken]): String = toks.map(getLemma).mkString(" ")
     private def toValueKey(toks: Seq[NCToken]): String = toks.map(_.getText.toLowerCase).mkString(" ")
     private def toOriginalKey(toks: Seq[NCToken]): String = toks.map(_.getText).mkString(" ")
-    private def isStopWord(t: NCToken): Boolean = t.getOpt[Boolean]("stopword").getOrElse(false)
+    private def isStopWord(t: NCToken): Boolean = t.get[Boolean]("stopword").getOrElse(false)
 
     /**
       * Gets all sequential permutations of tokens in this NLP sentence.
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 def5527b..53ad9086 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
@@ -41,7 +41,7 @@ class NCNLPEntityParser extends NCEntityParser:
                 put(s"$id:index", t.getIndex)
                 put(s"$id:startCharIndex", t.getStartCharIndex)
 
-                t.keysSet.foreach(key => put(s"$id:$key", t.get(key)))
+                t.keysSet.foreach(key => put(s"$id:$key", t(key)))
 
                 override val getTokens: List[NCToken] = List(t)
                 override val getRequestId: String = req.getRequestId
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala
index ec9787d3..17952800 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala
@@ -99,7 +99,7 @@ object NCSemanticEntityParser:
       * @param t
       * @return
       */
-    private def isStopWord(t: NCToken): Boolean = t.getOpt[Boolean]("stopword").getOrElse(false)
+    private def isStopWord(t: NCToken): Boolean = t.get[Boolean]("stopword").getOrElse(false)
 
     /**
       *
@@ -228,13 +228,13 @@ class NCSemanticEntityParser(
     private def warnMissedProperty(name: String): Unit = logger.warn(s"'$name' property not found. Is proper token enricher configured?")
 
     override def parse(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): List[NCEntity] =
-        if toks.exists(_.getOpt[String]("stopword").isEmpty) then warnMissedProperty("stopword")
+        if toks.exists(_.get[String]("stopword").isEmpty) then warnMissedProperty("stopword")
 
         val stems = toks.map(p => p -> stemmer.stem(p.getText.toLowerCase)).toMap
         val stems4Lemms =
             var ok = true
             val seq =
-                for (t <- toks; lemmaOpt = t.getOpt[String]("lemma") if ok)
+                for (t <- toks; lemmaOpt = t.get[String]("lemma") if ok)
                     yield
                         ok = lemmaOpt.isDefined
                         t -> lemmaOpt.orNull
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/conversation/NCConversationTimeoutSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/conversation/NCConversationTimeoutSpec.scala
index 3417b93b..c75f6cb4 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/conversation/NCConversationTimeoutSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/conversation/NCConversationTimeoutSpec.scala
@@ -55,7 +55,7 @@ class NCConversationTimeoutSpec:
                 @NCIntent("intent=i term(e)~{# == 'test'}")
                 def onMatch(ctx: NCContext, im: NCIntentMatch, @NCIntentTerm("e") e: NCEntity): NCResult =
                     val conv = ctx.getConversation
-                    val res = NCResult(conv.getData.getOpt("key").getOrElse(EMPTY), NCResultType.ASK_RESULT)
+                    val res = NCResult(conv.getData.get("key").getOrElse(EMPTY), NCResultType.ASK_RESULT)
 
                     // For next calls.
                     conv.getData.put("key", VALUE)
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
index 9b2140ef..714ac8b2 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
@@ -36,7 +36,7 @@ class NCModelClientSpec:
       * @return
       */
     private def s(e: NCEntity): String =
-        s"Entity [id=${e.getId}, text=${e.mkText}, properties={${e.keysSet.map(k => s"$k=${e.get(k)}")}}]"
+        s"Entity [id=${e.getId}, text=${e.mkText}, properties={${e.keysSet.map(k => s"$k=${e(k)}")}}]"
 
     /**
       *
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCBracketsTokenEnricherSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCBracketsTokenEnricherSpec.scala
index e9192d8d..6e3e195a 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCBracketsTokenEnricherSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCBracketsTokenEnricherSpec.scala
@@ -41,7 +41,7 @@ class NCBracketsTokenEnricherSpec:
 
         NCTestUtils.printTokens(toks)
 
-        toks.foreach (tok => require(!(tok.get[Boolean]("brackets") ^ brackets.contains(tok.getIndex))))
+        toks.foreach (tok => require(!(tok[Boolean]("brackets") ^ brackets.contains(tok.getIndex))))
 
     @Test
     def test(): Unit =
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCDictionaryTokenEnricherSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCDictionaryTokenEnricherSpec.scala
index 0625f9c2..d17eafc6 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCDictionaryTokenEnricherSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCDictionaryTokenEnricherSpec.scala
@@ -37,8 +37,8 @@ class NCDictionaryTokenEnricherSpec:
         val txt = "milk XYZ"
         val toks = EN_TOK_PARSER.tokenize(txt)
 
-        require(toks.head.getOpt[Boolean]("dict:en").isEmpty)
-        require(toks.last.getOpt[Boolean]("dict:en").isEmpty)
+        require(toks.head.get[Boolean]("dict:en").isEmpty)
+        require(toks.last.get[Boolean]("dict:en").isEmpty)
 
         val req = NCTestRequest(txt)
 
@@ -46,5 +46,5 @@ class NCDictionaryTokenEnricherSpec:
         dictEnricher.enrich(req, CFG, toks)
         NCTestUtils.printTokens(toks)
 
-        require(toks.head.get[Boolean]("dict"))
-        require(!toks.last.get[Boolean]("dict"))
\ No newline at end of file
+        require(toks.head[Boolean]("dict"))
+        require(!toks.last[Boolean]("dict"))
\ No newline at end of file
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCQuotesTokenEnricherSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCQuotesTokenEnricherSpec.scala
index b2abca05..9be63daa 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCQuotesTokenEnricherSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCQuotesTokenEnricherSpec.scala
@@ -46,7 +46,7 @@ class NCQuotesTokenEnricherSpec:
         quoteEnricher.enrich(req, CFG, toks)
         
         NCTestUtils.printTokens(toks)
-        toks.foreach (tok => require(!(tok.get[Boolean]("quoted") ^ quotes.contains(tok.getIndex))))
+        toks.foreach (tok => require(!(tok[Boolean]("quoted") ^ quotes.contains(tok.getIndex))))
 
     @Test
     def test(): Unit =
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCStopWordsEnricherSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCStopWordsEnricherSpec.scala
index bf295066..118e2876 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCStopWordsEnricherSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCStopWordsEnricherSpec.scala
@@ -40,7 +40,7 @@ class NCStopWordsEnricherSpec:
         val toks = EN_TOK_PARSER.tokenize(txt)
         require(toks.size == boolVals.size)
 
-        toks.foreach(tok => require(tok.getOpt[Boolean]("stopword").isEmpty))
+        toks.foreach(tok => require(tok.get[Boolean]("stopword").isEmpty))
 
         val req = NCTestRequest(txt)
 
@@ -48,7 +48,7 @@ class NCStopWordsEnricherSpec:
         stopEnricher.enrich(req, CFG, toks)
 
         NCTestUtils.printTokens(toks)
-        toks.zip(boolVals).foreach { (tok, boolVal) => require(tok.get[Boolean]("stopword") == boolVal) }
+        toks.zip(boolVals).foreach { (tok, boolVal) => require(tok[Boolean]("stopword") == boolVal) }
 
     @Test
     def test(): Unit =
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCSwearWordsTokenEnricherSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCSwearWordsTokenEnricherSpec.scala
index 648f974c..930d3263 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCSwearWordsTokenEnricherSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/enrichers/NCSwearWordsTokenEnricherSpec.scala
@@ -36,12 +36,12 @@ class NCSwearWordsTokenEnricherSpec:
     def test(): Unit =
         val toks = EN_TOK_PARSER.tokenize("english ass")
 
-        require(toks.head.getOpt[Boolean]("swear:en").isEmpty)
-        require(toks.last.getOpt[Boolean]("swear:en").isEmpty)
+        require(toks.head.get[Boolean]("swear:en").isEmpty)
+        require(toks.last.get[Boolean]("swear:en").isEmpty)
 
         swEnricher.enrich(null, null, toks)
 
         NCTestUtils.printTokens(toks)
 
-        require(!toks.head.get[Boolean]("swear"))
-        require(toks.last.get[Boolean]("swear"))
\ No newline at end of file
+        require(!toks.head[Boolean]("swear"))
+        require(toks.last[Boolean]("swear"))
\ No newline at end of file
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPEntityParserSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPEntityParserSpec.scala
index 802cf372..72137148 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPEntityParserSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPEntityParserSpec.scala
@@ -61,7 +61,7 @@ class NCOpenNLPEntityParserSpec:
         NCTestUtils.printEntities(txt, ents)
 
         require(ents.sizeIs == 1)
-        require(ents.exists(_.getOpt(s"opennlp:$expected:probability").isDefined))
+        require(ents.exists(_.get(s"opennlp:$expected:probability").isDefined))
 
     /**
       *
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPTokenParserSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPTokenParserSpec.scala
index 7e58172f..cfa201c3 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPTokenParserSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCOpenNLPTokenParserSpec.scala
@@ -31,7 +31,7 @@ import scala.jdk.CollectionConverters.*
   *
   */
 class NCOpenNLPTokenParserSpec:
-    private def isStopWord(t: NCToken): Boolean = t.get[Boolean]("stopword")
+    private def isStopWord(t: NCToken): Boolean = t[Boolean]("stopword")
 
     private def test(txt: String, validate: Seq[NCToken] => _): Unit =
         val toks = EN_TOK_PARSER.tokenize(txt)
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala
index bcab07ba..16b26160 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala
@@ -50,7 +50,7 @@ class NCSemanticEntityParserJsonSpec:
         
         require(tok.getId == id)
         elemData match
-            case Some(m) => m.foreach { (k, v) => require(tok.get[Any](s"$id:$k") == v) }
+            case Some(m) => m.foreach { (k, v) => require(tok[Any](s"$id:$k") == v) }
             case None => // No-op.
 
     /**
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserLemmaSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserLemmaSpec.scala
index 15e9fd47..1f2168fa 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserLemmaSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserLemmaSpec.scala
@@ -62,7 +62,7 @@ class NCSemanticEntityParserLemmaSpec:
                 withTokenEnricher(EN_TOK_STOP_ENRICHER).
                 // 1. Wraps lemmas.
                 withTokenEnricher((_: NCRequest, _: NCModelConfig, toks: List[NCToken]) =>
-                    toks.foreach(t => t.put("lemma", wrap(t.get[String]("lemma"))))
+                    toks.foreach(t => t.put("lemma", wrap(t[String]("lemma"))))
                 ).
                 // 2. Semantic parser with fixed stemmer which stems only lemmas.
                 withEntityParser(NCSemanticEntityParser(lemmaStemmer, EN_TOK_PARSER, elems)).
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala
index 5be1b2f5..0a551023 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala
@@ -78,10 +78,10 @@ class NCSemanticEntityParserSpec:
         require(e.getId == id)
 
         value match
-            case Some(v) => require(e.get[Any](s"$id:value") == v)
+            case Some(v) => require(e[Any](s"$id:value") == v)
             case None => // No-op.
         elemData match
-            case Some(m) => m.foreach { (k, v) => require(e.get[Any](s"$id:$k") == v) }
+            case Some(m) => m.foreach { (k, v) => require(e[Any](s"$id:$k") == v) }
             case None => // No-op.
 
     /**
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala
index 6b550e01..ffe60163 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala
@@ -40,7 +40,7 @@ object NCTestUtils:
       * @return
       */
     private def mkProps(m: NCPropertyMap): String =
-        m.keysSet.toSeq.sorted.map(p => s"$p=${m.get[Any](p)}").mkString("{", ", ", "}")
+        m.keysSet.toSeq.sorted.map(p => s"$p=${m[Any](p)}").mkString("{", ", ", "}")
 
     /**
       * @param toks
@@ -52,7 +52,7 @@ object NCTestUtils:
             tbl += (
                 t.getText,
                 t.getIndex,
-                t.getOpt[Boolean]("stopword") match
+                t.get[Boolean]("stopword") match
                     case Some(b) => b.toString
                     case None => "undef."
                 ,