/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠVS CT Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġfr . vs ct . to ck . nlp . core . service . entity Ċ Ċ import Ġfr . vs ct . to ck . nlp . core . Call Context Ċ import Ġfr . vs ct . to ck . nlp . core . Entity Recognition Ċ import Ġfr . vs ct . to ck . nlp . core . EntityType Ċ import Ġfr . vs ct . to ck . nlp . core . merge . Value Descriptor Ċ import Ġfr . vs ct . to ck . nlp . model . Entity Call Context Ċ import Ġfr . vs ct . to ck . nlp . model . Entity Call Context For Entity Ċ import Ġfr . vs ct . to ck . nlp . model . Entity Call Context For Intent Ċ import Ġfr . vs ct . to ck . nlp . model . Entity Call Context For Sub Entities Ċ import Ġfr . vs ct . to ck . shared . error Ċ import Ġmu . Kotlin Logging Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ internal Ġobject ĠEntity Core Service Ġ: ĠEntity Core Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġprivate Ġval Ġevaluator Providers : ĠList < Entity Evaluator Provider > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠSupported Entity Evalu ators Provider . evalu ators () ĊĊĠĠĠ Ġprivate Ġval Ġentity Type Provider Map : ĠMap < String , ĠEntity Evaluator Provider > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġevaluator Providers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . get Supported Entity Types (). map Ġ{ Ġit Ġto Ġprovider Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠ Ġprivate Ġval Ġentity Type With Values Merge Support : ĠSet < String > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġevaluator Providers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . getEntity Types With Values Merge Support () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠ Ġoverride Ġfun Ġget Evalu able Entity Types (): ĠSet < String > Ġ= Ġentity Type Provider Map . keys ĊĊĠĠĠ Ġoverride Ġfun Ġsupport Values Merge ( entity Type : ĠEntityType ) Ġ= Ġentity Type With Values Merge Support . contains ( entity Type . name ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Entity Evaluator Provider ( entity Type : ĠEntityType ): ĠEntity Evaluator Provider ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentity Type Provider Map [ entity Type . name ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclassify Entity Types ( context : ĠEntity Call Context , Ġtext : ĠString , Ġtokens : ĠArray < String >): ĠList < EntityType Recognition > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity Call Context For Intent Ġ-> Ġclassify Entity Types For Intent ( context , Ġtext , Ġtokens ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity Call Context For Entity Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity Call Context For Sub Entities Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclassify Entity Types For Intent ( context : ĠEntity Call Context For Intent , Ġtext : ĠString , Ġtokens : ĠArray < String >): ĠList < EntityType Recognition > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . intent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. entities ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġget Entity Evaluator Provider ( it . entity Type ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . get EntityType Classifier () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġclassify Entities ( it , Ġcontext , Ġtext , Ġtokens ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclassify Entities ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier : ĠEntityType Classifier , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠEntity Call Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokens : ĠArray < String >): ĠList < EntityType Recognition > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier . classify Entities ( context , Ġtext , Ġtokens ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġevaluate Entities ( context : ĠCall Context , Ġtext : ĠString , Ġentities Recognition : ĠList < Entity Recognition >): ĠList < Entity Recognition > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Evalu ated Entities : ĠMap < Entity Recognition , ĠEvaluation Result > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentities Recognition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . value . evalu ated Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Entity Evaluator Provider ( e . entity Type )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getEntity Evaluator ()?. let Ġ{ Ġevaluator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġto Ġevaluate ( evaluator , ĠEntity Call Context For Entity ( context , Ġe . value . entity ), Ġe . value . text Value ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġentities Recognition . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Evalu ated Entities . containsKey ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevaluation Ġ= Ġnew Evalu ated Entities [ it ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprobability Ġ= Ġif Ġ( evaluation . evalu ated ) Ġ( it . probability Ġ+ Ġevaluation . probability ) Ġ/ Ġ 2 Ġelse Ġit . probability , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit . value . copy ( value Ġ= Ġevaluation . value , Ġevaluated Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġevaluate ( evaluator : ĠEntity Evaluator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠEntity Call Context For Entity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠString ): ĠEvaluation Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluator . evaluate ( context , Ġtext ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvaluation Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Values ( context : ĠEntity Call Context For Entity , Ġvalues : ĠList < Value Descriptor >): ĠValue Descriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Entity Evaluator Provider ( context . entity Type )?. getEntity Evaluator ()?. merge ( context , Ġvalues ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhealth check (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġevaluator Providers . all Ġ{ Ġit . health check () Ġ} ĊĠĠĠ Ġ} Ċ }