package Ġedu . um ass . c ics . ci ir . ire ne . lang Ċ Ċ import Ġedu . um ass . c ics . ci ir . ire ne . ltr . Bag Of Words Ċ import Ġedu . um ass . c ics . ci ir . ire ne . utils . in query Stop Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author Ġj fo ley . Ċ Ġ*/ Ċ fun Ġdo PR F Step ( env : ĠR RE nv , Ġquery : ĠQ Expr , Ġcache : ĠHashMap < Int , ĠBag Of Words >): ĠQ Expr Ġ{ ĊĠĠĠ Ġreturn Ġquery . map Ġ{ Ġq Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen ( q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRM 3 Expr Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( q . child . requires PR F ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Q Expr . map Ġshould Ġbe Ġbottom - up . ĠDid Ġyou Ġadd Ġa Ġnew ĠPR F - Q Expr ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe levance Expansion Q ( env , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq . child , Ġq . fb Docs , Ġq . orig Weight , Ġq . fb Terms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq . field Ġ?: Ġenv . default Field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( q . stop words ) Ġ{ Ġenv . config . pr f Stop words Ġ} Ġelse Ġ{ Ġempty Set () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache ) Ġ?: Ġerror (" PR F Ġhad Ġno Ġmatches : Ġ$ q ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġq ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠRe levance Expansion Q ( env : ĠR RE nv , Ġfirst Pass : ĠQ Expr , Ġdepth : ĠInt = 5 0 , Ġorig Weight : ĠDouble Ġ= Ġ 0 . 3 , Ġnum Terms : ĠInt = 1 0 0 , Ġexpansion Field : ĠString ?= null , Ġstop words : ĠSet < String > Ġ= Ġin query Stop , Ġcache : ĠHashMap < Int , ĠBag Of Words > Ġ= ĠHashMap ()): ĠQ Expr ? Ġ{ ĊĠĠĠ Ġval Ġrm Ġ= ĠCompute Re levance Model ( env , Ġfirst Pass , Ġdepth , Ġexpansion Field , Ġstop words , Ġcache ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġexp Q Ġ= Ġrm . to Q Expr ( num Terms ) ĊĠĠĠ Ġreturn ĠSum Expr ( first Pass . weighted ( orig Weight ), Ġexp Q . weighted ( 1 . 0 Ġ- Ġorig Weight )) Ċ } Ċ