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 dd04899 WIP.
dd04899 is described below
commit dd04899af6a2741c312b3f3853c696e5aa62388f
Author: Sergey Kamov <[email protected]>
AuthorDate: Tue Jul 20 14:04:26 2021 +0300
WIP.
---
.../model/ctxword/NCContextWordSpec3Samples.scala | 91 +++++++++++++++-------
1 file changed, 61 insertions(+), 30 deletions(-)
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec3Samples.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec3Samples.scala
index 28c8ffc..38ceb79 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec3Samples.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/ctxword/NCContextWordSpec3Samples.scala
@@ -26,14 +26,7 @@ import java.util.{Collections, Optional}
import java.{lang, util}
import scala.jdk.CollectionConverters.{MapHasAsJava, SeqHasAsJava,
SetHasAsJava}
-/**
- * Test model.
- */
-class NCContextWordSpecModel3 extends NCModel {
- override def getId: String = this.getClass.getSimpleName
- override def getName: String = this.getClass.getSimpleName
- override def getVersion: String = "1.0.0"
-
+object NCContextWordSpecModel3 {
private def mkElement(id: String, group: Option[String], syns: String*):
NCElement =
new NCElement {
override def getId: String = id
@@ -53,47 +46,85 @@ class NCContextWordSpecModel3 extends NCModel {
override def getSynonyms: util.List[String] =
Collections.singletonList(p)
}).asJava
}
+}
+import NCContextWordSpecModel3._
+/**
+ * Test model.
+ */
+class NCContextWordSpecModel3 extends NCModel {
+ override def getId: String = this.getClass.getSimpleName
+ override def getName: String = this.getClass.getSimpleName
+ override def getVersion: String = "1.0.0"
override def isPermutateSynonyms: Boolean = true
override def isSparse: Boolean = true
- override def getAbstractTokens: util.Set[String] = Set("ls:type1",
"ls:type2", "ls:type3").asJava
override def getMacros: util.Map[String, String] =
Map(
"<ACTION>" -> "{turn|switch|dial|let|set|get|put}",
"<KILL>" -> "{shut|kill|stop|eliminate}",
- "<ENTIRE_OPT>" -> "{entire|full|whole|total|_}",
- "<FLOOR_OPT>" ->
"{upstairs|downstairs|{1st|2nd|3rd|4th|5th|top|ground} floor|_}",
- "<TYPE>" -> "{^^{tok_id() == 'ls:type1'}^^|{store|storage}
{room|_}}",
- "<LIGHT>" -> "{all|_} {it|them|light|illumination|lamp|lamplight}"
+ "<ENTIRE_OPT>" -> "{entire|full|whole|total|_}"
).asJava
+ override def getAbstractTokens: util.Set[String] = Set("ls:part:place",
"ls:part:floor", "ls:part:placeType", "ls:part:light").asJava
+
override def getElements: util.Set[NCElement] =
Set(
- mkValuesElement("ls:type1", 0.7, "room", "closet", "attic",
"loft"),
- mkValuesElement("ls:type2", 0.7, "kitchen", "library", "closet",
"garage", "office", "playroom"),
- // The difference from initial model definition.
mkValuesElement("ls:type3", 0.7, "bedroom", "bathroom", "washroom", "storage"),
- mkValuesElement("ls:type3", 0.7, "bedroom", "washroom"),
+ // Abstract element. Used for top level element `ls:loc`. Note,
that this element is defined via context word categories.
+ mkValuesElement(
+ id = "ls:part:place",
+ conf = 0.7,
+ valSyns = "room", "closet", "attic", "loft", "kitchen",
"library", "closet", "garage", "office", "playroom", "bedroom", "washroom"
+ ),
+ // Abstract element. Used for top level element `ls:loc`.
+ mkElement(
+ id = "ls:part:floor",
+ group = None,
+ syns = "{house|home|building|_}
{upstairs|downstairs|{1st|2nd|3rd|4th|5th|top|ground} floor|_}"
+ ),
+ // Abstract element. Used for top level element `ls:loc`.
+ mkElement(
+ id = "ls:part:placeType",
+ group = None,
+ syns =
"{dinning|laundry|play|master|kid|children|child|guest|_}"
+ ),
+ // Abstract element. Used for top level elements `ls:on` and
`ls:of`.
+ mkElement(
+ id = "ls:part:light",
+ group = None,
+ syns = "{all|_} {light|illumination|lamp|lamplight|it|them}"
+ ),
+ // Top level element. Used in intents.
+ // Part `ls:part:place` is mandatory.
+ // Parts `ls:part:floor` and `ls:part:placeType` are optional.
+ // Parts can be extracted from `ls:loc` to specify certain
location point.
mkElement(
- "ls:loc", None,
- "<ENTIRE_OPT> <FLOOR_OPT> {^^{tok_id() ==
'ls:type2'}^^|{dinning|laundry|play} <TYPE>}",
- "<ENTIRE_OPT> <FLOOR_OPT> {master|kid|children|child|guest|_}
{^^{tok_id() == 'ls:type3'}^^} {<TYPE>|_}",
- "<ENTIRE_OPT> {house|home|building|{1st|first}
floor|{2nd|second} floor}"
+ id = "ls:loc",
+ group = None,
+ syns =
+ "<ENTIRE_OPT> ^^{tok_id() == 'ls:part:floor'}^^?
^^{tok_id() == 'ls:part:place'}^^ ^^{tok_id() == 'ls:part:placeType'}^^?",
+ "<ENTIRE_OPT> ^^{tok_id() == 'ls:part:floor'}^^?
^^{tok_id() == 'ls:part:placeType'}^^? ^^{tok_id() == 'ls:part:place'}^^",
),
+ // Top level element. Used in intents. It's parts help to catch
this element, after they can be ignored.
mkElement(
- "ls:on", Some("act"),
- "<ACTION> {on|up|_} <LIGHT> {on|up|_}",
- "<LIGHT> {on|up}"
+ id = "ls:on",
+ group = Some("act"),
+ syns =
+ "<ACTION> {on|up|_} ^^{tok_id() == 'ls:part:light'}^^
{on|up|_}",
+ "^^{tok_id() == 'ls:part:light'}^^ {on|up}"
),
+ // Top level element. Used in intents. It's parts help to catch
this element, after they can be ignored.
mkElement(
- "ls:off", Some("act"),
- "<ACTION> <LIGHT> {off|out}",
- "{<ACTION>|<KILL>} {off|out} <LIGHT>",
- "<KILL> <LIGHT>",
- "<LIGHT> <KILL>",
- "no <LIGHT>"
+ id = "ls:off",
+ group = Some("act"),
+ syns =
+ "<ACTION> ^^{tok_id() == 'ls:part:light'}^^ {off|out}",
+ "{<ACTION>|<KILL>} {off|out} ^^{tok_id() ==
'ls:part:light'}^^",
+ "<KILL> ^^{tok_id() == 'ls:part:light'}^^",
+ "^^{tok_id() == 'ls:part:light'}^^ <KILL>",
+ "no ^^{tok_id() == 'ls:part:light'}^^"
)
).asJava