NlpCraftIDLインテント言語

この記事は、「Apache NlpCraftを使用したインテントの設計」の続きであり、ApacheNlpCraftシステムに基づくNLPプロジェクトで使用するために作成されたNlpCraftIDLインテント定義言語の機能の詳細な説明が含まれていますNlpCraft IDLサポートは、バージョン0.7.5以降システムに追加されました。   





NlpCraft IDL(NlpCraft Intents Definition Language)と呼ばれる新しいバージョンの宣言型インテント定義言語は、Apache NlpCraftプロジェクトに基づいて構築されたダイアログおよび検索エンジンでインテントを操作するプロセスを大幅に簡素化し、同時に機能を拡張しました。システムの。  





NlpCraft IDLは、ApacheNlpCraftモデルで使用するインテント定義を作成できるようにする宣言型言語です





言語の一般的な機能を示す例から始めて、必要な説明を提供してから、言語の構造をもう少し正式に説明しましょう。 





, , 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 . .





  • , NlpCraft IDL   . .





  • . .  





  • , . URL import. , IDE (, , Intellij Idea , ). , . : 1, 2.  





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





. , IDE . import fragment .  





“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

Fragment terms, .





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 = { .. }
      
      



, customFlow(), , , boolean. 





Meta

. JSON.





Ordered flag

. false. - terms .  





, , NlpCraft IDL, java based . ? , , - . 





NlpCraft IDL.





  • . DSL . . 





  • NlpCraft IDL , IDL , , .





  • . . , DSL .  





  • java based . Apache NlpCraft . NlpCraft IDL .





NlpCraftIDLインテント言語の機能とその助けを借りて解決できる問題の種類について最初のアイデアを得ることができたと思います。ここでは、言語とその機能の詳細な説明があります。NlpCraft IDLを使用してインテントを定義し、java、kotlin、groovy、scalaで作成されたモデルの追加の例は、プロジェクトgithubで入手できます








All Articles