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