Dieser Artikel ist eine Fortsetzung des Artikels „ Entwerfen von Absichten mit Apache NlpCraft “ und enthält eine detaillierte Beschreibung der Funktionen der NlpCraft IDL-Absichtsdefinitionssprache, die für die Verwendung in NLP-Projekten basierend auf dem Apache NlpCraft- System erstellt wurde . NlpCraft IDL-Unterstützung wurde dem System seit Version 0.7.5 hinzugefügt .
Die neue Version der deklarativen Absichtsdefinitionssprache mit dem Namen NlpCraft IDL (NlpCraft Intents Definition Language) vereinfachte die Arbeit mit Absichten in Dialog- und Suchmaschinen, die auf dem Apache NlpCraft- Projekt basieren, erheblich und erweiterte gleichzeitig die Funktionen vom System.
NlpCraft IDL ist eine deklarative Sprache, mit der Sie Absichtsdefinitionen zur Verwendung in Apache NlpCraft- Modellen erstellen können.
Beginnen wir mit Beispielen, die die allgemeinen Fähigkeiten der Sprache demonstrieren, liefern die notwendigen Erklärungen und beschreiben dann die Konstruktionen der Sprache etwas formeller.
, , NLP , .
, NlpCraft IDL
intent=xa
flow="^(?:login)(^:logout)*$"
meta={'enabled': true}
term(a)={!(tok_id()) != "z"}[1,3]
term(b)={
meta_intent('enabled') == true &&
month() == 1
}
term(c)~{
@tokId = tok_id()
@usrTypes = meta_model('user_types')
(tokId == 'order' || tokId == 'order_cancel') &&
has_all(@usrTypes, list(1, 2, 3) &&
abs(meta_tok('order:size')) > 10
)
}
:
- “xa”.
terms. Term - , , .
(a) - “z”, ( term =) .
(b) - - ”enabled” . , - month().
(c) - ( term ~) “order” “order_cancel”. , . , .
Flow. , , “login”, “logout”. , . .
Meta. , , .
intent=xb
flow=/#flowModelMethod/
ordered=true
term(a)=/org.mypackage.MyClass#termMethod/?
fragment(frag)
:
- “xb”.
term (”a”, , “?“, ), - org.mypackage.MyClass#termMethod.
Fragment “frag” terms , , terms. “frag” import.
Flow , flowModelMethod.
.
NlpCraft IDL
flow, fragment, import, intent, meta, ordered, term, true, false, null.
intent, flow, fragment, meta, ordered, term - .
fragment terms, .
import - fragment, intent import.
true, false, null - , .
NlpCraft IDL
, :
import
fragment
intent
“import” URL .
: import('http://mysite.com/nlp/idls/external.idl)
“fragment” terms. Terms .
fragment:
fragment=buzz term~{tok_id() == 'x:alarm'}
fragment c ‘a’ ‘b’:
fragment=p1
term={
meta_frag('a') &&
has_any(get(meta_frag('b'), ''), list(1, 2))
}
fragment . ‘a’ ‘b’ .
intent=i1
fragment(p1, {'a': true, 'b': {'': [1, 2, 3]}})
. - , . "timeIntent".
@NCIntentRef("timeIntent")
fun onTimeMatch(
ctx: NCIntentMatch,
@NCIntentTerm("t1") tok: NCToken
): NCResult { ... }
terms
. Term - . term , term. - .
term:
term. .
. . , , “t1”.
term. . term:
:
term(nums)~{tok_id() == 'nlpcraft:num'}
term terms , .
term. . term: .
:
term(nums)={tok_id() == 'nlpcraft:num'}
term(nums)~{true}
term~/org.mypackage.MyClass#termMethod/?
term.
. . :
[M, N] - N M .
* - , [0, ∞]
+ - , [1, ∞]
? - 0 1 , [0, 1]
:
term(nums)={tok_id() == 'nlpcraft:num'}[1,2]
- “nlpcraft:num”.
term(nums)={tok_id() == 'nlpcraft:num'}*
- “nlpcraft:num”.
NlpCraft IDL.
:
- , . : tok_id(), tok_groups(), tok_parent().
NLP - , , , -. : tok_lemma(), tok_is_wordnet(), tok_swear().
, - .. : tok_value(), tok_is_permutated(), tok_is_direct().
- , user agent. : req_tstamp(), req_addr(), req_agent().
- , , .. : meta_model('my:prop'), meta_tok('nlpcraft:num:unit'), meta_user('my:prop').
, NER . , “geo:city“ , .
- , . : user_admin(), comp_name(), user_signup_tstamp().
- , .. : meta_sys('java.home'), now(), day_of_week().
, , .. : lowercase("TeXt"), abs(-1.5), distinct(list(1, 2, 2, 3, 1)).
term - , .
, , :
term(t2)={ @a = meta_model('a') @list = list(1, 2, 3, 4) (@a == 42 || @a == 44) && has_all(@list, list(3, 2)) }
@. .
, NlpCraft IDL term . java, scala, kotlin, groovy java based term. NlpCraft IDL , .
: term(a)=/MyClass#myMethod/
Fragment
Flow
, .
regex, .
: flow="^(?:login)(^:logout)*$"
, , “login”, “logout”.
, , Java-based , term.
:
@NCIntent("intent=x
flow=/com.company.dialog.Flow#customFlow/
term~{tok_id() == 'some_id'}"
)
def onX(): NCResult = { .. }
Meta
. JSON.
Ordered flag
. false. - terms .
, , NlpCraft IDL, java based . ? , , - .
NlpCraft IDL.
. DSL . .
NlpCraft IDL , IDL , , .
. . , DSL .
java based . Apache NlpCraft . NlpCraft IDL .
Ich hoffe, Sie konnten sich einen ersten Eindruck von den Funktionen der NlpCraft IDL Intent-Sprache und den Arten von Problemen verschaffen, die mit ihrer Hilfe gelöst werden können. Hier finden Sie eine detaillierte Beschreibung der Sprache und ihrer Fähigkeiten. Weitere Beispiele für Modelle, die in Java, Kotlin, Groovy und Scala erstellt wurden und mit NlpCraft IDL Absichten definieren, finden Sie im Projekt Github .