This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft-website.git
The following commit(s) were added to refs/heads/master by this push:
new 03b7ba1 WIP.
03b7ba1 is described below
commit 03b7ba1f27d87622c3da48c926271aee52b1425b
Author: Aaron Radzinzski <[email protected]>
AuthorDate: Mon Apr 19 03:57:50 2021 +0300
WIP.
---
_data/idl-fns.yml | 17 ++
ext/syntaxhighlighter/scripts/shBrushIdl.js | 2 +-
intent-matching.html | 241 ++++++++++++++++++++++++++--
3 files changed, 247 insertions(+), 13 deletions(-)
diff --git a/_data/idl-fns.yml b/_data/idl-fns.yml
index 155a6f1..8e660ce 100644
--- a/_data/idl-fns.yml
+++ b/_data/idl-fns.yml
@@ -15,6 +15,10 @@
# limitations under the License.
#
+#
+# IDL functions documentation.
+#
+
fn-token:
- name: tok_id
sig: |
@@ -372,9 +376,21 @@ fn-token:
@tok = if(is_empty(@parts), tok_this(), first(@parts))
+
fn-datetime:
+
+fn-req:
+
+fn-user:
+
+fn-company:
+
fn-math:
+fn-collections:
+
+fn-metadata:
+
fn-other:
- name: if
sig: |
@@ -431,6 +447,7 @@ fn-other:
@dflt = 'text'
or_else(meta_model('some_prop'), @dflt)
+
fn-text:
- name: length
sig: |
diff --git a/ext/syntaxhighlighter/scripts/shBrushIdl.js
b/ext/syntaxhighlighter/scripts/shBrushIdl.js
index c2bde90..324d60b 100644
--- a/ext/syntaxhighlighter/scripts/shBrushIdl.js
+++ b/ext/syntaxhighlighter/scripts/shBrushIdl.js
@@ -10,7 +10,7 @@
const keywords = 'flow fragment import intent meta ordered term';
const literals = 'false null true';
const symbols = '[\\[\\]{}*@+?~=]+';
- const fns = 'abs acos asin atan atn2 cbrt ceil comp_addr comp_city
comp_country comp_id comp_name comp_postcode comp_region comp_website cos cosh
count day_of_month day_of_week day_of_year degrees euler exp expm1 first floor
get has has_all has_any hour hypot if is_alpha is_alphanum is_alphanumspace
is_alphaspace is_empty is_num is_numspace is_whitespace json keys last length
list log log10 log1p lowercase max meta_company meta_conv meta_frag meta_intent
meta_model meta_part meta [...]
+ const fns = 'or_else abs acos asin atan atn2 cbrt ceil comp_addr
comp_city comp_country comp_id comp_name comp_postcode comp_region comp_website
cos cosh count day_of_month day_of_week day_of_year degrees euler exp expm1
first floor get has has_all has_any hour hypot if is_alpha is_alphanum
is_alphanumspace is_alphaspace is_empty is_num is_numspace is_whitespace json
keys last length list log log10 log1p lowercase max meta_company meta_conv
meta_frag meta_intent meta_model meta_p [...]
this.regexList = [
{ regex: SyntaxHighlighter.regexLib.singleLineCComments, css:
'comments' }, // One line comments.
diff --git a/intent-matching.html b/intent-matching.html
index fe4775b..7e93b8e 100644
--- a/intent-matching.html
+++ b/intent-matching.html
@@ -65,6 +65,41 @@ id: intent_matching
intent=x term(a)~{tok_id() == 'my_elm'} term(b)={has(tok_groups(),
"my_group")}
</pre>
<p>
+ IDL intent defines a match between the parsed input utterance,
i.e. the collection of
+ <a class="not-code" target="javadoc"
href="/apis/latest/org/apache/nlpcraft/model/NCToken.html">tokens</a>,
+ and the user-define callback method. To accomplish that, IDL <a
href="#idl_functions">functions</a> provide
+ access to the following information:
+ </p>
+ <ul>
+ <li>
+ Basic <a class="not-code" target="javadoc"
href="/apis/latest/org/apache/nlpcraft/model/NCToken.html">token properties</a>
such as token ID,
+ group membership, aliases, token parent and ancestry hierarchy,
+ token's constituent part tokens, abstract flag, etc.
+ </li>
+ <li>
+ NLP <a class="not-code" target="javadoc"
href="/apis/latest/org/apache/nlpcraft/model/NCToken.html">token properties</a>
- stem,
+ lemma, PoS tag, and variety of computed boolean flags
+ such as stop word, swear word, free word, known dictionary
word,
+ bracketed, quoted, etc.
+ </li>
+ <li>
+ <a class="not-code" target="javadoc"
href="/apis/latest/org/apache/nlpcraft/model/NCToken.html">Information</a> about
+ how particular token was found in the input, i.e. its sparsity
value, permutation
+ flag, synonym value, indices in the original text, etc.
+ </li>
+ <li>
+ Additional token metadata provided by NER providers. For
example, for geographical token additional metadata
+ can provide population, postal codes, latitude and longitude
coordinates, and other demographic information.
+ </li>
+ <li>
+ Additional metadata about user and company that made the input
request like admin status, signup date,
+ first and last names, avatars, emails, company name, website,
address, etc.
+ </li>
+ <li>
+ System information such as current date and time, OS
properties, system and environmental variables.
+ </li>
+ </ul>
+ <p>
You can review the formal
<a target="github"
href="https://github.com/apache/incubator-nlpcraft/blob/master/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4">ANTLR4
grammar</a> for IDL,
but here are the general properties of IDL:
@@ -109,8 +144,8 @@ id: intent_matching
<li>
IDL is a lazily evaluated language, i.e. expressions are
evaluated only when required during runtime. That
means that evaluated left-to-right logical AND and OR
operators, for example, skip their right-part expressions if the left
expression result is
- determinative for the overall result - so called short-circuit
evaluation. Some IDL functions like <code>if</code> also provide the similar
- short-circuit evaluation.
+ determinative for the overall result - so called short-circuit
evaluation. Some IDL functions like
+ <code>if</code> and <code>or_else</code> also provide the
similar short-circuit evaluation.
</li>
</ul>
<p>
@@ -133,13 +168,13 @@ id: intent_matching
<pre class="brush: idl">
intent=xa
flow="^(?:xx)(^:zz)*$"
- meta={'a': 42, 'b': {'Москва': [1, 2, 3]}}
- term(a)={month() >= 6 && !(tok_id()) != "z" &&
meta_model('a') == 100_500}[1,3]
+ meta={'enabled': true}
+ term(a)={month() >= 6 && !(tok_id()) != "z" &&
meta_intent('enabled') == true}[1,3]
term(b)~{
- @a = meta_model('a')
- @lst = list(1, 2, 3, 4)
+ @tokId = tok_id()
+ @usrTypes = meta_model('user_types')
- has_all(@lst, list(@a, 2))
+ (tokId == 'order' || tokId == 'order_cancel') &&
has_all(@usrTypes, list(1, 2, 3))
}
intent=xb
@@ -219,7 +254,7 @@ id: intent_matching
</p>
</dd>
<dt>
- <code>meta={'a': 42, 'b': {'Москва': [1, 2,
3]}}</code> <sup><small>line 3</small></sup>
+ <code>meta={'enabled': true}</code> <sup><small>line
3</small></sup>
</dt>
<dd>
<p>
@@ -233,11 +268,11 @@ id: intent_matching
</p>
</dd>
<dt>
- <code>term(a)={month() >= 6 && !(tok_id()) != "z" &&
meta_model('a') == 100_500}[1,3]</code> <sup><small>line 4</small></sup><br>
+ <code>term(a)={month() >= 6 && !(tok_id()) != "z" &&
meta_intent('enabled') == true}[1,3]</code> <sup><small>line 4</small></sup><br>
<code>term(b)~{</code> <sup><small>line
5</small></sup><br>
- <code style="padding-left: 20px">@a =
meta_model('a')</code><br>
- <code style="padding-left: 20px">@lst = list(1, 2, 3,
4)</code><br>
- <code style="padding-left: 20px">has_all(@lst,
list(@a, 2))</code><br>
+ <code style="padding-left: 20px">@tokId =
tok_id()</code><br>
+ <code style="padding-left: 20px">@usrTypes =
meta_model('user_types')</code><br>
+ <code style="padding-left: 20px">(tokId == 'order' ||
tokId == 'order_cancel') && has_all(@usrTypes, list(1, 2, 3))</code><br>
<code>}</code><br>
<code>term(a)=/org.mypackage.MyClass#termMethod/?</code> <sup><small>line
15</small></sup>
</dt>
@@ -680,18 +715,200 @@ id: intent_matching
</div>
</div>
<div class="tab-pane fade show" id="fn_math" role="tabpanel">
+ <div class="accordion" id="math_fns">
+ {% for fn in site.data.idl-fns.fn-math %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#math_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_collection" role="tabpanel">
+ <div class="accordion" id="collections_fns">
+ {% for fn in site.data.idl-fns.fn-collections %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#collections_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_metadata" role="tabpanel">
+ <div class="accordion" id="metadata_fns">
+ {% for fn in site.data.idl-fns.fn-metadata %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#metadata_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_datetime" role="tabpanel">
+ <div class="accordion" id="datetime_fns">
+ {% for fn in site.data.idl-fns.fn-datetime %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#datetime_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_req" role="tabpanel">
+ <div class="accordion" id="req_fns">
+ {% for fn in site.data.idl-fns.fn-req %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#req_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_user" role="tabpanel">
+ <div class="accordion" id="user_fns">
+ {% for fn in site.data.idl-fns.fn-user %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#user_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_company" role="tabpanel">
+ <div class="accordion" id="company_fns">
+ {% for fn in site.data.idl-fns.fn-company %}
+ <div class="card">
+ <div class="card-header">
+ <h2 class="mb-0">
+ <button class="btn btn-link btn-block
text-left" type="button" data-toggle="collapse" data-target="#fn_{{fn.name}}">
+ <span><code>{{fn.sig}}</code></span>
+ <span
class="fn-short-desc">{{fn.synopsis}}</span>
+ </button>
+ </h2>
+ </div>
+ <div id="fn_{{fn.name}}" class="collapse"
data-parent="#company_fns">
+ <div class="card-body">
+ <p class="fn-desc">
+ <em>Description:</em><br>
+ {{fn.desc}}
+ </p>
+ <p class="fn-usage">
+ <em>Usage:</em><br>
+ </p>
+ <pre class="brush:idl">{{fn.usage}}</pre>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+ </div>
</div>
<div class="tab-pane fade show" id="fn_other" role="tabpanel">
<div class="accordion" id="other_fns">