You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by ar...@apache.org on 2021/07/08 18:44:32 UTC

[incubator-nlpcraft] 02/02: WIP on NLPCRAFT-359

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

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

commit 3ab290d948918f00978cf166b2722d3a649958a7
Author: Aaron Radzinski <ar...@datalingvo.com>
AuthorDate: Thu Jul 8 11:43:53 2021 -0700

    WIP on NLPCRAFT-359
---
 .../apache/nlpcraft/examples/alarm/AlarmModel.java | 10 ++++----
 .../alarm/src/main/resources/alarm_samples.txt     |  6 ++++-
 .../alarm/src/main/resources/intents.idl           |  6 ++---
 .../org/apache/nlpcraft/model/NCIntentSample.java  | 27 +++++++++++++---------
 4 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/nlpcraft-examples/alarm/src/main/java/org/apache/nlpcraft/examples/alarm/AlarmModel.java b/nlpcraft-examples/alarm/src/main/java/org/apache/nlpcraft/examples/alarm/AlarmModel.java
index ed4b11d..2ff018a 100644
--- a/nlpcraft-examples/alarm/src/main/java/org/apache/nlpcraft/examples/alarm/AlarmModel.java
+++ b/nlpcraft-examples/alarm/src/main/java/org/apache/nlpcraft/examples/alarm/AlarmModel.java
@@ -41,7 +41,7 @@ public class AlarmModel extends NCModelFileAdapter {
     private final Timer timer = new Timer();
     
     public AlarmModel() {
-        // Loading the model from the file in the classpath.
+        // Loading the model from the file.
         super("alarm_model.json");
     }
 
@@ -51,8 +51,8 @@ public class AlarmModel extends NCModelFileAdapter {
      * @param ctx Intent solver context.
      * @return Query result.
      */
-    @NCIntentRef("alarm")
-    @NCIntentSampleRef("alarm_samples.txt")
+    @NCIntentRef("alarm") // Intent is defined in JSON model file (alarm_model.json and intents.idl).
+    @NCIntentSampleRef("alarm_samples.txt") // Samples supplied in an external file.
     NCResult onMatch(
         NCIntentMatch ctx,
         @NCIntentTerm("nums") List<NCToken> numToks
@@ -72,7 +72,7 @@ public class AlarmModel extends NCModelFileAdapter {
         for (NCToken num : numToks) {
             String unit = num.meta("nlpcraft:num:unit");
     
-            // Skip possible fractional to simplify.
+            // Skip possible fractionals to simplify.
             long v = ((Double)num.meta("nlpcraft:num:from")).longValue();
             
             if (v <= 0)
@@ -88,7 +88,7 @@ public class AlarmModel extends NCModelFileAdapter {
                 case "year": { dt = dt.plusYears(v); break; }
         
                 default:
-                    // It shouldn't be assert, because 'datetime' unit can be extended.
+                    // It shouldn't be an assert, because 'datetime' unit can be extended.
                     throw new NCRejection("Unsupported time unit: " + unit);
             }
         }
diff --git a/nlpcraft-examples/alarm/src/main/resources/alarm_samples.txt b/nlpcraft-examples/alarm/src/main/resources/alarm_samples.txt
index d17c1a8..599387c 100644
--- a/nlpcraft-examples/alarm/src/main/resources/alarm_samples.txt
+++ b/nlpcraft-examples/alarm/src/main/resources/alarm_samples.txt
@@ -15,7 +15,11 @@
 # limitations under the License.
 #
 
+#
+# Set of samples (corpus) for automatic unit and regression testing.
+#
+
 Ping me in 3 minutes
 Buzz me in an hour and 15mins
 Set my alarm for 30s
-Wake me up in twenty five minutes
\ No newline at end of file
+Please, wake me up in twenty five minutes!
\ No newline at end of file
diff --git a/nlpcraft-examples/alarm/src/main/resources/intents.idl b/nlpcraft-examples/alarm/src/main/resources/intents.idl
index 7d9ab7e..bae42ae 100644
--- a/nlpcraft-examples/alarm/src/main/resources/intents.idl
+++ b/nlpcraft-examples/alarm/src/main/resources/intents.idl
@@ -19,14 +19,14 @@
 fragment=buzz term~{tok_id() == 'x:alarm'}
 fragment=when
     term(nums)~{
-        // Demonstrating term variable.
+        // Demonstrating term variables.
         @type = meta_tok('nlpcraft:num:unittype')
-        @iseq = meta_tok('nlpcraft:num:isequalcondition')
+        @iseq = meta_tok('nlpcraft:num:isequalcondition') // Excludes conditional statements.
 
         tok_id() == 'nlpcraft:num' && @type == 'datetime' && @iseq == true
     }[0,7]
 
-// Intents
+// Intents (using fragments).
 intent=alarm
     fragment(buzz)
     fragment(when)
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSample.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSample.java
index ec09899..c3b0199 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSample.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSample.java
@@ -24,11 +24,22 @@ import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 /**
- * Annotation to define one or more samples of the user input that should match a corresponding intent. This
- * annotation can only be used together with {@link NCIntent} or {@link NCIntentRef} annotations on the callback
+ * Annotation to define one or more samples (a corpus) of the user input that should match a corresponding intent. This
+ * annotation should be used together with {@link NCIntent} or {@link NCIntentRef} annotations on the callback
  * methods. Method can have multiple annotations of this type and each annotation can define multiple input
- * examples.
+ * examples. See similar {@link NCIntentSampleRef} annotation that allows to load samples from external resources like
+ * file or URL.
  * <p>
+ * The corpus of intent samples serve several important roles in NLPCraft:
+ * <ul>
+ *     <li>
+ *          
+ *     </li>
+ * </ul>
+ *
+ *
+ *
+ *
  * Note that the samples provided by this annotation not only serve the documentation purpose but are also
  * used by {@link NCTestAutoModelValidator} class from built-in test framework for auto-validation between
  * data models and intents.
@@ -40,14 +51,7 @@ import static java.lang.annotation.RetentionPolicy.*;
  *     "Turn the lights off in the entire house.",
  *     "Switch on the illumination in the master bedroom closet.",
  *     "Get the lights on.",
- *     "Please, put the light out in the upstairs bedroom.",
- *     "Set the lights on in the entire house.",
- *     "Turn the lights off in the guest bedroom.",
- *     "Could you please switch off all the lights?",
- *     "Dial off illumination on the 2nd floor.",
- *     "Please, no lights!",
- *     "Kill off all the lights now!",
- *     "No lights in the bedroom, please."
+ *     "Please, put the light out in the upstairs bedroom."
  * ))
  * def onMatch(
  *     {@literal @}NCIntentTerm("act") actTok: NCToken,
@@ -60,6 +64,7 @@ import static java.lang.annotation.RetentionPolicy.*;
  * Read full documentation in <a target=_ href="https://nlpcraft.apache.org/intent-matching.html">Intent Matching</a> section and review
  * <a target=_ href="https://github.com/apache/incubator-nlpcraft/tree/master/nlpcraft-examples">examples</a>.
  *
+ * @see NCIntentSampleRef
  * @see NCIntent
  * @see NCIntentRef
  * @see NCIntentTerm