package Ġedu . um ass . c ics . ci ir . ire ne . ltr Ċ Ċ import Ġedu . um ass . c ics . ci ir . ire ne . lang . Q Expr Ċ import Ġedu . um ass . c ics . ci ir . ire ne . lang . R RE nv Ċ import Ġedu . um ass . c ics . ci ir . ire ne . sc oring . Query Eval Node Ċ import Ġedu . um ass . c ics . ci ir . ire ne . sc oring . expr To Eval Ċ import Ġedu . um ass . c ics . ci ir . ire ne . utils . compute Entropy Ċ import Ġedu . um ass . c ics . ci ir . ire ne . utils . mean Ċ import Ġorg . apache . lucene . search . Explanation Ċ Ċ fun ĠQ Expr . to RR Expr ( env : ĠR RE nv ): ĠRR Expr Ġ{ ĊĠĠĠ Ġreturn ĠR RE val Node Expr ( env , Ġthis . deep Copy ()) Ċ } Ċ Ċ sealed Ġclass ĠRR Leaf Expr ( env : ĠR RE nv ) Ġ: ĠRR Expr ( env ) Ċ sealed Ġclass ĠRR Expr ( val Ġenv : ĠR RE nv ) Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble ĊĠĠĠ Ġopen Ġfun Ġexplain ( doc : ĠIL TR Doc ): ĠEx planation Ġ= ĠEx planation . match ( eval ( doc ). toFloat (), Ġ" RR Expr :${ this . java Class . simple Name }") Ċ } Ċ Ċ // val Ġl tr Context Ġ= ĠLT RE val Setup Context ( this ) Ċ fun Ġmake LTR Query ( env : ĠR RE nv , Ġq : ĠQ Expr ) Ġ= Ġexpr To Eval ( env . prepare ( q ), ĠLT RE val Setup Context ( env )) Ċ Ċ class ĠR RE val Node Expr ( env : ĠR RE nv , Ġval Ġnode : ĠQuery Eval Node ) Ġ: ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġconstructor ( env : ĠR RE nv , Ġq : ĠQ Expr ) Ġ: Ġthis ( env , Ġmake LTR Query ( env , Ġq )) ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Env Ġ= ĠL TR Doc Sc oring Env ( doc ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode . score ( score Env ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmatch ( doc : ĠL TR Doc ): ĠBoolean Ġ= Ġnode . matches ( LTR Doc Sc oring Env ( doc )) ĊĊĠĠĠ Ġoverride Ġfun Ġexplain ( doc : ĠIL TR Doc ): ĠEx planation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Env Ġ= ĠL TR Doc Sc oring Env ( doc ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode . explain ( score Env ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠR RCC Expr ( env : ĠR RE nv , Ġval Ġexpr s : ĠList < RR Expr >): ĠRR Expr ( env ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( expr s . size Ġ> Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ class ĠRR Sum ( env : ĠR RE nv , Ġexpr s : ĠList < RR Expr >): ĠR RCC Expr ( env , Ġexpr s ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ= Ġexpr s . sum By Double Ġ{ Ġit . eval ( doc ) Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" RR Sum ($ expr s )" Ċ } Ċ class ĠRR Mean ( env : ĠR RE nv , Ġexpr s : ĠList < RR Expr >): ĠR RCC Expr ( env , Ġexpr s ) Ġ{ ĊĠĠĠ Ġval ĠN Ġ= Ġexpr s . size . toDouble () ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ= Ġexpr s . sum By Double Ġ{ Ġit . eval ( doc ) Ġ} Ġ/ ĠN Ċ } Ċ class ĠR RM ult ( env : ĠR RE nv , Ġexpr s : ĠList < RR Expr >): ĠR RCC Expr ( env , Ġexpr s ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprod Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġexpr s . forEach Ġ{ Ġprod Ġ*= Ġit . eval ( doc ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprod ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRR Const ( env : ĠR RE nv , Ġval Ġvalue : ĠDouble ) Ġ: ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ= Ġvalue Ċ } Ċ Ċ class ĠRR Avg Word Length ( env : ĠR RE nv , Ġval Ġfield : ĠString Ġ= Ġenv . default Field ) Ġ: ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ= Ġdoc . terms ( field ). map Ġ{ Ġit . length Ġ}. mean () Ċ } Ċ Ċ class ĠR RE nt ropy ( env : ĠR RE nv , Ġval Ġfield : ĠString Ġ= Ġenv . default Field ) Ġ: ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ= Ġdoc . terms ( field ). compute Entropy () Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġcalculates Ġthe Ġnumber Ġof Ġunique Ġterms Ġin Ġa Ġdocument Ġdivided Ġby Ġits Ġlength . ĠSimilar Ġto Ġhow Ġno isy Ġthe Ġdocument Ġis , Ġso ĠI Ġcalled Ġit Ġht e ĠDoc Info Quot ient . ĠThis Ġis Ġused Ġin ĠAbsolute ĠDiscount ing . Ċ Ġ*/ Ċ class ĠRR Doc Info Quot ient ( env : ĠR RE nv , Ġval Ġfield : ĠString Ġ= Ġenv . default Field ): ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġdoc . field ( field ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfield . uniq Terms . toDouble () Ġ/ ĠMath . max ( 1 . 0 , field . length . toDouble ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRR Doc Length ( env : ĠR RE nv , Ġval Ġfield : ĠString Ġ= Ġenv . default Field ) Ġ: ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ= Ġdoc . field ( field ). length . toDouble () Ċ } Ċ Ċ // ĠReturn Ġthe Ġindex Ġof Ġa Ġterm Ġin Ġa Ġdocument Ġas Ġa Ġfraction : Ġfor Ġnews , Ġthis Ġshould Ġbe Ġsimilar Ġto Ġimportance . ĠA Ġquery Ġterm Ġat Ġthe Ġfirst Ġposition Ġwill Ġreceive Ġa Ġ 1 . 0 ; Ġhalf way Ġthrough Ġthe Ġdocument Ġwill Ġreceive Ġa Ġ 0 . 5 . Ċ class ĠR RT erm Position ( env : ĠR RE nv , Ġval Ġterm : ĠString , Ġval Ġfield : ĠString Ġ= Ġenv . default Field ): ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġdoc . field ( field ) ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġfield . length . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġfield . terms . indexOf ( term ). toDouble () ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 . 0 Ġ- Ġ( pos Ġ/ Ġlength ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRR J ac card Similarity ( env : ĠR RE nv , Ġval Ġtarget : ĠSet < String >, Ġval Ġfield : ĠString Ġ= Ġenv . default Field , Ġval Ġempty : ĠDouble = 0 . 5 ): ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( target . isEmpty ()) Ġreturn Ġempty ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġdoc . field ( field ) ĊĠĠĠĠĠĠĠ Ġval Ġuniq Ġ= Ġfield . term Set ĊĠĠĠĠĠĠĠ Ġif Ġ( uniq . isEmpty ()) Ġreturn Ġempty ĊĠĠĠĠĠĠĠ Ġval Ġoverlap Ġ= Ġ( uniq Ġintersect Ġtarget ). size . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġ( uniq Ġunion Ġtarget ). size . toDouble () ĊĠĠĠĠĠĠĠ Ġreturn Ġoverlap Ġ/ Ġdomain ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRR Log Log istic TF Score ( env : ĠR RE nv , Ġval Ġterm : ĠString , Ġval Ġfield : ĠString Ġ= Ġenv . default Field , Ġval Ġc : ĠDouble Ġ= Ġ 1 . 0 ) Ġ: ĠRR Leaf Expr ( env ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠOriginal Paper C Values Ġ= Ġarray ListOf < Number >( 0 . 5 , 0 . 7 5 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ). map Ġ{ Ġit . toDouble () Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġstats Ġ= Ġenv . get Stats ( term , Ġfield ) ĊĠĠĠ Ġval Ġav gl Ġ= Ġstats . avg DL () ĊĠĠĠ Ġval Ġlambda _ w Ġ= Ġstats . binary Probability () ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( stats . cf Ġ> Ġ 0 ) Ġ{ Ġ" Term Ġ`` $ term '' Ġin Ġfield Ġ`` $ field '' Ġmust Ġactually Ġoccur Ġin Ġthe Ġcollection Ġfor Ġthis Ġfeature Ġto Ġmake Ġsense ." Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġeval ( doc : ĠIL TR Doc ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġdoc . field ( field ) ĊĠĠĠĠĠĠĠ Ġval Ġtf Ġ= Ġfield . count ( term ) ĊĠĠĠĠĠĠĠ Ġval Ġlength Ratio Ġ= Ġav gl Ġ/ Ġfield . length . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġtf Ġ* ĠMath . log ( 1 . 0 Ġ+ Ġc Ġ* Ġlength Ratio ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . log (( t Ġ+ Ġlambda _ w ) Ġ/ Ġlambda _ w ) ĊĠĠĠ Ġ} Ċ } ĊĊ