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
}
/**