This is an automated email from the ASF dual-hosted git repository. sergeykamov pushed a commit to branch NLPCRAFT-443-1 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 12bfeadcbeabdaf6af1edf740d97ea6cef7684ba Author: Sergey Kamov <[email protected]> AuthorDate: Thu Sep 23 18:31:18 2021 +0300 WIP. --- .../nlpcraft/probe/mgrs/NCProbeVariants.scala | 2 +- .../probe/mgrs/synonyms/NCSynonymsManager.scala | 64 ++++++++++------------ 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeVariants.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeVariants.scala index 8aced5f..8bc0113 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeVariants.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeVariants.scala @@ -268,7 +268,7 @@ object NCProbeVariants { for ((tok, tokNlp) <- toks.zip(nlpSen) if tokNlp.isUser) process(tok, tokNlp) - ok = ok && NCSynonymsManager.isStillValid(srvReqId, toks.toSeq) + ok = ok && NCSynonymsManager.isStillValid(srvReqId, toks.toSeq, nlpSen) if (ok) Some(new NCVariantImpl(toks.asJava)) else None }) diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/synonyms/NCSynonymsManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/synonyms/NCSynonymsManager.scala index 5386c83..25987dd 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/synonyms/NCSynonymsManager.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/synonyms/NCSynonymsManager.scala @@ -18,7 +18,7 @@ package org.apache.nlpcraft.probe.mgrs.synonyms import io.opencensus.trace.Span -import org.apache.nlpcraft.common.nlp.{NCNlpSentenceNote, NCNlpSentenceToken} +import org.apache.nlpcraft.common.nlp.{NCNlpSentence, NCNlpSentenceNote, NCNlpSentenceToken} import org.apache.nlpcraft.common.{NCService, U} import org.apache.nlpcraft.model._ import org.apache.nlpcraft.model.intent.{NCIdlContext, NCIdlFunction} @@ -34,21 +34,22 @@ import scala.jdk.CollectionConverters.ListHasAsScala * */ object NCSynonymsManager extends NCService { - case class Key(id: String, startCharIndex: Int, endCharIndex: Int, other: Map[String, AnyRef]) + case class Key(id: String, startCharIndex: Int, endCharIndex: Int, other: Map[String, AnyRef] = Map.empty) object Key { - def apply(t: NCToken): Key = { - val m = - if (t.isUserDefined) - Map.empty[String, AnyRef] - else + def apply(t: NCToken): Key = + if (t.isUserDefined) + Key(t.getId, t.getStartCharIndex, t.getEndCharIndex) + else + Key( + t.getId, + t.getStartCharIndex, + t.getEndCharIndex, NCNlpSentenceNote.getBuiltProperties(t.getId).flatMap(p => t.metaOpt(p).asScala match { case Some(v) => Some(p -> v) case None => None }).toMap - - Key(t.getId, t.getStartCharIndex, t.getEndCharIndex, m) - } + ) } case class Value(request: NCRequest, variants: Seq[Seq[NCToken]], predicate: NCIdlFunction) { @@ -283,14 +284,14 @@ object NCSynonymsManager extends NCService { /** * * @param srvReqId - * @param sen - * @return + * @param senToks + * @param nlpSen */ - def isStillValid(srvReqId: String, sen: Seq[NCToken]): Boolean = + def isStillValid(srvReqId: String, senToks: Seq[NCToken], nlpSen: NCNlpSentence): Boolean = idlCache.get(srvReqId) match { case Some(m) => lazy val allCheckedSenToks = { - val set = mutable.ArrayBuffer.empty[Key] + val set = mutable.HashSet.empty[Key] def add(t: NCToken): Unit = { set += Key(t) @@ -298,39 +299,34 @@ object NCSynonymsManager extends NCService { t.getPartTokens.asScala.foreach(add) } - sen.foreach(add) + senToks.foreach(add) + + set ++= + senToks.flatMap(t => + nlpSen.getInitialNlpNote(t.getStartCharIndex, t.getEndCharIndex) match { + case Some(nlpNote) => Some(Key(nlpNote.noteType, t.getStartCharIndex, t.getEndCharIndex)) + case None => None + } + ) set } - sen.forall(tok => + senToks.forall(tok => m.get(Key(tok)) match { case Some(vals) => vals.exists( - v => { - val x = v.variants.exists(winHistVariant => + v => + v.variants.exists(winHistVariant => v.predicate.apply( tok, NCIdlContext(toks = winHistVariant, req = v.request) ).value.asInstanceOf[Boolean] && - winHistVariant.map(Key(_)).forall(allCheckedSenToks.contains) + winHistVariant.map(Key(_)).forall( + allCheckedSenToks.contains + ) ) - -// if (sen.map(_.getNormalizedText).mkString(" ") == "sort A by A".toLowerCase) { -// -// -// println("!!!CHECK =variants=\n" + v.variants.map(_.mkString("\n")).mkString("\n")) -// println("!!!CHECK =variantsKeys=\n" + v.variants.map(_.map(Key(_)).mkString("\n")).mkString("\n")) -// -// println("!!!CHECK x=" + x) -// -// println("+++++") -// } - - x - } ) - case None => true })
