package Ġcom . l ond og ard . smile Ċ Ċ import Ġcom . l ond og ard . smile . extensions . Stop Word Filter Ċ import Ġcom . l ond og ard . smile . extensions . sentences Ċ import Ġcom . l ond og ard . smile . extensions . words Ċ import Ġsm ile . math . Math Ex Ċ import Ġsm ile . nlp . Big ram Ċ import Ġsm ile . nlp . NG ram Ċ import Ġsm ile . nlp . Simple Cor pus Ċ import Ġsm ile . nlp . Text Ċ import Ġsm ile . nlp . pos . HM MP O ST agger Ċ import Ġsm ile . nlp . pos . P enn Tre eb ank POS Ċ import Ġkotlin . math . log 1 0 Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠA Ġinterface Ġthat Ġsupp lies Ġmethods Ġto Ġcreate Ġdifferent ĠN LP Ġstructures Ġout Ġof Ġtext Ġ& Ġmore . Ċ Ġ*/ Ċ interface ĠSm ile Operators Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġcreates Ġa Ġ[ Simple Cor pus ]. Ġ[ Simple Cor pus ] Ġis ĠIN _ MEMORY Ġmeaning Ġthat Ġwe Ġcan Ġonly Ġhandle Ġsmaller Ġdatasets . ĊĠĠĠĠ Ġ* Ġ[ Simple Cor pus ] Ġcontains Ġhandy Ġmethods Ġfor Ġstuff s Ġsuch Ġas ĠB igr ams , ĠFrequency Ġetc . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Ġthe Ġdifferent Ġdocuments Ġin Ġa Ġlist ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Simple Cor pus ] Ġgenerated Ġfrom Ġthe Ġdocuments Ġsupplied ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcorpus ( text : ĠList < String >): ĠSimple Cor pus Ġ= ĊĠĠĠĠĠĠĠ ĠSimple Cor pus (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . forEach Ġ{ Ġs Ġ-> Ġadd ( Text ( s )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġk Ġthe Ġtop Ġk Ġbig ram Ġcol locations Ġin Ġthe Ġgiven Ġcorpus . ĊĠĠĠĠ Ġ* Ġ@ param Ġmin Freq Ġthe Ġminimum Ġfrequency Ġof Ġcol location . ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Ġis Ġa Ġlist Ġof Ġdocuments ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġtop Ġk Ġb igr ams . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbig ram ( k : ĠInt , Ġmin Freq : ĠInt , Ġtext : ĠList < String >): ĠArray < smile . nlp . col location . Big ram > Ġ= ĊĠĠĠĠĠĠĠ Ġsm ile . nlp . col location . Big ram . of ( corpus ( text ), Ġk , Ġmin Freq ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġp Ġthe Ġp - value Ġthreshold ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġarray Ġof Ġsignificant Ġbig ram Ġcol locations Ġin Ġdescending Ġorder ĊĠĠĠĠ Ġ* Ġof Ġlikelihood Ġratio . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbig ram ( p : ĠDouble , Ġmin Freq : ĠInt , Ġtext : ĠList < String >): ĠArray < smile . nlp . col location . Big ram > Ġ= ĊĠĠĠĠĠĠĠ Ġsm ile . nlp . col location . Big ram . of ( corpus ( text ), Ġp , Ġmin Freq ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġmax NG ram Size Ġis Ġthe Ġmaximum Ġsize Ġof ĠN Ġin ĠNG ram ĊĠĠĠĠ Ġ* Ġ@ param Ġmin Freq Ġis ĠThe Ġminimum Ġfrequency Ġof Ġn - gram Ġin Ġthe Ġsentences . ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Ġis Ġthe Ġdocuments ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠList Ġof ĠN grams Ġthat Ġfulfill s Ġrequirement , Ġfor Ġeach Ġdocument . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġn gram ( max NG ram Size : ĠInt , Ġmin Freq : ĠInt , Ġtext : ĠList < String >): ĠArray < Array < smile . nlp . col location . NG ram >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= Ġtext . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . sentences (). map Ġ{ Ġsentence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. words ( Stop Word Filter . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġword Ġ-> ĠSm ile Singleton . port er . strip Pl ural Part icip le ( word ). toLowerCase () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsm ile . nlp . col location . NG ram . of ( sentences , Ġmax NG ram Size , Ġmin Freq ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠPart - of - speech Ġtag gers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsentence Ġa Ġsentence Ġthat Ġis Ġalready Ġsegment ed Ġto Ġwords . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġpos Ġtags . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost ag ( sentence : ĠList < String >): ĠArray < P enn Tre eb ank POS > Ġ= ĊĠĠĠĠĠĠĠ ĠH M MP O ST agger . getDefault (). tag ( sentence . to Typed Array ()) ĊĊĠĠĠ Ġ/** ĠConverts Ġa Ġbag Ġof Ġwords Ġto Ġa Ġfeature Ġvector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġterms Ġthe Ġtoken Ġlist Ġused Ġas Ġfeatures . ĊĠĠĠĠ Ġ* Ġ@ param Ġbag Ġthe Ġbag Ġof Ġwords . ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġvector Ġof Ġfrequency Ġof Ġfeature Ġtokens Ġin Ġthe Ġbag . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvector ize ( terms : ĠList < String >, Ġbag : ĠMap < String , ĠInt >): ĠList < Double > Ġ= ĊĠĠĠĠĠĠĠ Ġterms . map Ġ{ Ġbag . get OrDefault ( it , Ġ 0 ). toDouble () Ġ} ĊĊĠĠĠ Ġ/** ĠConverts Ġa Ġbinary Ġbag Ġof Ġwords Ġto Ġa Ġsparse Ġfeature Ġvector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġterms Ġthe Ġtoken Ġlist Ġused Ġas Ġfeatures . ĊĠĠĠĠ Ġ* Ġ@ param Ġbag Ġthe Ġbag Ġof Ġwords . ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġinteger Ġvector , Ġwhich Ġelements Ġare Ġthe Ġindices Ġof Ġpresented ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġfeature Ġtokens Ġin Ġascending Ġorder . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvector ize ( terms : ĠList < String >, Ġbag : ĠSet < String >): ĠList < Int > Ġ= ĊĠĠĠĠĠĠĠ Ġterms . map Indexed Ġ{ Ġindex , Ġs Ġ-> Ġindex Ġto Ġs Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ(_, Ġs ) Ġ-> Ġbag . contains ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( idx , Ġ_) Ġ-> Ġidx Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġdocument Ġfrequencies , Ġi . e . Ġthe Ġnumber Ġof Ġdocuments Ġthat Ġcontain Ġterm . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġterms Ġthe Ġtoken Ġlist Ġused Ġas Ġfeatures . ĊĠĠĠĠ Ġ* Ġ@ param Ġcorpus Ġthe Ġtraining Ġcorpus . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġlist Ġof Ġdocument Ġfrequencies . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdf ( terms : ĠList < String >, Ġcorpus : ĠList < Map < String , ĠInt >> ): ĠList < Int > Ġ= ĊĠĠĠĠĠĠĠ Ġterms . map Ġ{ Ġterm Ġ-> Ġcorpus . filter Ġ{ Ġit . contains ( term ) Ġ}. size Ġ} ĊĊĠĠĠ Ġ/** ĠTF - ID F Ġre levance Ġscore Ġbetween Ġa Ġterm Ġand Ġa Ġdocument Ġbased Ġon Ġa Ġcorpus . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtf ĠĠĠ Ġthe Ġfrequency Ġof Ġsearching Ġterm Ġin Ġthe Ġdocument Ġto Ġrank . ĊĠĠĠĠ Ġ* Ġ@ param Ġmax tf Ġthe Ġmaximum Ġfrequency Ġover Ġall Ġterms Ġin Ġthe Ġdocument . ĊĠĠĠĠ Ġ* Ġ@ param Ġn ĠĠĠĠ Ġthe Ġnumber Ġof Ġdocuments Ġin Ġthe Ġcorpus . ĊĠĠĠĠ Ġ* Ġ@ param Ġdf ĠĠĠ Ġthe Ġnumber Ġof Ġdocuments Ġcontaining Ġthe Ġgiven Ġterm Ġin Ġthe Ġcorpus . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtf idf ( tf : ĠDouble , Ġmax tf : ĠDouble , Ġn : ĠInt , Ġdf : ĠInt ): ĠDouble Ġ= ĊĠĠĠĠĠĠĠ Ġ( tf Ġ/ Ġmax ( 1 . 0 , Ġmax tf )) Ġ* Ġlog 1 0 (( 1 . 0 Ġ+ Ġn ) Ġ/ Ġ( 1 . 0 Ġ+ Ġdf )) ĊĊĊĠĠĠ Ġ/** ĠConverts Ġa Ġcorpus Ġto ĠTF - ID F Ġfeature Ġvectors , Ġwhich ĊĠĠĠĠ Ġ* Ġare Ġnormalized Ġto ĠL 2 Ġnorm Ġ 1 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcorpus Ġthe Ġcorpus Ġof Ġdocuments Ġin Ġbag - of - words Ġrepresentation . ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġmatrix Ġof Ġwhich Ġeach Ġrow Ġis Ġthe ĠTF - ID F Ġfeature Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtf idf ( corpus : ĠList < List < Double >> ): ĠList < List < Double >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġcorpus . size ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠInt Array ( corpus [ 0 ]. size ) ĊĠĠĠĠĠĠĠ Ġcorpus . forEach Ġ{ Ġbag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdf . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bag [ i ] Ġ> Ġ 0 ) Ġdf [ i ] Ġ= Ġdf [ i ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcorpus . map Ġ{ Ġbag Ġ-> Ġtf idf ( bag , Ġn , Ġdf ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠConverts Ġa Ġbag Ġof Ġwords Ġto Ġa Ġfeature Ġvector Ġby ĠTF - ID F , Ġwhich ĊĠĠĠĠ Ġ* Ġis Ġnormalized Ġto ĠL 2 Ġnorm Ġ 1 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbag Ġthe Ġbag - of - words Ġfeature Ġvector Ġof Ġa Ġdocument . ĊĠĠĠĠ Ġ* Ġ@ param Ġn Ġthe Ġnumber Ġof Ġdocuments Ġin Ġtraining Ġcorpus . ĊĠĠĠĠ Ġ* Ġ@ param Ġdf Ġthe Ġnumber Ġof Ġdocuments Ġcontaining Ġthe Ġgiven Ġterm Ġin Ġthe Ġcorpus . ĊĠĠĠĠ Ġ* Ġ@ return ĠTF - ID F Ġfeature Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtf idf ( bag : ĠList < Double >, Ġn : ĠInt , Ġdf : ĠInt Array ): ĠList < Double > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax tf Ġ= Ġbag . max () Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġfeatures Ġ= ĠDouble Array ( bag . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfeatures . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures [ i ] Ġ= Ġtf idf ( bag [ i ], Ġmax tf , Ġn , Ġdf [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMath Ex . unit ize ( features ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfeatures . toList () ĊĠĠĠ Ġ} Ċ } Ċ