You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2020/04/16 11:30:43 UTC

[incubator-nlpcraft] 03/03: WIP.

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

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

commit a8351e9fd212f51428f9be1eafaf943aa794b9b4
Author: Sergey Kamov <se...@apache.org>
AuthorDate: Thu Apr 16 14:30:29 2020 +0300

    WIP.
---
 .../apache/nlpcraft/examples/sql/SqlModel.scala    | 27 +++++++---------------
 .../nlpcraft/examples/sql/SqlModelTest.scala       |  1 -
 .../tools/sqlgen/impl/NCSqlExtractorImpl.scala     |  4 ++--
 .../conversation/NCConversationDescriptor.scala    |  8 ++++---
 4 files changed, 15 insertions(+), 25 deletions(-)

diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
index a0ce9bd..ebefb38 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
@@ -89,8 +89,8 @@ class SqlModel extends NCModelFileAdapter("org/apache/nlpcraft/examples/sql/sql_
 
         cols.size match {
             case 1 ⇒ Some(cols.head)
-
             case 0 ⇒ None
+
             case _ ⇒ throw new IllegalArgumentException(s"Too many columns found for token: $tok")
         }
     }
@@ -222,14 +222,10 @@ class SqlModel extends NCModelFileAdapter("org/apache/nlpcraft/examples/sql/sql_
 
     override def onMatchedIntent(m: NCIntentMatch): Boolean = {
         val toks = m.getVariant.getMatchedTokens.asScala
-        val newToks = toks -- m.getContext.getConversation.getTokens.asScala
-
-        println("toks=" + toks.map(_.origText))
-        println("conv=" + m.getContext.getConversation.getTokens.asScala.map(_.origText))
-        println("newToks=" + newToks.map(_.origText))
+        val intentConvToks = m.getIntentTokens.asScala.flatMap(_.asScala) -- toks
 
         // Variant doesn't use conversation tokens.
-        if (newToks.length == toks.length)
+        if (intentConvToks.isEmpty)
             true
         else {
             def isValue(t: NCToken): Boolean = findAnyColumnTokenOpt(t) match {
@@ -244,22 +240,15 @@ class SqlModel extends NCModelFileAdapter("org/apache/nlpcraft/examples/sql/sql_
             // - all new tokens are columns,
             // - new single token is date.
             // So, this example supports conversation for simple qualifying questions.
-            val suitable =
-                newToks.forall(isValue) ||
-                newToks.forall(isColumn) ||
-                newToks.size == 1 && isDate(toks.head)
-
-            if (!suitable) {
-                // TODO: drop it.
-                if (m.getContext.getVariants.size() == 1)
-                    throw new NCRejection("Question cannot be answered")
-
-                logger.info("Conversation reset")
+            val ok = toks.forall(isValue) || toks.forall(isColumn) || toks.size == 1 && isDate(toks.head)
 
+            if (!ok) {
                 m.getContext.getConversation.clearAllStm()
+
+                logger.info("Conversation reset, try without conversation.")
             }
 
-            suitable
+            ok
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
index 5f132c2..5d85405 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
@@ -311,7 +311,6 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
                 """.stripMargin
             ),
             Case(
-                // TODO:
                 Seq(
                     "10 suppliers"
                 ),
diff --git a/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlExtractorImpl.scala b/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlExtractorImpl.scala
index b83db0a..173fcea 100644
--- a/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlExtractorImpl.scala
+++ b/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlExtractorImpl.scala
@@ -77,7 +77,7 @@ class NCSqlExtractorImpl(schema: NCSqlSchema, variant: NCVariant) extends NCSqlE
       * @return
       */
     private def getWithGroup(tok: NCToken, grp: String): Seq[NCToken] =
-        Seq(tok) ++ tok.findPartTokens().asScala.flatMap(p ⇒ if (p.getGroups.contains(grp)) Some(p) else None)
+        (Seq(tok) ++ tok.findPartTokens().asScala).flatMap(p ⇒ if (p.getGroups.contains(grp)) Some(p) else None)
     
     /**
       *
@@ -181,7 +181,7 @@ class NCSqlExtractorImpl(schema: NCSqlSchema, variant: NCVariant) extends NCSqlE
      * @return
      */
     private def getAsc(tok: NCToken, metaName: String, dflt: Boolean): Boolean = {
-        val ascOpt: Option[Boolean] = tok.meta(metaName)
+        val ascOpt: Option[Boolean] = tok.metaOpt(metaName).asScala
 
         ascOpt.getOrElse(dflt)
     }
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationDescriptor.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationDescriptor.scala
index f1b7f70..185068d 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationDescriptor.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationDescriptor.scala
@@ -60,9 +60,9 @@ case class NCConversationDescriptor(usrId: Long, mdlId: String) extends LazyLogg
     private val stm = mutable.ArrayBuffer.empty[ConversationItem]
     private val lastToks = mutable.ArrayBuffer.empty[Iterable[NCToken]]
 
-    private var ctx = new util.ArrayList[NCToken]()
-    private var lastUpdateTstamp = U.nowUtcMs()
-    private var attempt = 0
+    @volatile private var ctx: util.List[NCToken] = new util.ArrayList[NCToken]()
+    @volatile private var lastUpdateTstamp = U.nowUtcMs()
+    @volatile private var attempt = 0
 
     /**
       *
@@ -145,6 +145,8 @@ case class NCConversationDescriptor(usrId: Long, mdlId: String) extends LazyLogg
                 item.holders --= item.holders.filter(h ⇒ p.test(h.token))
 
             squeezeTokens()
+
+            ctx = ctx.asScala.filter(tok ⇒ !p.test(tok)).asJava
         }
 
         logger.info(s"Manually cleared conversation using token predicate.")