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.")