// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . internal . ml Ċ Ċ import Ġcom . intellij . ide . ui . search . Port er Stem mer Util Ċ import Ġcom . intellij . util . text . Name Util Core Ċ import Ġorg . jetbrains . annotations . Api Status Ċ Ċ @ Api Status . Internal Ċ class ĠWord s Splitter Ġprivate Ġconstructor ( private Ġval Ġskip Less : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġignore Stop Words : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstop Words : ĠSet < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmax Words : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġwith Stem ming : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġto LowerCase : ĠBoolean ) Ġ{ ĊĊĠ Ġfun Ġsplit ( name : ĠString ): ĠList < String > Ġ= Ġwords FromName ( name ) ĊĠĠĠ Ġ. filter (:: should Include ) ĊĠĠĠ Ġ. take ( max Words ) ĊĠĠĠ Ġ. map (:: normalize ) ĊĠĠĠ Ġ. toList () ĊĊĠ Ġprivate Ġfun Ġwords FromName ( name : ĠString ) Ġ= Ġsequence Ġ{ ĊĠĠĠ Ġvar Ġstart Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( start Ġ< Ġname . length ) Ġ{ ĊĠĠĠĠĠ Ġval Ġnext Ġ= ĠName Util Core . next Word ( name , Ġstart ) ĊĠĠĠĠĠ Ġyield ( name . substring ( start , Ġnext )) ĊĠĠĠĠĠ Ġstart Ġ= Ġnext ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnormalize ( word : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġword ĊĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( toLowerCase ) Ġit . toLowerCase () Ġelse Ġit Ġ} ĊĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( with Stem ming ) ĠPort er Stem mer Util . stem ( it ) Ġ?: Ġit Ġelse Ġit Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshould Include ( word : ĠString ): ĠBoolean Ġ= ĊĠĠĠ Ġword . isNotBlank () Ġ&& ĊĠĠĠ Ġword . all Ġ{ Ġit . is Letter () Ġ} Ġ&& ĊĠĠĠ Ġword . length Ġ>= Ġskip Less Ġ&& ĊĠĠĠ Ġ(! ignore Stop Words Ġ|| Ġword Ġ! in Ġstop Words ) ĊĊĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ STOP _ WORDS Ġ= Ġset Of (" set ", Ġ" get ", Ġ" is ") ĊĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MAX _ WORDS _ COUNT Ġ= Ġ 7 ĊĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MIN _ WORD _ LENGTH Ġ= Ġ 3 ĊĊĠĠĠĠĠ Ġfun Ġidentifiers (): ĠBuilder Ġ= ĠBuilder () ĊĠĠĠĠĠĠĠ Ġ. skip Short ( DEFAULT _ MIN _ WORD _ LENGTH ) ĊĠĠĠĠĠĠĠ Ġ. ignore Stop Words ( DEFAULT _ STOP _ WORDS ) ĊĠĠĠĠĠĠĠ Ġ. max Words ( DEFAULT _ MAX _ WORDS _ COUNT ) ĊĠĠĠĠĠĠĠ Ġ. toLowerCase () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġto LowerCase : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġwith Stem ming : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġignore Stop Words : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġstop Words : ĠSet < String > Ġ= ĠDEFAULT _ STOP _ WORDS ĊĠĠĠ Ġprivate Ġvar Ġskip Less : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmax Words : ĠInt Ġ= ĠInt . MAX _ VALUE ĊĊĠĠĠ Ġfun Ġbuild (): ĠWord s Splitter Ġ= ĠWord s Splitter ( skip Less , Ġignore Stop Words , Ġstop Words , Ġmax Words , Ġwith Stem ming , Ġto LowerCase ) ĊĊĠĠĠ Ġfun Ġignore Stop Words ( stop Words : ĠIterable < String >? Ġ= Ġnull ): ĠBuilder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġignore Stop Words Ġ= Ġtrue ĊĠĠĠĠĠ Ġif Ġ( stop Words Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . stop Words Ġ= Ġstop Words . toSet () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġskip Short ( skip Less : ĠInt Ġ= ĠDEFAULT _ MIN _ WORD _ LENGTH ): ĠBuilder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġthis . skip Less Ġ= Ġskip Less ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmax Words ( count : ĠInt Ġ= ĠDEFAULT _ MAX _ WORDS _ COUNT ): ĠBuilder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġmax Words Ġ= Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Stem ming (): ĠBuilder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġwith Stem ming Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto LowerCase (): ĠBuilder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġto LowerCase Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ