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

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


The following commit(s) were added to refs/heads/NLPCRAFT-468 by this push:
     new 6f65e47  WIP.
6f65e47 is described below

commit 6f65e4741a01034adac44046042c8eccde454456
Author: Sergey Kamov <[email protected]>
AuthorDate: Mon Oct 11 14:57:41 2021 +0300

    WIP.
---
 .../main/scala/org/apache/nlpcraft/NCNlpcraft.java |  1 +
 .../org/apache/nlpcraft/NCNlpcraftBuilder.java     |  3 +-
 .../org/apache/nlpcraft/model/NCConversation.java  |  4 +-
 .../org/apache/nlpcraft/model/NCModelView.java     |  4 +-
 .../scala/org/apache/nlpcraft/model/NCToken.java   |  2 -
 ...ltNerElement.java => NCSynonymsNerElement.java} | 11 +++---
 ...aultNerParser.java => NCSynonymsNerParser.java} | 11 ++++--
 .../ner/NCSynonymsNerValue.java}                   |  8 ++--
 ...ueLoader.java => NCSynonymsNerValueLoader.java} |  8 ++--
 ...ilder.java => NCSynonymsNerElementBuilder.java} | 26 ++++++-------
 ...uilder.java => NCSynonymsNerParserBuilder.java} | 22 +++++------
 .../model/impl/opennlp/NCOpenNlpNerParser.java     |  1 -
 .../apache/nlpcraft/model/nlp/NCNlpNerToken.java   | 44 +++++++++++++++++++++-
 .../src/test/java/org/apache/nlpcraft/NCSpec.java  | 31 ++++++++-------
 14 files changed, 106 insertions(+), 70 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraft.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraft.java
index b27b22e..d96c4c7 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraft.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraft.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+// Maybe all responses should be objects  to be mapped under REST.
 public interface NCNlpcraft {
     String ask(String txt, Map<String, Object> data, boolean enableLog, String 
userId);
     String ask(String txt, String userId);
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraftBuilder.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraftBuilder.java
index 31c9231..de3fa03 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraftBuilder.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCNlpcraftBuilder.java
@@ -20,6 +20,7 @@ package org.apache.nlpcraft;
 import org.apache.nlpcraft.model.NCModel;
 
 public class NCNlpcraftBuilder {
+    // There we can validate user prepared model.
     public NCNlpcraftBuilder withModel(NCModel mdl) {
         return null;
     }
@@ -29,7 +30,7 @@ public class NCNlpcraftBuilder {
     //    return null;
     //}
 
-    public NCNlpcraft getNCNlpcraft() {
+    public NCNlpcraft getNlpcraft() {
         return null;
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java
index c44ac45..465150c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.model;
 
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerElement;
 
 import java.util.List;
 import java.util.function.Predicate;
@@ -28,7 +28,7 @@ import java.util.function.Predicate;
  * Conversation management is based on idea of a short-term-memory (STM). STM 
can be viewed as a condensed
  * short-term history of the input for a given user and data model. Every 
submitted user request that was
  * successfully answered is added to the conversation STM as a list of {@link 
NCToken tokens}. Existing STM tokens belonging to
- * the same {@link NCDefaultNerElement#getGroups() group} will be overridden 
by the more recent tokens from the same group.
+ * the same {@link NCSynonymsNerElement#getGroups() group} will be overridden 
by the more recent tokens from the same group.
  * Note also that tokens in STM automatically expire (i.e. context is 
"forgotten") after a certain period of time and/or
  * based on the depth of the conversation since the last mention.
  * <p>
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelView.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelView.java
index 6d0cf6c..910d2b6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelView.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelView.java
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.model;
 
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerElement;
 import org.apache.nlpcraft.model.nlp.NCNlpNerParser;
 
 import java.time.Duration;
@@ -157,7 +157,7 @@ public interface NCModelView extends NCMetadata {
     int MODEL_VERSION_MAXLEN = 16;
 
     /**
-     * Max length for {@link NCDefaultNerElement#getId()} method.
+     * Max length for {@link NCSynonymsNerElement#getId()} method.
      */
     int MODEL_ELEMENT_ID_MAXLEN = 64;
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java
index c3fe0d3..9a30a37 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java
@@ -17,8 +17,6 @@
 
 package org.apache.nlpcraft.model;
 
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
-
 import java.util.List;
 
 /**
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNerElement.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerElement.java
similarity index 97%
rename from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNerElement.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerElement.java
index cb7912d..8834394 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNerElement.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerElement.java
@@ -20,7 +20,6 @@ package org.apache.nlpcraft.model.impl.ner;
 import org.apache.nlpcraft.model.NCConversation;
 import org.apache.nlpcraft.model.NCMetadata;
 import org.apache.nlpcraft.model.NCToken;
-import org.apache.nlpcraft.model.NCValue;
 
 import java.util.Collections;
 import java.util.List;
@@ -40,7 +39,7 @@ import java.util.Optional;
  *
  * @see NCCustomParser
  */
-public interface NCDefaultNerElement extends NCMetadata {
+public interface NCSynonymsNerElement extends NCMetadata {
     /**
      * Gets unique ID of this element.
      * <p>
@@ -187,7 +186,7 @@ public interface NCDefaultNerElement extends NCMetadata {
     }
 
     /**
-     * Gets optional map of {@link NCValue values} for this element.
+     * Gets optional map of {@link NCSynonymsNerValue values} for this element.
      * <p>
      * Each element can generally be recognized either by one of its synonyms 
or values. Elements and their values
      * are analogous to types and instances of that type in programming 
languages. Each value
@@ -244,7 +243,7 @@ public interface NCDefaultNerElement extends NCMetadata {
      *
      * @return Map of value's name and its synonyms or {@code null} if not 
defined.
      */
-    default List<NCValue> getValues() {
+    default List<NCSynonymsNerValue> getValues() {
         return Collections.emptyList();
     }
 
@@ -308,7 +307,7 @@ public interface NCDefaultNerElement extends NCMetadata {
      * <b>JSON</b>
      * <br>
      * If using JSON/YAML model presentation this is set by 
<code>valueLoader</code> property with value
-     * of a fully qualified class name implementing {@link 
NCDefaultNervalueLoader} interface. Note that
+     * of a fully qualified class name implementing {@link 
NCSynonymsNerValueLoader} interface. Note that
      * only one instance of the value loader will be created per model and 
given class name:
      * <pre class="brush: js, highlight: [14]">
      *     "elements": [
@@ -331,7 +330,7 @@ public interface NCDefaultNerElement extends NCMetadata {
      *
      * @return Optional instance of dynamic value loader.
      */
-    default Optional<NCDefaultNervalueLoader> getValueLoader() {
+    default Optional<NCSynonymsNerValueLoader> getValueLoader() {
         return Optional.empty();
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNerParser.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerParser.java
similarity index 95%
rename from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNerParser.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerParser.java
index 8fe00c6..8cb0a7c 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNerParser.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerParser.java
@@ -25,8 +25,11 @@ import java.util.Map;
 import java.util.Set;
 
 // TODO: maybe class.
-public interface NCDefaultNerParser extends NCNlpNerParser {
-
+// With NCNlpNerToken elements metadata provided
+//  - `Value`.
+//  - group
+//  - parent  attributes 
+public interface NCSynonymsNerParser extends NCNlpNerParser {
     /**
      * Default value for {@link #getMaxElementSynonyms()} method.
      */
@@ -84,7 +87,7 @@ public interface NCDefaultNerParser extends NCNlpNerParser {
      * @return Set of model elements, potentially empty.
      * @see NCModel#getParsers()
      */
-    default Set<NCDefaultNerElement> getElements() {
+    default Set<NCSynonymsNerElement> getElements() {
         return Collections.emptySet();
     }
 
@@ -194,7 +197,7 @@ public interface NCDefaultNerParser extends NCNlpNerParser {
 
     /**
      * Gets an optional map of macros to be used in this model. Macros and 
option groups are instrumental
-     * in defining model's elements. See {@link NCDefaultNerElement} for 
documentation on macros.
+     * in defining model's elements. See {@link NCSynonymsNerElement} for 
documentation on macros.
      * <p>
      * <b>JSON</b>
      * <br>
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCValue.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerValue.java
similarity index 90%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCValue.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerValue.java
index c381322..e0b8e8a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCValue.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerValue.java
@@ -15,9 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.nlpcraft.model;
-
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
+package org.apache.nlpcraft.model.impl.ner;
 
 import java.util.List;
 
@@ -30,9 +28,9 @@ import java.util.List;
  * recognized by. Note that value name itself acts as an implicit synonym even 
when no additional synonyms added
  * for that value.
  *
- * @see NCDefaultNerElement#getValues()
+ * @see NCSynonymsNerElement#getValues()
  */
-public interface NCValue {
+public interface NCSynonymsNerValue {
     /**
      * Gets value name.
      *
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNervalueLoader.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerValueLoader.java
similarity index 91%
rename from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNervalueLoader.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerValueLoader.java
index 90230e4..e0ebe5a 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCDefaultNervalueLoader.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/NCSynonymsNerValueLoader.java
@@ -17,8 +17,6 @@
 
 package org.apache.nlpcraft.model.impl.ner;
 
-import org.apache.nlpcraft.model.NCValue;
-
 import java.util.Set;
 
 /**
@@ -34,7 +32,7 @@ import java.util.Set;
  * keeping the rest of the model declaration static (i.e. in JSON/YAML). To 
accomplish this you can
  * define <code>valueLoader</code> property and provide a fully qualified 
class name that implements
  * this interface. During the model instantiation an instance of that class 
will be created once per
- * each model and class of loader and method {@link 
#load(NCDefaultNerElement)} will be called to load
+ * each model and class of loader and method {@link 
#load(NCSynonymsNerElement)} will be called to load
  * element's values. Note that you can use both statically defined values 
(i.e. <code>values</code> property)
  * and dynamically loaded values together and they will be merged:
  * <pre class="brush: js, highlight: [11]">
@@ -53,12 +51,12 @@ import java.util.Set;
  *     ]
  * </pre>
  */
-public interface NCDefaultNervalueLoader {
+public interface NCSynonymsNerValueLoader {
     /**
      * Loads values for given model element.
      * 
      * @param owner Model element to which this value loader belongs to.
      * @return Set of values, potentially empty but never {@code null}.
      */
-    Set<NCValue> load(NCDefaultNerElement owner);
+    Set<NCSynonymsNerValue> load(NCSynonymsNerElement owner);
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCDefaultNerElementBuilder.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCSynonymsNerElementBuilder.java
similarity index 59%
rename from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCDefaultNerElementBuilder.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCSynonymsNerElementBuilder.java
index b20af43..a4cb782 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCDefaultNerElementBuilder.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCSynonymsNerElementBuilder.java
@@ -17,42 +17,42 @@
 
 package org.apache.nlpcraft.model.impl.ner.builders;
 
-import org.apache.nlpcraft.model.NCValue;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNervalueLoader;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerValue;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerElement;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerValueLoader;
 
 import java.util.List;
 import java.util.Map;
 
 // withId is only one mandatory call.
 // It is named NCSingleElementBuilder to have different name with 
NCMultiElementsBuilder.
-public class NCDefaultNerElementBuilder {
-    public NCDefaultNerElementBuilder withId(String id) {
+public class NCSynonymsNerElementBuilder {
+    public NCSynonymsNerElementBuilder withId(String id) {
         return null;
     }
-    public NCDefaultNerElementBuilder withParentId(String id) {
+    public NCSynonymsNerElementBuilder withParentId(String id) {
         return null;
     }
-    public NCDefaultNerElementBuilder withGroups(String... groups) {
+    public NCSynonymsNerElementBuilder withGroups(String... groups) {
         return null;
     }
-    public NCDefaultNerElementBuilder withMetadata(Map<String, Object> meta) {
+    public NCSynonymsNerElementBuilder withMetadata(Map<String, Object> meta) {
         return null;
     }
-    public NCDefaultNerElementBuilder withDescrition(String desc) {
+    public NCSynonymsNerElementBuilder withDescrition(String desc) {
         return null;
     }
-    public NCDefaultNerElementBuilder withValues(List<NCValue> values) {
+    public NCSynonymsNerElementBuilder withValues(List<NCSynonymsNerValue> 
values) {
         return null;
     }
-    public NCDefaultNerElementBuilder withValueLoader(NCDefaultNervalueLoader 
loader) {
+    public NCSynonymsNerElementBuilder 
withValueLoader(NCSynonymsNerValueLoader loader) {
         return null;
     }
-    public NCDefaultNerElementBuilder withSynonyms(List<String> syns) {
+    public NCSynonymsNerElementBuilder withSynonyms(List<String> syns) {
         return null;
     }
 
-    public NCDefaultNerElement getElement() {
+    public NCSynonymsNerElement getElement() {
         return null;
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCDefaultNerParserBuilder.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCSynonymsNerParserBuilder.java
similarity index 56%
rename from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCDefaultNerParserBuilder.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCSynonymsNerParserBuilder.java
index c236dd6..6272b01 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCDefaultNerParserBuilder.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/ner/builders/NCSynonymsNerParserBuilder.java
@@ -17,36 +17,36 @@
 
 package org.apache.nlpcraft.model.impl.ner.builders;
 
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerParser;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerElement;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerParser;
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;
 
-public class NCDefaultNerParserBuilder {
-    public NCDefaultNerParserBuilder withMaxElementSynonyms(int 
maxElementSynonyms) { return null; }
-    public NCDefaultNerParserBuilder withMaxTotalSynonyms(int 
maxTotalSynonyms) {
+public class NCSynonymsNerParserBuilder {
+    public NCSynonymsNerParserBuilder withMaxElementSynonyms(int 
maxElementSynonyms) { return null; }
+    public NCSynonymsNerParserBuilder withMaxTotalSynonyms(int 
maxTotalSynonyms) {
         return null;
     }
-    public NCDefaultNerParserBuilder withMaxSynonymsThresholdError(boolean 
maxSynonymsThresholdError) { return null; }
-    public NCDefaultNerParserBuilder withDupSynonymsAllowed(boolean 
dupSynonymsAllowed) {
+    public NCSynonymsNerParserBuilder withMaxSynonymsThresholdError(boolean 
maxSynonymsThresholdError) { return null; }
+    public NCSynonymsNerParserBuilder withDupSynonymsAllowed(boolean 
dupSynonymsAllowed) {
         return null;
     }
     
-    public NCDefaultNerParserBuilder withMacros(Map<String, String> macros) {
+    public NCSynonymsNerParserBuilder withMacros(Map<String, String> macros) {
         return null;
     }
 
     // 2 alterabatives.
-    public NCDefaultNerParserBuilder withElements(List<NCDefaultNerElement> 
elements) {
+    public NCSynonymsNerParserBuilder withElements(List<NCSynonymsNerElement> 
elements) {
         return null;
     }
-    public NCDefaultNerParserBuilder withElements(File file) {
+    public NCSynonymsNerParserBuilder withElements(File file) {
         return null;
     }
 
-    public NCDefaultNerParser getNlpcraftNerParser() {
+    public NCSynonymsNerParser getNlpcraftNerParser() {
         return null;
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/opennlp/NCOpenNlpNerParser.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/opennlp/NCOpenNlpNerParser.java
index 61fd8b1..8083e4b 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/opennlp/NCOpenNlpNerParser.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/opennlp/NCOpenNlpNerParser.java
@@ -17,7 +17,6 @@
 
 package org.apache.nlpcraft.model.impl.opennlp;
 
-import org.apache.nlpcraft.model.NCModel;
 import org.apache.nlpcraft.model.NCModelView;
 import org.apache.nlpcraft.model.NCRequest;
 import org.apache.nlpcraft.model.nlp.NCNlpNerParser;
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/nlp/NCNlpNerToken.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/nlp/NCNlpNerToken.java
index 3ace535..d14ba36 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/nlp/NCNlpNerToken.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/nlp/NCNlpNerToken.java
@@ -21,8 +21,9 @@ import org.apache.nlpcraft.model.NCMetadata;
 import org.apache.nlpcraft.model.NCModel;
 import org.apache.nlpcraft.model.NCModelView;
 import org.apache.nlpcraft.model.NCRequest;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerElement;
 
+import java.util.Collections;
 import java.util.List;
 
 // NCNlpNerTokensParser parsing result.
@@ -33,7 +34,7 @@ public interface NCNlpNerToken extends NCMetadata {
      * references the element that's already defined in the model.
      *
      * @return ID of the detected model element.
-     * @see NCDefaultNerElement#getId()
+     * @see NCSynonymsNerElement#getId()
      * @see NCModel#getElements()
      */
     String getId();
@@ -45,4 +46,43 @@ public interface NCNlpNerToken extends NCMetadata {
      * @return List of NLP custom words that comprise detected custom model 
element.
      */
     List<NCNlpRichWord> getWords();
+
+    /**
+     * TODO: javadoc
+     * Gets the list of groups this token belongs to. Note that, by default, 
if not specified explicitly,
+     * token always belongs to one group with ID equal to token ID.
+     *
+     * @return Token groups list. Never {@code null} - but can be empty.
+     * @see NCDefaultNerElement#getGroups()
+     */
+    default List<String> getGroups() {
+        return Collections.emptyList();
+    }
+
+    /**
+     * TODO: javadoc
+     * Gets the optional parent ID of the model element this token represents. 
This only available
+     * for user-defined model elements - built-in tokens do not have parents 
and this will return {@code null}.
+     *
+     * @return ID of the token's element immediate parent or {@code null} if 
not available.
+     * @see NCDefaultNerElement#getParentId()
+     * @see #getAncestors()
+     */
+    default String getParentId() {
+        return null;
+    }
+
+    /**
+     * TODO: javadoc
+     *
+     * Gets the value if this token was detected via element's value (or its 
synonyms). Otherwise,
+     * returns {@code null}. Only applicable for user-defined model elements - 
built-in tokens
+     * do not have values, and it will return {@code null}.
+     *
+     * @return Value for the user-defined model element or {@code null}, if 
not available.
+     * @see NCDefaultNerElement#getValues()
+     */
+    default String getValue() {
+        return null;
+    }
 }
diff --git a/nlpcraft/src/test/java/org/apache/nlpcraft/NCSpec.java 
b/nlpcraft/src/test/java/org/apache/nlpcraft/NCSpec.java
index cf2ad13..36b1be8 100644
--- a/nlpcraft/src/test/java/org/apache/nlpcraft/NCSpec.java
+++ b/nlpcraft/src/test/java/org/apache/nlpcraft/NCSpec.java
@@ -22,13 +22,13 @@ import org.apache.nlpcraft.model.NCModel;
 import org.apache.nlpcraft.model.NCModelBehaviour;
 import org.apache.nlpcraft.model.NCRejection;
 import org.apache.nlpcraft.model.NCResult;
-import org.apache.nlpcraft.model.NCValue;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerValue;
 import org.apache.nlpcraft.model.builders.NCModelBuilder;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerElement;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNerParser;
-import org.apache.nlpcraft.model.impl.ner.NCDefaultNervalueLoader;
-import org.apache.nlpcraft.model.impl.ner.builders.NCDefaultNerElementBuilder;
-import org.apache.nlpcraft.model.impl.ner.builders.NCDefaultNerParserBuilder;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerElement;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerParser;
+import org.apache.nlpcraft.model.impl.ner.NCSynonymsNerValueLoader;
+import org.apache.nlpcraft.model.impl.ner.builders.NCSynonymsNerElementBuilder;
+import org.apache.nlpcraft.model.impl.ner.builders.NCSynonymsNerParserBuilder;
 import org.apache.nlpcraft.model.impl.opennlp.NCOpenNlpNerParser;
 import org.apache.nlpcraft.model.impl.opennlp.NCOpenNlpWordsParser;
 import org.junit.jupiter.api.Test;
@@ -52,26 +52,26 @@ public class NCSpec {
 
     @Test
     public void test() throws Exception {
-        NCDefaultNerParser ner1 =
-            new NCDefaultNerParserBuilder().
+        NCSynonymsNerParser ner1 =
+            new NCSynonymsNerParserBuilder().
                 withElements(new File("ner1.json")).
                 withMaxTotalSynonyms(30).
                 getNlpcraftNerParser();
 
-        NCDefaultNerParser ner2 =
-            new NCDefaultNerParserBuilder().
+        NCSynonymsNerParser ner2 =
+            new NCSynonymsNerParserBuilder().
                 withMacros(new HashMap<>() { { put("<ACTION>", 
"{turn|switch|dial|let|set|get|put}"); } }).
                 withElements(
                     Arrays.asList(
-                        new NCDefaultNerElementBuilder().
+                        new NCSynonymsNerElementBuilder().
                             withId("elementID1").
                             withSynonyms(Arrays.asList("<ACTION> {on|up|_}", 
"<ACTION> qq")).
                             getElement(),
-                        new NCDefaultNerElementBuilder().
+                        new NCSynonymsNerElementBuilder().
                             withId("elementID2").
-                            withValueLoader(new NCDefaultNervalueLoader() {
+                            withValueLoader(new NCSynonymsNerValueLoader() {
                                 @Override
-                                public Set<NCValue> load(NCDefaultNerElement 
owner) {
+                                public Set<NCSynonymsNerValue> 
load(NCSynonymsNerElement owner) {
                                     return null;
                                 }
                             }).
@@ -80,7 +80,6 @@ public class NCSpec {
                 ).
                 getNlpcraftNerParser();
 
-
         NCModel mdl =
             new NCModelBuilder().
                 // Common.
@@ -113,7 +112,7 @@ public class NCSpec {
 
         mdl.start();
 
-        NCNlpcraft nlp = new 
NCNlpcraftBuilder().withModel(mdl).getNCNlpcraft();
+        NCNlpcraft nlp = new NCNlpcraftBuilder().withModel(mdl).getNlpcraft();
 
         String reqId = nlp.ask("weather today");
 

Reply via email to