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

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


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

commit de914fbc2efa2f7c2332b1c4e555628449dc2fa1
Author: Sergey Kamov <[email protected]>
AuthorDate: Wed Jun 30 18:20:25 2021 +0300

    WIP.
---
 .../nlpcraft/model/NCContextWordElementConfig.java |  2 +-
 .../apache/nlpcraft/model/NCModelFileAdapter.java  |  4 +--
 ...on.java => NCContextWordElementConfigJson.java} |  2 +-
 .../impl/json/NCContextWordModelConfigJson.java    |  6 ++---
 .../enrichers/ctxword/NCContextWordEnricher.scala  | 29 +++++++++++-----------
 .../nlpcraft/model/ctxword/NCContextWordSpec.scala |  2 +-
 6 files changed, 23 insertions(+), 22 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContextWordElementConfig.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContextWordElementConfig.java
index def58e8..6e28fd5 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContextWordElementConfig.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContextWordElementConfig.java
@@ -22,7 +22,7 @@ import java.io.Serializable;
 // TODO:
 public interface NCContextWordElementConfig extends Serializable {
     enum NCContextWordElementPolicy {
-        MAX, MIN, AVERAGE, ANY
+        ALL, ANY, AVERAGE, MEDIAN
     }
 
     NCContextWordElementPolicy getPolicy();
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
index 83f0e87..b25fc6f 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
@@ -269,7 +269,7 @@ abstract public class NCModelFileAdapter extends 
NCModelAdapter {
      * @param js
      * @return
      */
-    private static NCContextWordElementConfig 
convert(NCContextWordElementScoreJson js) {
+    private static NCContextWordElementConfig 
convert(NCContextWordElementConfigJson js) {
         return new NCContextWordElementConfig() {
             @Override
             public NCContextWordElementPolicy getPolicy() {
@@ -317,7 +317,7 @@ abstract public class NCModelFileAdapter extends 
NCModelAdapter {
 
                 @Override
                 public Map<String, NCContextWordElementConfig> 
getSupportedElements() {
-                    Map<String, NCContextWordElementScoreJson> m = 
js.getSupportedElements();
+                    Map<String, NCContextWordElementConfigJson> m = 
js.getSupportedElements();
 
                     return m != null ?
                         
m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, p -> 
convert(p.getValue()))) :
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordElementScoreJson.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordElementConfigJson.java
similarity index 96%
rename from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordElementScoreJson.java
rename to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordElementConfigJson.java
index df5a8c7..cb701ad 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordElementScoreJson.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordElementConfigJson.java
@@ -20,7 +20,7 @@ package org.apache.nlpcraft.model.impl.json;
 /**
  * TODO:
  */
-public class NCContextWordElementScoreJson {
+public class NCContextWordElementConfigJson {
     private String policy;
     private double score;
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordModelConfigJson.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordModelConfigJson.java
index 2588b87..43e846d 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordModelConfigJson.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/json/NCContextWordModelConfigJson.java
@@ -25,7 +25,7 @@ import java.util.Map;
 public class NCContextWordModelConfigJson {
     private String[] samples = new String[0];
     private boolean useIntentsSamples;
-    private Map<String, NCContextWordElementScoreJson> supportedElements;
+    private Map<String, NCContextWordElementConfigJson> supportedElements;
 
     public String[] getSamples() {
         return samples;
@@ -39,10 +39,10 @@ public class NCContextWordModelConfigJson {
     public void setUseIntentsSamples(boolean useIntentsSamples) {
         this.useIntentsSamples = useIntentsSamples;
     }
-    public Map<String, NCContextWordElementScoreJson> getSupportedElements() {
+    public Map<String, NCContextWordElementConfigJson> getSupportedElements() {
         return supportedElements;
     }
-    public void setSupportedElements(Map<String, 
NCContextWordElementScoreJson> supportedElements) {
+    public void setSupportedElements(Map<String, 
NCContextWordElementConfigJson> supportedElements) {
         this.supportedElements = supportedElements;
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
index 3d2187b..bb8b997 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/ctxword/NCContextWordEnricher.scala
@@ -47,7 +47,6 @@ object NCContextWordEnricher extends NCServerEnricher {
 
     private case class ModelProbeKey(probeId: String, modelId: String)
     private case class ElementScore(elementId: String, scores: Double*) {
-        lazy val maxScore: Double = scores.max // TODO" logic
         override def toString: String = s"Element [id=$elementId, 
scores=${scores.sortBy(p => -p).mkString(",", "[", "]")}]"
     }
     private case class ValuesHolder(
@@ -332,8 +331,13 @@ object NCContextWordEnricher extends NCServerEnricher {
         val elemScoreVal = elemScore.getScore
 
         policy match {
-            case MAX => scores.max >= elemScoreVal
-            case MIN => scores.min >= elemScoreVal
+            case MEDIAN =>
+                val sorted = scores.sorted
+                val len2 = sorted.length / 2
+                val median = if (sorted.length % 2 == 0) (sorted(len2) + 
sorted(len2 - 1)) / 2 else sorted(len2)
+
+                median >= elemScoreVal
+            case ALL => scores.forall(_ >= elemScoreVal)
             case AVERAGE => scores.sum / scores.size >= elemScoreVal
             case ANY => scores.exists(_ >= elemScoreVal)
 
@@ -347,21 +351,18 @@ object NCContextWordEnricher extends NCServerEnricher {
                 val detected = mutable.HashMap.empty[NCNlpSentenceToken, 
mutable.HashSet[ElementScore]]
 
                 def add(
-                    nounTok: NCNlpSentenceToken, elemId: String, senScore: 
Double, sampleScore: Double
+                    nounTok: NCNlpSentenceToken, elemId: String, scores : 
Double*
                 ): Unit = {
-                    val maxScore = Math.max(senScore, sampleScore)
                     val tokElems = detected.getOrElseUpdate(nounTok, 
mutable.HashSet.empty[ElementScore])
 
-                    def mkNew(): ElementScore = ElementScore(elemId, senScore, 
sampleScore)
+                    def mkElem(seq: Seq[Double]): ElementScore = 
ElementScore(elemId, seq.filter(_ > EXCL_MIN_SCORE):_*)
 
-                    tokElems.find(_.elementId == elemId) match {
-                        case Some(saved) =>
-                            if (maxScore > saved.maxScore) {
-                                tokElems -= saved
-                                tokElems += mkNew()
-                            }
-                        case None => tokElems += mkNew()
-                    }
+                    tokElems += (
+                        tokElems.find(_.elementId == elemId) match {
+                            case Some(ex) => mkElem(scores ++ ex.scores)
+                            case None => mkElem(scores)
+                        }
+                    )
                 }
 
                 val nounToks = ns.tokens.filter(t => NOUNS_POS.contains(t.pos))
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
index a871b9a..ee50a2a 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec.scala
@@ -50,7 +50,7 @@ class NCContextWordSpecModel extends NCModel {
     override def getVersion: String = "1.0.0"
 
     val MDL_LEVEL = 0.4
-    val MDL_POLICY = MIN
+    val MDL_POLICY = ALL
 
     override def getContextWordModelConfig: Optional[NCContextWordModelConfig] 
= {
         Optional.of(

Reply via email to