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/06/20 10:16:29 UTC

[incubator-nlpcraft] 02/02: Scala initial version fixes.

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

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

commit 11c764543bbaf3788cadccc35ab73cb82c5a3678
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Mon Jun 20 13:16:18 2022 +0300

    Scala initial version fixes.
---
 .../scala/org/apache/nlpcraft/NCCallbackData.scala | 17 ++++++++
 .../scala/org/apache/nlpcraft/NCIntentMatch.scala  |  3 ++
 .../scala/org/apache/nlpcraft/NCModelAdapter.scala |  9 +++-
 .../scala/org/apache/nlpcraft/NCModelConfig.scala  | 13 ++++++
 .../scala/org/apache/nlpcraft/NCPipeline.scala     | 23 ++++++++++-
 .../org/apache/nlpcraft/NCPipelineBuilder.scala    | 15 +++----
 .../org/apache/nlpcraft/NCPropertyMapAdapter.scala | 19 +++++----
 .../main/scala/org/apache/nlpcraft/NCResult.scala  |  9 ++++
 .../org/apache/nlpcraft/NCTokenEnricher.scala      |  6 +++
 .../scala/org/apache/nlpcraft/NCTokenParser.scala  |  5 +++
 .../org/apache/nlpcraft/NCTokenValidator.scala     |  6 +++
 .../main/scala/org/apache/nlpcraft/NCVariant.scala |  3 +-
 .../org/apache/nlpcraft/NCVariantFilter.scala      |  8 +++-
 .../nlp/entity/parser/NCNLPEntityParser.scala      |  3 +-
 .../nlp/entity/parser/NCOpenNLPEntityParser.scala  |  3 ++
 .../entity/parser/semantic/NCSemanticElement.scala | 26 ++++++++++++
 .../parser/semantic/NCSemanticEntityParser.scala   | 48 ++++++++++++++++------
 .../entity/parser/semantic/NCSemanticStemmer.scala |  8 ++++
 .../parser/semantic/impl/NCSemanticSynonym.scala   |  4 +-
 .../enricher/NCOpenNLPLemmaPosTokenEnricher.scala  |  5 ++-
 .../semantic/NCSemanticEntityParserLemmaSpec.scala |  2 +-
 .../org/apache/nlpcraft/nlp/util/NCTestUtils.scala | 12 +++---
 22 files changed, 200 insertions(+), 47 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCCallbackData.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCCallbackData.scala
index 2bc38c0b..cb09c81c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCCallbackData.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCCallbackData.scala
@@ -17,7 +17,24 @@
 
 package org.apache.nlpcraft
 
+/**
+  * 
+  */
 trait NCCallbackData:
+    /**
+      * 
+      * @return
+      */
     def getIntentId: String
+
+    /**
+      * 
+      * @return
+      */
     def getCallbackArguments: List[List[NCEntity]]
+
+    /**
+      * 
+      * @return
+      */
     def getCallback: List[List[NCEntity]] => NCResult
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCIntentMatch.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCIntentMatch.scala
index 855de21e..b4b729ec 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCIntentMatch.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCIntentMatch.scala
@@ -17,6 +17,9 @@
 
 package org.apache.nlpcraft
 
+/**
+  * 
+  */
 trait NCIntentMatch:
     /**
       * Gets ID of the matched intent.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelAdapter.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelAdapter.scala
index fa9adf99..e9f19729 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelAdapter.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelAdapter.scala
@@ -17,6 +17,11 @@
 
 package org.apache.nlpcraft
 
+/**
+  *
+  * @param cfg
+  * @param pipeline
+  */
 class NCModelAdapter(cfg: NCModelConfig, pipeline: NCPipeline) extends NCModel:
-    def getConfig: NCModelConfig = cfg
-    def getPipeline: NCPipeline = pipeline
+    override def getConfig: NCModelConfig = cfg
+    override def getPipeline: NCPipeline = pipeline
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala
index e49fe348..c1926e74 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala
@@ -20,6 +20,9 @@ package org.apache.nlpcraft
 import java.time.Duration
 
 
+/**
+  *
+  */
 object NCModelConfig:
     val DFLT_CONV_TIMEOUT: Long = Duration.ofMinutes(60).toMillis
     val DFLT_CONV_DEPTH = 3
@@ -28,6 +31,16 @@ object NCModelConfig:
     def apply(id: String, name: String, version: String, description: String, origin: String) = new NCModelConfig(id, name, version, description, origin)
 import org.apache.nlpcraft.NCModelConfig.*
 
+/**
+  *
+  * @param id
+  * @param name
+  * @param version
+  * @param description
+  * @param origin
+  * @param conversationTimeout
+  * @param conversationDepth
+  */
 case class NCModelConfig(
     id: String,
     name: String,
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipeline.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipeline.scala
index 055fb654..5b762ab6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipeline.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipeline.scala
@@ -63,18 +63,39 @@ trait NCPipeline:
       * @return */
     def getEntityParsers: List[NCEntityParser]
 
+    /**
+      *
+      * @return
+      */
     def getTokenEnrichers: List[NCTokenEnricher] = List.empty
 
+    /**
+      *
+      * @return
+      */
     def getEntityEnrichers: List[NCEntityEnricher] = List.empty
 
+    /**
+      *
+      * @return
+      */
     def getTokenValidators: List[NCTokenValidator] = List.empty
 
+    /**
+      *
+      * @return
+      */
     def getEntityValidators: List[NCEntityValidator] = List.empty
 
+    /**
+      *
+      * @return
+      */
     def getVariantFilter: Option[NCVariantFilter] = None
 
     /**
       * Gets optional list of entity mappers.
       *
-      * @return Optional list of entity mappers. Can be empty but never {@code null}. */
+      * @return Optional list of entity mappers. Can be empty but never {@code null}.
+      */
     def getEntityMappers: List[NCEntityMapper] = List.empty
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala
index 2026ae07..f12229e8 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala
@@ -193,7 +193,7 @@ class NCPipelineBuilder:
         lang.toUpperCase match
             case "EN" =>
                 setEnComponents()
-                this.entParsers += new NCSemanticEntityParser(mkEnStemmer, mkEnOpenNLPTokenParser, macros, elms)
+                this.entParsers += NCSemanticEntityParser(mkEnStemmer, mkEnOpenNLPTokenParser, macros, elms)
             case _ => throw new IllegalArgumentException("Unsupported language: " + lang)
         this
 
@@ -207,16 +207,17 @@ class NCPipelineBuilder:
     /**
       *
       * @param lang
-      * @param src
-      * @return */
-    def withSemantic(lang: String, src: String): NCPipelineBuilder =
+      * @param mdlSrc
+      * @return
+      */
+    def withSemantic(lang: String, mdlSrc: String): NCPipelineBuilder =
         Objects.requireNonNull(lang, "Language cannot be null.")
-        Objects.requireNonNull(src, "Model source cannot be null.")
+        Objects.requireNonNull(mdlSrc, "Model source cannot be null.")
         lang.toUpperCase match
             case "EN" =>
                 setEnComponents()
-                this.entParsers += new NCSemanticEntityParser(mkEnStemmer, mkEnOpenNLPTokenParser, mdlSrc = src)
-            case _ => throw new IllegalArgumentException("Unsupported language: " + lang)
+                this.entParsers += NCSemanticEntityParser(mkEnStemmer, mkEnOpenNLPTokenParser, mdlSrc)
+            case _ => throw new IllegalArgumentException(s"Unsupported language: $lang")
         this
 
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala
index 3a05cec8..1c8c8e86 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPropertyMapAdapter.scala
@@ -26,23 +26,24 @@ class NCPropertyMapAdapter extends NCPropertyMap:
     private val map = new ConcurrentHashMap[String, Any]
 
     // TODO: or error?
-    def get[T](key: String): T = getOpt(key).orNull.asInstanceOf[T]
 
-    def getOpt[T](key: String): Option[T] =
+    override def get[T](key: String): T = getOpt(key).orNull.asInstanceOf[T]
+
+    override def getOpt[T](key: String): Option[T] =
         map.get(key) match
             case null => None
             case x => Some(x.asInstanceOf[T])
 
-    def put[T](key: String, obj: Any): T = map.put(key, obj).asInstanceOf[T]
+    override def put[T](key: String, obj: Any): T = map.put(key, obj).asInstanceOf[T]
 
-    def putIfAbsent[T](key: String, obj: T): T = map.putIfAbsent(key, obj).asInstanceOf[T]
+    override def putIfAbsent[T](key: String, obj: T): T = map.putIfAbsent(key, obj).asInstanceOf[T]
 
-    def contains(key: String): Boolean = map.containsKey(key)
+    override def contains(key: String): Boolean = map.containsKey(key)
 
-    def remove[T](key: String): T = map.remove(key).asInstanceOf[T]
+    override def remove[T](key: String): T = map.remove(key).asInstanceOf[T]
 
-    def remove(key: String, obj: Any): Boolean = map.remove(key, obj)
+    override def remove(key: String, obj: Any): Boolean = map.remove(key, obj)
 
-    def keysSet = map.keys().asScala.toSet
+    override def keysSet = map.keys().asScala.toSet
 
-    def clear(): Unit = map.clear()
+    override def clear(): Unit = map.clear()
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala
index f65048a2..83826c4a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala
@@ -19,9 +19,18 @@ package org.apache.nlpcraft
 
 import org.apache.nlpcraft.NCResultType.*
 
+/**
+  *
+  */
 object NCResult:
     def apply(): NCResult = new NCResult(body = null, resultType = null, intentId = null)
     def apply(body: Any, resultType: NCResultType): NCResult = new NCResult(body = body, resultType = resultType, intentId = null)
     def apply(body: Any, resultType: NCResultType, intentId: String): NCResult = new NCResult(body = body, resultType =resultType, intentId)
 
+/**
+  *
+  * @param body
+  * @param resultType
+  * @param intentId
+  */
 case class NCResult(body: Any, resultType: NCResultType, intentId: String)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenEnricher.scala
index de5fcfa3..f9d4739b 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenEnricher.scala
@@ -29,4 +29,10 @@ package org.apache.nlpcraft
   * @see NCEntityValidator
   * @see NCEntityMapper */
 trait NCTokenEnricher extends NCLifecycle:
+    /**
+      *
+      * @param req
+      * @param cfg
+      * @param toks
+      */
     def enrich(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): Unit
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenParser.scala
index 1679da5d..9ce8d495 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenParser.scala
@@ -33,4 +33,9 @@ package org.apache.nlpcraft
   * @see NCEntityValidator
   * @see NCEntityMapper */
 trait NCTokenParser:
+    /**
+      *
+      * @param text
+      * @return
+      */
     def tokenize(text: String): List[NCToken]
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenValidator.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenValidator.scala
index 49185a0d..388352bd 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenValidator.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCTokenValidator.scala
@@ -29,6 +29,12 @@ package org.apache.nlpcraft
   * @see NCEntityValidator
   * @see NCEntityMapper */
 trait NCTokenValidator extends NCLifecycle:
+    /**
+      *
+      * @param req
+      * @param cfg
+      * @param toks
+      */
     def validate(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): Unit
 
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariant.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariant.scala
index 3fa27cc2..68b509f9 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariant.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariant.scala
@@ -27,5 +27,6 @@ trait NCVariant:
     /**
       * Gets the list of entities for this variant.
       *
-      * @return List of entities for this variant. Can be empty but never {@code null}. */
+      * @return List of entities for this variant. Can be empty but never {@code null}.
+      */
     def getEntities: List[NCEntity]
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.scala
index 755b9524..1de2c157 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.scala
@@ -17,9 +17,15 @@
 
 package org.apache.nlpcraft
 
+/**
+  *
+  */
 trait NCVariantFilter extends NCLifecycle:
     /**
+      *
       * @param req
       * @param cfg
-      * @param vars */
+      * @param vars
+      * @return
+      */
     def filter(req: NCRequest, cfg: NCModelConfig, vars: List[NCVariant]): List[NCVariant]
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCNLPEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCNLPEntityParser.scala
index 7a046cf7..b809a57a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCNLPEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCNLPEntityParser.scala
@@ -28,7 +28,8 @@ import java.util.stream.Collectors
 object NCNLPEntityParser:
     private def id = "nlp:token"
 
-import org.apache.nlpcraft.nlp.entity.parser.NCNLPEntityParser.*
+import NCNLPEntityParser.*
+
 /**
   *
   */
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCOpenNLPEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCOpenNLPEntityParser.scala
index c2bf53bb..0462b8aa 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCOpenNLPEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/NCOpenNLPEntityParser.scala
@@ -32,6 +32,9 @@ import scala.jdk.CollectionConverters.*
 import scala.language.postfixOps
 import scala.util.Using
 
+/**
+  *
+  */
 object NCOpenNLPEntityParser:
     def apply(src: String): NCOpenNLPEntityParser =
         Objects.requireNonNull(src, "Model source cannot be null.")
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.scala
index 28480f24..f27c6866 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.scala
@@ -16,10 +16,36 @@
  */
 package org.apache.nlpcraft.nlp.entity.parser.semantic
 
+/**
+  *
+  */
 trait NCSemanticElement:
+    /**
+      *
+      * @return
+      */
     def getId: String
+
+    /**
+      *
+      * @return
+      */
     def getGroups: Set[String] = Set(getId)
+
+    /**
+      *
+      * @return
+      */
     def getValues: Map[String, Set[String]] = Map.empty
+
+    /**
+      *
+      * @return
+      */
     def getSynonyms: Set[String] = Set.empty
 
+    /**
+      *
+      * @return
+      */
     def getProperties: Map[String, AnyRef] = Map.empty
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParser.scala
index da2eebd6..29dc62da 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParser.scala
@@ -40,30 +40,53 @@ object NCSemanticEntityParser:
       * @param stemmer
       * @param parser
       * @param macros
-      * @param elms
+      * @param elements
       * @return
       */
     def apply(
         stemmer: NCSemanticStemmer,
         parser: NCTokenParser,
         macros: Map[String, String],
-        elms: List[NCSemanticElement]
+        elements: List[NCSemanticElement]
     ): NCSemanticEntityParser =
-        require(elms != null)
+        Objects.requireNonNull(stemmer, "Stemmer cannot be null.")
+        Objects.requireNonNull(parser, "Parser cannot be null.")
+        Objects.requireNonNull(macros, "Macros cannot be null.")
+        Objects.requireNonNull(elements, "Elements cannot be null.")
 
-        new NCSemanticEntityParser(stemmer, parser, macros = macros, elements = elms)
+        new NCSemanticEntityParser(stemmer, parser, macros = macros, elements = elements)
 
     /**
       *
       * @param stemmer
       * @param parser
-      * @param src
+      * @param elements
       * @return
       */
-    def apply(stemmer: NCSemanticStemmer, parser: NCTokenParser, src: String): NCSemanticEntityParser =
-        require(src != null)
+    def apply(
+        stemmer: NCSemanticStemmer,
+        parser: NCTokenParser,
+        elements: List[NCSemanticElement]
+    ): NCSemanticEntityParser =
+        Objects.requireNonNull(stemmer, "Stemmer cannot be null.")
+        Objects.requireNonNull(parser, "Parser cannot be null.")
+        Objects.requireNonNull(elements, "Elements cannot be null.")
 
-        new NCSemanticEntityParser(stemmer, parser, mdlSrc = src)
+        new NCSemanticEntityParser(stemmer, parser, macros = Map.empty, elements = elements)
+
+    /**
+      *
+      * @param stemmer
+      * @param parser
+      * @param mdlSrc
+      * @return
+      */
+    def apply(stemmer: NCSemanticStemmer, parser: NCTokenParser, mdlSrc: String): NCSemanticEntityParser =
+        Objects.requireNonNull(stemmer, "Stemmer cannot be null.")
+        Objects.requireNonNull(parser, "Parser cannot be null.")
+        Objects.requireNonNull(mdlSrc, "Model source cannot be null.")
+
+        new NCSemanticEntityParser(stemmer, parser, mdlSrc = mdlSrc)
 
     /**
       * @param baseTokens Tokens.
@@ -168,11 +191,10 @@ class NCSemanticEntityParser(
     elements: List[NCSemanticElement] = List.empty,
     mdlSrc: String = null
 ) extends NCEntityParser with LazyLogging:
-    Objects.requireNonNull(stemmer, "Stemmer cannot be null.")
-    Objects.requireNonNull(parser, "Parser cannot be null.")
-
-    // TODO: exception.
-    require(elements != null && elements.nonEmpty || mdlSrc != null && mdlSrc.nonEmpty)
+    require(stemmer != null)
+    require(parser != null)
+    require(macros != null)
+    require(elements != null && elements.nonEmpty || mdlSrc != null)
 
     private val scrType = if mdlSrc != null then NCSemanticSourceType.detect(mdlSrc) else null
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticStemmer.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticStemmer.scala
index eb36e688..7fa335cf 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticStemmer.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticStemmer.scala
@@ -16,5 +16,13 @@
  */
 package org.apache.nlpcraft.nlp.entity.parser.semantic
 
+/**
+  *
+  */
 trait NCSemanticStemmer:
+    /**
+      *
+      * @param txt
+      * @return
+      */
     def stem(txt: String): String
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonym.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonym.scala
index 9ead7345..bb8aeb6d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonym.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonym.scala
@@ -49,9 +49,7 @@ private[impl] case class NCSemanticSynonymChunk(
   * @param chunks
   * @param value
   */
-private[impl] case class NCSemanticSynonym(
-    chunks: Seq[NCSemanticSynonymChunk], value: String = null
-) extends Comparable[NCSemanticSynonym]:
+private[impl] case class NCSemanticSynonym(chunks: Seq[NCSemanticSynonymChunk], value: String = null) extends Comparable[NCSemanticSynonym]:
     require(chunks != null)
     require(chunks.nonEmpty)
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/token/enricher/NCOpenNLPLemmaPosTokenEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/token/enricher/NCOpenNLPLemmaPosTokenEnricher.scala
index eccd8095..ed4adb2d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/token/enricher/NCOpenNLPLemmaPosTokenEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/token/enricher/NCOpenNLPLemmaPosTokenEnricher.scala
@@ -34,7 +34,7 @@ import scala.concurrent.ExecutionContext
   *  - tagger: http://opennlp.sourceforge.net/models-1.5/en-pos-maxent.bin
   *  - lemmatizer: https://raw.githubusercontent.com/richardwilly98/elasticsearch-opennlp-auto-tagging/master/src/main/resources/models/en-lemmatizer.dict
   */
-class NCOpenNLPLemmaPosTokenEnricher(posMdlSrc: String, lemmaDicSrc: String) extends NCTokenEnricher with LazyLogging:
+class NCOpenNLPLemmaPosTokenEnricher(posMdlSrc: String = null, lemmaDicSrc: String = null) extends NCTokenEnricher with LazyLogging:
     private var tagger: POSTaggerME = _
     private var lemmatizer: DictionaryLemmatizer = _
 
@@ -47,11 +47,13 @@ class NCOpenNLPLemmaPosTokenEnricher(posMdlSrc: String, lemmaDicSrc: String) ext
                     if posMdlSrc != null then
                         tagger = new POSTaggerME(new POSModel(NCUtils.getStream(posMdlSrc)))
                         logger.trace(s"Loaded resource: $posMdlSrc")
+                    else logger.warn("POS tagger is not configured.")
                 },
                 () => {
                     if lemmaDicSrc != null then
                         lemmatizer = new DictionaryLemmatizer(NCUtils.getStream(lemmaDicSrc))
                         logger.trace(s"Loaded resource: $lemmaDicSrc")
+                    else logger.warn("Lemmatizer is not configured.")
                 }
             )
         )(ExecutionContext.Implicits.global)
@@ -87,4 +89,3 @@ class NCOpenNLPLemmaPosTokenEnricher(posMdlSrc: String, lemmaDicSrc: String) ext
                 () // Otherwise - NPE.
             }
         }
-
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserLemmaSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserLemmaSpec.scala
index 43a70e03..ff778fa2 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserLemmaSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserLemmaSpec.scala
@@ -68,7 +68,7 @@ class NCSemanticEntityParserLemmaSpec:
                     toks.foreach(t => t.put("lemma", wrap(t.get[String]("lemma"))))
                 ).
                 // 2. Semantic parser with fixed stemmer which stems only lemmas.
-                withEntityParser(new NCSemanticEntityParser(lemmaStemmer, EN_TOK_PARSER, elements = elems)).
+                withEntityParser(NCSemanticEntityParser(lemmaStemmer, EN_TOK_PARSER, elems)).
                 build
         )
 
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 a816b439..95339821 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
@@ -137,8 +137,8 @@ object NCTestUtils:
       * @param macros
       * @return
       */
-    def mkEnSemanticParser(elms: List[NCSemanticElement], macros: Map[String, String] = null): NCSemanticEntityParser =
-        new NCSemanticEntityParser(mkSemanticStemmer, EN_TOK_PARSER, macros, elms)
+    def mkEnSemanticParser(elms: List[NCSemanticElement], macros: Map[String, String] = Map.empty): NCSemanticEntityParser =
+        NCSemanticEntityParser(mkSemanticStemmer, EN_TOK_PARSER, macros, elms)
 
     /**
       *
@@ -146,12 +146,12 @@ object NCTestUtils:
       * @return
       */
     def mkEnSemanticParser(elms: NCSemanticElement*): NCSemanticEntityParser =
-        new NCSemanticEntityParser(mkSemanticStemmer, EN_TOK_PARSER, null, elms.toList)
+        NCSemanticEntityParser(mkSemanticStemmer, EN_TOK_PARSER, elms.toList)
 
     /**
       *
-      * @param src
+      * @param mdlSrc
       * @return
       */
-    def mkEnSemanticParser(src: String): NCSemanticEntityParser =
-        new NCSemanticEntityParser(mkSemanticStemmer, EN_TOK_PARSER, mdlSrc = src)
\ No newline at end of file
+    def mkEnSemanticParser(mdlSrc: String): NCSemanticEntityParser =
+        NCSemanticEntityParser(mkSemanticStemmer, EN_TOK_PARSER, mdlSrc)
\ No newline at end of file