This is an automated email from the ASF dual-hosted git repository.
aradzinski 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 6158427 CR WIP
6158427 is described below
commit 6158427b46405644e7e20cae2c9137523402ace2
Author: Aaron Radzinski <[email protected]>
AuthorDate: Thu Jan 13 13:07:16 2022 -0800
CR WIP
---
.../scala/org/apache/nlpcraft/NCModelPipeline.java | 5 ++--
.../apache/nlpcraft/NCModelPipelineBuilder.java | 32 +++++---------------
...CVariantValidator.java => NCVariantFilter.java} | 4 +--
.../internal/impl/NCModelPipelineProcessor.scala | 34 ++++++++++------------
.../nlpcraft/internal/impl/NCSentenceHelper.java | 6 +++-
.../apache/nlpcraft/nlp/util/NCTestPipeline.scala | 17 ++++++-----
.../org/apache/nlpcraft/nlp/util/NCTestUtils.scala | 1 +
7 files changed, 43 insertions(+), 56 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
index 1e7ecb7..cdd0d05 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
@@ -19,6 +19,7 @@ package org.apache.nlpcraft;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
/**
*
@@ -72,7 +73,7 @@ public interface NCModelPipeline {
*
* @return
*/
- default List<NCVariantValidator> getVariantValidators() {
- return Collections.emptyList();
+ default Optional<NCVariantFilter> getVariantFilter() {
+ return Optional.empty();
}
}
\ No newline at end of file
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
index c363741..1d4d977 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
@@ -17,10 +17,7 @@
package org.apache.nlpcraft;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
/**
*
@@ -32,7 +29,7 @@ public class NCModelPipelineBuilder {
private final List<NCEntityParser> entParsers = new ArrayList<>();
private final List<NCTokenValidator> tokVals = new ArrayList<>();
private final List<NCEntityValidator> entVals = new ArrayList<>();
- private final List<NCVariantValidator> varVals = new ArrayList<>();
+ private Optional<NCVariantFilter> varFilter = Optional.empty();
/**
*
@@ -186,26 +183,11 @@ public class NCModelPipelineBuilder {
}
/**
- * @param varVals
+ * @param varFilter
* @return This instance for call chaining.
*/
- public NCModelPipelineBuilder
withVariantValidators(List<NCVariantValidator> varVals) {
- Objects.requireNonNull(varVals, "List of variant validators cannot be
null.");
- varVals.forEach(p -> Objects.requireNonNull(p, "Variant validators
cannot be null."));
-
- this.varVals.addAll(varVals);
-
- return this;
- }
-
- /**
- * @param varVal
- * @return This instance for call chaining.
- */
- public NCModelPipelineBuilder withVariantValidator(NCVariantValidator
varVal) {
- Objects.requireNonNull(varVal, "Variant validator cannot be null.");
-
- this.varVals.add(varVal);
+ public NCModelPipelineBuilder withVariantFilter(NCVariantFilter varFilter)
{
+ this.varFilter = Optional.of(varFilter);
return this;
}
@@ -233,8 +215,8 @@ public class NCModelPipelineBuilder {
@Override public List<NCEntityValidator> getEntityValidators() {
return entVals;
}
- @Override public List<NCVariantValidator> getVariantValidators() {
- return varVals;
+ @Override public Optional<NCVariantFilter> getVariantFilter() {
+ return varFilter;
}
};
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantValidator.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.java
similarity index 86%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantValidator.java
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.java
index 0252faf..35fabac 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantValidator.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.java
@@ -22,12 +22,12 @@ import java.util.List;
/**
*
*/
-public interface NCVariantValidator extends NCLifecycle {
+public interface NCVariantFilter extends NCLifecycle {
/**
*
* @param req
* @param cfg
* @param vars
*/
- List<NCVariant> validateAndFilter(NCRequest req, NCModelConfig cfg,
List<NCVariant> vars);
+ List<NCVariant> filter(NCRequest req, NCModelConfig cfg, List<NCVariant>
vars);
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
index b3b730b..41fdf01 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
@@ -27,6 +27,7 @@ import java.util.concurrent.*
import java.util.concurrent.atomic.*
import java.util.{ArrayList, UUID, List as JList, Map as JMap}
import scala.collection.immutable
+import scala.jdk.OptionConverters.*
import scala.concurrent.ExecutionContext
import scala.jdk.CollectionConverters.*
@@ -57,7 +58,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends
LazyLogging:
private val entParsers = nvl(pipeline.getEntityParsers)
private val tokVals = nvl(pipeline.getTokenValidators)
private val entVals = nvl(pipeline.getEntityValidators)
- private val varVals = nvl(pipeline.getVariantValidators)
+ private val varFilter = pipeline.getVariantFilter.toScala
/**
*
@@ -95,7 +96,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends
LazyLogging:
* @param ents
* @return
*/
- def variant(ents: Seq[NCEntity]): NCVariant =
+ def newVariant(ents: Seq[NCEntity]): NCVariant =
new NCVariant:
override val getEntities: JList[NCEntity] = ents.asJava
@@ -114,6 +115,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends
LazyLogging:
check()
e.enrich(req, cfg, toks)
+ // NOTE: we run validators regardless of whether token list is empty.
for (v <- tokVals)
check()
v.validate(req, cfg, toks)
@@ -129,6 +131,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends
LazyLogging:
check()
e.enrich(req, cfg, entsList)
+ // NOTE: we run validators regardless of whether entity list is empty.
for (v <- entVals)
check()
v.validate(req, cfg, entsList)
@@ -146,15 +149,15 @@ class NCModelPipelineProcessor(mdl: NCModel) extends
LazyLogging:
if overlapEnts.nonEmpty then
NCSentenceHelper.findCombinations(overlapEnts.map(_.asJava).asJava, pool)
.asScala.map(_.asScala).map(delComb =>
- val delSet = delComb.toSet
- variant(entities.filter(!delSet.contains(_)))
- ).asJava
+ val delSet = delComb.toSet
+ newVariant(entities.filter(!delSet.contains(_)))
+ ).asJava
else
- Seq(variant(entities)).asJava
+ Seq(newVariant(entities)).asJava
- for (v <- varVals)
+ if varFilter.isDefined then
check()
- variants = v.validateAndFilter(req, cfg, variants)
+ variants = varFilter.get.filter(req, cfg, variants)
VariantsHolder(req, variants.asScala.toSeq, checkCancel)
@@ -177,19 +180,14 @@ class NCModelPipelineProcessor(mdl: NCModel) extends
LazyLogging:
* @param data
* @param usrId
* @return
- * @throws NCRejection
- * @throws NCCuration
- * @throws NCException
+ * @throws NCRejection TODO
+ * @throws NCCuration TODO
+ * @throws NCException TODO
*/
def ask(txt: String, data: JMap[String, AnyRef], usrId: String):
CompletableFuture[NCResult] =
val fut = new CompletableFuture[NCResult]
-
- // TODO: error text.
- def check = () =>
- if fut.isCancelled then
- val txt = "Execution interrupted."
- logger.warn(txt)
- throw new NCException(txt)
+ val check = () => if fut.isCancelled then
+ E(s"Asynchronous ask is interrupted [txt=$txt, usrId=$usrId]")
fut.completeAsync(() => matchIntent(prepVariants(txt, data, usrId,
Option(check))))
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
index 9ae59c4..44ce0b2 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
@@ -28,8 +28,12 @@ import java.util.concurrent.RecursiveTask;
import static java.util.stream.Collectors.toList;
+// It is not converted to scala because scala and
+// java long values implicit conversion performance problems.
+// ==========================================================
+
/**
- * It is not converted to scala because scala and java long values implicit
conversion performance problems.
+ *
*/
class NCSentenceHelper extends RecursiveTask<List<Long>> {
private static final long THRESHOLD = (long)Math.pow(2, 20);
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
index 9ddf364..410ff98 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
@@ -21,7 +21,7 @@ import
org.apache.nlpcraft.nlp.token.parser.opennlp.NCOpenNlpTokenParser
import org.apache.nlpcraft.nlp.util.NCTestPipeline.*
import org.apache.nlpcraft.*
-import java.util.{Optional, ArrayList as JAList, List as JList}
+import java.util.{Optional, ArrayList as JList}
/**
*
@@ -31,12 +31,12 @@ case class NCTestPipeline(tokParser: NCTokenParser) extends
NCPropertyMapAdapter
require(tokParser != null)
override val getTokenParser: NCTokenParser = tokParser
- override val getTokenEnrichers = new JAList[NCTokenEnricher]()
- override val getEntityEnrichers = new JAList[NCEntityEnricher]()
- override val getEntityParsers = new JAList[NCEntityParser]()
- override val getTokenValidators = new JAList[NCTokenValidator]()
- override val getEntityValidators = new JAList[NCEntityValidator]()
- override val getVariantValidators = new JAList[NCVariantValidator]()
+ override val getTokenEnrichers = new JList[NCTokenEnricher]()
+ override val getEntityEnrichers = new JList[NCEntityEnricher]()
+ override val getEntityParsers = new JList[NCEntityParser]()
+ override val getTokenValidators = new JList[NCTokenValidator]()
+ override val getEntityValidators = new JList[NCEntityValidator]()
+ override val getVariantFilter: Optional[NCVariantFilter] =
Optional.empty[NCVariantFilter]()
override def clone(): NCTestPipeline =
val copy = NCTestPipeline(this.tokParser)
@@ -46,7 +46,8 @@ case class NCTestPipeline(tokParser: NCTokenParser) extends
NCPropertyMapAdapter
copy.getEntityParsers.addAll(this.getEntityParsers)
copy.getTokenValidators.addAll(this.getTokenValidators)
copy.getEntityValidators.addAll(this.getEntityValidators)
- copy.getVariantValidators.addAll(this.getVariantValidators)
+
+ // TODO: variant filter?
copy
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 d3a2f95..f95e11a 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
@@ -24,6 +24,7 @@ import java.util
import java.util.List as JList
import scala.jdk.CollectionConverters.*
import scala.jdk.OptionConverters.RichOptional
+
/**
*
*/