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

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


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

commit f5693c7bdf80bf562b0d4b0b3545c469c6e3cc20
Author: Sergey Kamov <[email protected]>
AuthorDate: Mon Jan 3 01:08:55 2022 +0300

    WIP.
---
 .../entity/parser/semantic/NCSemanticElement.java  |  5 +--
 .../parser/semantic/NCSemanticElementValue.java    | 41 ----------------------
 .../semantic/impl/NCSemanticDataReader.scala       | 12 +++----
 .../impl/NCSemanticSynonymsProcessor.scala         | 17 +++++----
 .../semantic/NCSemanticEntityParserSpec.scala      |  6 +---
 5 files changed, 16 insertions(+), 65 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.java
index b3599af..28c0a9e 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElement.java
@@ -19,6 +19,7 @@ package org.apache.nlpcraft.nlp.entity.parser.semantic;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 /**
  *
@@ -58,8 +59,8 @@ public interface NCSemanticElement {
      *
      * @return
      */
-    default List<NCSemanticElementValue> getValues() {
-        return Collections.emptyList();
+    default Map<String, List<String>> getValues() {
+        return Collections.emptyMap();
     }
 
     /**
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElementValue.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElementValue.java
deleted file mode 100644
index 1814255..0000000
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticElementValue.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.nlpcraft.nlp.entity.parser.semantic;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- *
- */
-public interface NCSemanticElementValue {
-    /**
-     * Gets value name.
-     *
-     * @return Value name.
-     */
-    String getName();
-
-    /**
-     *
-     * @return
-     */
-    default List<String> getSynonyms() {
-        return Collections.emptyList();
-    }
-}
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticDataReader.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticDataReader.scala
index ed1fe00..ba2954b 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticDataReader.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticDataReader.scala
@@ -51,26 +51,22 @@ private[impl] case class NCSemanticData(macros: Map[String, 
String], elements: S
   *
   */
 private[impl] object NCSemanticDataReader:
-    case class Value(name: String, synonyms: Seq[String])
     case class Element(
-        id: String, description: String, groups: Seq[String], synonyms: 
Seq[String], values: Seq[Value]
+        id: String, description: String, groups: Seq[String], synonyms: 
Seq[String], values: Map[String, Seq[String]]
     )
     case class Source(macros: Map[String, String], elements: Seq[Element])
 
     private def nvl[T](seq: Seq[T]): JList[T] = if seq == null then null else 
seq.asJava
     private def nvl[T, R](seq: Seq[T], to: T => R): Seq[R] = if seq == null 
then null else seq.map(to)
-    private def convertValue(v: Value): NCSemanticElementValue =
-        if v == null then null
-        else new NCSemanticElementValue:
-            override def getName: String = v.name
-            override def getSynonyms: JList[String] = nvl(v.synonyms)
+    private def nvl(m: Map[String, Seq[String]]): JMap[String, JList[String]] =
+        if m == null then null else m.map { (k, v) => k -> v.asJava }.asJava
     private def convertElement(e: Element): NCSemanticElement =
         if e == null then null
         else new NCSemanticElement:
             override def getId: String = e.id
             override def getGroups: JList[String] = nvl(e.groups)
             override def getDescription: String = e.description
-            override def getValues: JList[NCSemanticElementValue] = 
nvl(e.values, convertValue).asJava
+            override def getValues: JMap[String, JList[String]] = nvl(e.values)
             override def getSynonyms: JList[String] = nvl(e.synonyms)
 
     /**
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonymsProcessor.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonymsProcessor.scala
index 16e3a46..cf6b365 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonymsProcessor.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/entity/parser/semantic/impl/NCSemanticSynonymsProcessor.scala
@@ -126,15 +126,14 @@ private[impl] object NCSemanticSynonymsProcessor extends 
LazyLogging:
             checkSynonyms(e.getSynonyms, elemId)
 
             if e.getValues != null then
-                if e.getValues.contains(null) then throw new 
NCException(s"Some values are null [element=$elemId]")
-
-                for (v <- e.getValues.asScala)
-                    val name = v.getName
+                // TODO:
+                //if e.getValues.contains(null) then throw new 
NCException(s"Some values are null [element=$elemId]")
 
+                for ((name, syns) <- e.getValues.asScala)
                     if name == null || name.isEmpty then
                         throw new NCException(s"Some value names are not 
provided or empty [element=$elemId]")
 
-                    checkSynonyms(v.getSynonyms, elemId, Some(name))
+                    checkSynonyms(syns, elemId, Some(name))
 
     private def startsAndEnds(fix: String, s: String): Boolean = 
s.startsWith(fix) && s.endsWith(fix)
     private def mkChunk(p: NCTokenParser, chunk: String): 
NCSemanticSynonymChunk =
@@ -197,11 +196,11 @@ private[impl] object NCSemanticSynonymsProcessor extends 
LazyLogging:
                 add(convert(e.getSynonyms).map(chunks => 
NCSemanticSynonym(chunks)))
 
             if e.getValues != null then
-                for (v <- e.getValues.asScala)
-                    add(Seq(NCSemanticSynonym(Seq(mkSpecChunk(v.getName)), 
isValueName = true, value = v.getName)))
+                for ((name, syns) <- e.getValues.asScala)
+                    add(Seq(NCSemanticSynonym(Seq(mkSpecChunk(name)), 
isValueName = true, value = name)))
 
-                    if v.getSynonyms != null then
-                        add(convert(v.getSynonyms).map(chunks => 
NCSemanticSynonym(chunks, value = v.getName)))
+                    if syns != null then
+                        add(convert(syns).map(chunks => 
NCSemanticSynonym(chunks, value = name)))
 
         val txtBuf = buf.filter(_.synonym.isText)
 
diff --git 
a/nlpcraft/src/test/java/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserSpec.scala
 
b/nlpcraft/src/test/java/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserSpec.scala
index 2bdad65..fd09190 100644
--- 
a/nlpcraft/src/test/java/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserSpec.scala
+++ 
b/nlpcraft/src/test/java/org/apache/nlpcraft/nlp/entity/parser/semantic/NCSemanticEntityParserSpec.scala
@@ -38,11 +38,7 @@ case class Element(
 ) extends NCSemanticElement {
     override def getId: String = id
     override def getGroups: util.List[String] = groups.asJava
-    override def getValues: util.List[NCSemanticElementValue] = values.map { 
case (k, v) =>
-        new NCSemanticElementValue:
-            override def getName: String = k
-            override def getSynonyms: util.List[String] = v.asJava
-    }.toSeq.asJava
+    override def getValues: util.Map[String, util.List[String]] = values.map { 
case (k, v) => k -> v.asJava}.asJava
     override def getSynonyms: util.List[String] = synonyms.asJava
 }
 /**

Reply via email to