/* Ċ Ġ* ĠCopyright ĠĠ 2 0 2 0 ĠDavid ĠG ĠJ ones Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġinfo . dg j ones . bar nable . nlp Ċ Ċ class ĠNa ive Tokenizer Ġ{ ĊĠĠĠ Ġprivate Ġval Ġabbre viations Ġ= Ġset Of (" dr ", Ġ" mr ", Ġ" m rs ", ĊĠĠĠ Ġ" ave ", Ġ" bl vd ", Ġ" c yn ", Ġ" dr ", Ġ" ln ", Ġ" rd ", Ġ" st ", ĊĠĠĠ Ġ" no ", Ġ" tel ", Ġ" temp ", Ġ" vet ", Ġ" vs ", Ġ" misc ", Ġ" min ", Ġ" max ", Ġ" est ", Ġ" dept ", ĊĠĠĠ Ġ" apt ", Ġ" ap pt ", Ġ" approx ") ĊĊĠĠĠ Ġprivate Ġval Ġend Of Line Markers Ġ= Ġset Of ('.', Ġ' !', Ġ'? ') ĊĠĠĠ Ġprivate Ġval Ġend Of Clause Markers Ġ= Ġset Of (',', Ġ'; ', Ġ': ') ĊĊĠĠĠ Ġfun Ġtokenize Text ( document Text : ĠString ): ĠText Model Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparagraphs Text Ġ= Ġsplit Into Paragraph s ( document Text ) ĊĠĠĠĠĠĠĠ Ġval Ġparagraphs Ġ= Ġparagraphs Text . map Ġ{ Ġtokenize Paragraph ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠText Model ( document Text , Ġparagraphs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtokenize Paragraph ( paragraph Text : ĠString ): ĠText Paragraph Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsplit Text Into Word Elements ( paragraph Text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsplit Text Into Word Elements ( paragraph Text : ĠString ): ĠText Paragraph Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġsplit Text Into Words ( paragraph Text ) ĊĠĠĠĠĠĠĠ Ġval Ġwords By Sentence Ġ= Ġmutable ListOf ( mutable ListOf < String >()) ĊĠĠĠĠĠĠĠ Ġwords . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords By Sentence . last (). add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Word Marks EndOf Sentence ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords By Sentence . add ( mutable ListOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsentence Models Ġ= Ġwords By Sentence . map NotNull Ġ{ Ġif Ġ( it . size Ġ> Ġ 0 ) Ġcreate Text Sentence ( it ) Ġelse Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠText Paragraph ( paragraph Text , Ġsentence Models ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Text Sentence ( words : ĠMutable List < String >): ĠText Sentence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġwords . join ToString (" Ġ") ĊĠĠĠĠĠĠĠ Ġreturn ĠText Sentence ( text , Ġwords . map Ġ{ ĠWord Element ( it , Ġ"", Ġit Ġ/* stem mer . stem Word ( it ) */, Ġ"") Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Word Marks EndOf Sentence ( it : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġit . length Ġ== Ġ 1 Ġ&& Ġend Of Line Markers . contains ( it . first ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsplit Text Into Words ( paragraph Text : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunits Ġ= Ġparagraph Text . split (""" (? U )\ s + """. to Regex ()) ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġunits . filter Ġ{ Ġit . isNotEmpty () Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Of Clause Markers . contains ( it . last ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords . add ( it . drop Last ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords . add ( it . last (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwords 2 Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġwords . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . endsWith (".") Ġ&& Ġis Abbre viation ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords 2 . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( end Of Line Markers . contains ( it . last ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords 2 . add ( it . drop Last ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords 2 . add ( it . last (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords 2 . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwords 3 Ġ= Ġwords 2 . map Ġ{ Ġit . trim () Ġ}. filter Ġ{ Ġit . isNotEmpty () Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġif Ġ( words 3 . size Ġ> Ġ 0 Ġ&& Ġ( words 3 . last (). length Ġ!= Ġ 1 Ġ|| Ġ! end Of Line Markers . contains ( words 3 . last ()[ 0 ]))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords 3 . add (".") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwords 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Abbre viation ( unit : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunit Without Period Ġ= Ġunit . substring Before Last (". "). toLowerCase () ĊĠĠĠĠĠĠĠ Ġreturn Ġabbre viations . contains ( unit Without Period ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSpl its Ġtext Ġinto Ġparagraphs Ġfor Ġthe Ġsimple Ġcase Ġof Ġend - of - line Ġmarkers Ġindicating ĊĠĠĠ Ġ// Ġa Ġparagraph Ġbreak . ĊĠĠĠ Ġprivate Ġfun Ġsplit Into Paragraph s ( text : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext . lines (). map Ġ{ Ġit . trim () Ġ}. filter Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠ Ġ} Ċ }