package Ġga . h arr ys ul li van . lang sy . utils Ċ Ċ import Ġandroid . app . Application Ċ import Ġga . h arr ys ul li van . lang sy . constants . ContentType Ċ import Ġga . h arr ys ul li van . lang sy . constants . Grammar Part Of Speech Ċ import Ġga . h arr ys ul li van . lang sy . constants . Sp aced Re petition Ċ import Ġga . h arr ys ul li van . lang sy . constants . Vocab Part Of Speech Ċ import Ġga . h arr ys ul li van . lang sy . data . Trainer Ċ import Ġga . h arr ys ul li van . lang sy . models . Content Ċ Ċ class ĠCor por a ( application : ĠApplication ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Application : ĠApplication ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Application Ġ= Ġapplication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠreadFile ( filename : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġins ult s : ĠString ĊĊĠĠĠĠĠĠĠ Ġm Application . assets . open ( filename ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġins ult s Ġ= Ġthis . read Bytes (). toString ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġ}. close () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġins ult s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetFile ( type : ĠString , Ġpos : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContentType . VOC AB Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvocab Filename Ġ= Ġ" corpora / language - content /${ pos }/ words . txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠreadFile ( vocab Filename ). split ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠContentType . GRAM MAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrammar Filename Ġ= Ġ" corpora / language - content / grammar /${ pos }. csv " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠreadFile ( grammar Filename ). split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List < String >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Line Of Pr ere q ( search Pr ere q : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġ" corpora / language - content / grammar / pr ere qs . csv " ĊĠĠĠĠĠĠĠ Ġval Ġpr ere qs Ġ= ĠreadFile ( filename ). split ("\ n "). map Ġ{ Ġp Ġ-> Ġp . replace ("\ r ", Ġ"") Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpr ere qs . indexOf ("$ search Pr ere q , ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Trainer ( content : ĠContent ): ĠTr ainer Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( content . type Ġ== ĠContentType . VOC AB ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtrainer : ĠTr ainer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvocab Filename Ġ= Ġ" corpora / language - content /${ content . part Of Speech }/ words . txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvocab Ġ= ĠreadFile ( vocab Filename ). split ('\ n ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Filename Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" corpora / language - content /${ content . part Of Speech }/ translations /${ content . language }. txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Ġ= ĠreadFile ( translation Filename ). split ('\ n ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvocab Word Ġ= Ġvocab [ content . line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Word Ġ= Ġtranslation [ content . line ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrainer Ġ= ĠTr ainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvocab Word , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Word , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( similar ( vocab Word , Ġtranslation Word )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ(! found ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrainer ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrammar Filename Ġ= Ġ" corpora / language - content / grammar /${ content . part Of Speech }. csv " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrammar Ġ= ĠreadFile ( grammar Filename ). split ("\ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Filename Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" corpora / language - content / grammar /${ content . part Of Speech }/${ content . language }. txt " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation File Ġ= ĠreadFile ( translation Filename ). split ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation With Period Ġ= Ġtranslation File [ content . line ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Without Period Ġ= Ġwhen Ġ( translation With Period . last () Ġ== Ġ'.') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġtranslation With Period . substring ( 0 , Ġtranslation With Period . length Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġtranslation With Period ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTr ainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrammar [ content . line ]. split (", ")[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Without Period , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsimilar ( vocab Word : ĠString , Ġtranslation Word : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnorm Vocab Ġ= Ġvocab Word . toLowerCase (). trim () ĊĠĠĠĠĠĠĠ Ġval Ġnorm Translation Ġ= Ġtranslation Word . toLowerCase (). trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġsame Ġ= Ġnorm Vocab Ġ!= Ġnorm Translation ĊĠĠĠĠĠĠĠ Ġval Ġvocab In Translation Ġ= Ġnorm Translation . indexOf ( norm Vocab ) Ġ!= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġtranslation In Vocab Ġ= Ġnorm Vocab . indexOf ( norm Translation ) Ġ!= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġsame Ġ|| Ġvocab In Translation Ġ|| Ġtranslation In Vocab ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Vocab ( lang Code : ĠString , Ġselected Content : ĠList < Content >): ĠContent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠRandom . choose ( Vocab Part Of Speech . ALL ) ĊĊĠĠĠĠĠĠĠ Ġval Ġvocab Filename Ġ= Ġ" corpora / language - content /$ pos / words . txt " ĊĠĠĠĠĠĠĠ Ġval Ġvocab Ġ= ĠreadFile ( vocab Filename ). split ('\ n ') ĊĊĠĠĠĠĠĠĠ Ġvar ĠlineNumber Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber Ġ= ĠRandom . int ( vocab . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdone Line Numbers Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Content . filter Ġ{ Ġit . part Of Speech Ġ== Ġpos Ġ&& Ġit . line Ġ== ĠlineNumber Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . line Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( done Line Numbers . indexOf ( line Number ) Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ(! found ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContent ( 0 , Ġ 0 , ĠContentType . VOC AB , ĠlineNumber , Ġ 0 , Ġlang Code , Ġpos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Grammar ( lang Code : ĠString , Ġselected Content : ĠList < Content >): ĠContent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠRandom . choose ( Grammar Part Of Speech . ALL ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgrammar Filename Ġ= Ġ" corpora / language - content / grammar /$ pos . csv " ĊĠĠĠĠĠĠĠ Ġval Ġgrammar Ġ= ĠreadFile ( grammar Filename ). split ('\ n ') ĊĊĠĠĠĠĠĠĠ Ġvar ĠlineNumber Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber Ġ= ĠRandom . int ( grammar . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdone Line Numbers Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Content . filter Ġ{ Ġit . part Of Speech Ġ== Ġpos Ġ&& Ġit . line Ġ== ĠlineNumber Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . line Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( done Line Numbers . indexOf ( line Number ) Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ(! found ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpr ere q Ġ= Ġgrammar [ line Number ]. split (", ")[ 1 ]. replace ("\ r ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġpr ere q LineNumber Ġ= Ġget Line Of Pr ere q ( pr ere q ) ĊĠĠĠĠĠĠĠ Ġval Ġpr ere q Done Ġ= Ġselected Content . find Ġ{ Ġcontent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . part Of Speech Ġ== ĠGram mar Part Of Speech . PR ER EQ S Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . line Ġ== Ġpr ere q LineNumber Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . stage Ġ>= ĠSp aced Re petition . THRESHOLD _ OF _ PROB AB IL ISTIC _ MA ST ERY ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pr ere q Done Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContentType . GRAM MAR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpr ere q LineNumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGram mar Part Of Speech . PR ER EQ S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContent ( 0 , Ġ 0 , ĠContentType . GRAM MAR , ĠlineNumber , Ġ 0 , Ġlang Code , Ġpos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }