/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠN athan iel ĠRel ine Ċ Ġ* Ċ Ġ* ĠThis Ġwork Ġis Ġlicensed Ġunder Ġthe ĠCreative ĠCommons ĠAt tribution - Share Ali ke Ġ 4 . 0 ĠInternational ĠLicense . Ċ Ġ* ĠTo Ġview Ġa Ġcopy Ġof Ġthis Ġlicense , Ġvisit Ġhttp :// creativecommons . org / licenses / by - sa / 4 . 0 / Ġor Ċ Ġ* Ġsend Ġa Ġletter Ġto ĠCreative ĠCommons , ĠPO ĠBox Ġ 1 8 6 6 , ĠMountain ĠView , ĠCA Ġ 9 4 0 4 2 , ĠUSA . Ċ Ġ*/ Ċ Ċ package Ġcom . github . re line . j ish o Ċ Ċ import Ġcom . github . re line . j ish o . dict models . j md ict . Dictionary Ċ import Ġcom . github . re line . j ish o . dict models . j md ict . Entry Ċ import Ġcom . github . re line . j ish o . sql . J ish o Database Ċ import Ġcom . tick ar oo . tik xml . T ik Xml Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġok io . Buffer Ċ import Ġjava . io . File Ċ Ċ class ĠDictionary Pop ulator ( private Ġval Ġdatabase : ĠJ ish o Database , Ġprivate Ġval Ġok ur ig ana Pop ulator : ĠOk ur ig ana Pop ulator ) Ġ{ ĊĊĠĠĠ Ġfun Ġrun () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Extract ing Ġdictionaries ...") ĊĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( File ("$ build Dir / dict / JM dict _ e . xml "), ĠFile ("$ build Dir / dict / J md ict F ur ig ana . json ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( File ("$ build Dir / dict / JM ned ict . xml "), ĠFile ("$ build Dir / dict / J mn ed ict F ur ig ana . json ")) ĊĠĠĠĠĠĠĠ Ġ). forEach Ġ{ Ġ( dict , Ġf ur ig ana ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdictionary Ġ= Ġextract Dictionary ( dict ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Inser ting Ġ${ dict . name } Ġto Ġdatabase ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Dictionary ( dictionary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("${ dict . name }: ĠInser ting Ġ${ dictionary . entries . size } Ġentries Ġtook Ġ${ ( end Ġ- Ġstart )} ms ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Extract ing Ġok ur ig ana ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġok ur ig ana Ġ= Ġok ur ig ana Pop ulator . extract Ok ur ig ana ( f ur ig ana ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Inser ting Ġok ur ig ana ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok ur ig ana Pop ulator . insert Ok ur ig ana ( dictionary , Ġok ur ig ana ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Dictionary ( file : ĠFile ): ĠDictionary Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġfile . inputStream () ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠBuffer (). read From ( inputStream ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparse Start Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġval Ġdictionary : ĠDictionary Ġ= ĠT ik Xml . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception On Un read Xml ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read ( source , ĠDictionary :: class . java ) ĊĠĠĠĠĠĠĠ Ġsource . clear () ĊĠĠĠĠĠĠĠ ĠinputStream . close () ĊĊĠĠĠĠĠĠĠ Ġval Ġparse End Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġlogger . info ("${ file . name }: ĠParsing Ġ${ dictionary . entries . size } Ġentries Ġtook Ġ${ ( parse End Ġ- Ġparse Start )} ms ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdictionary ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Entries ( entries : ĠList < Entry >) Ġ= Ġwith ( database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Inser ting ĠEnt ries ...") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Queries . insert ( entry . id , Ġentry . is Common (), Ġentry . kan ji ?. first OrNull ()?. value , Ġentry . read ings . first (). value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . kan ji ?. forEach Ġ{ Ġkan ji Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj apanese Queries . insert ( entry . id , Ġkan ji . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . read ings . forEach Ġ{ Ġreading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Queries . insert ( entry . id , Ġreading . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Parts Of Speech ( entries : ĠList < Entry >) Ġ= Ġwith ( database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Inser ting ĠPart s Ġof ĠSpeech ...") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . s enses . forEach Ġ{ Ġsense Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsense . parts Of Speech ?. forEach Ġ{ Ġpos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart Of Speech Queries . insert ( pos . decoded ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert S enses ( entries : ĠList < Entry >) Ġ= Ġwith ( database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġarray ListOf < Long >() ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Inser ting ĠS enses Ġand ĠG losses ...") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . s enses . forEach Ġ{ Ġsense Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsense Queries . insert ( entry . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsense Id Ġ= Ġutil Queries . last Insert Row Id (). execute As One () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsense . g losses ?. forEach Ġ{ Ġg loss Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg loss Queries . insert ( sense Id , Ġg loss . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( sense Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġiter Ġ= Ġlist . iterator () ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Ġ ĠS ense Pos Tag ") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . s enses . forEach Ġ{ Ġsense Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsense Id Ġ= Ġiter . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsense . parts Of Speech ?. forEach Ġ{ Ġpos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsense Pos Tag Queries . insert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsense Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart Of Speech Queries . select Pos Id Where Value Equals ( pos . decoded ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute As One () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Dictionary ( dictionary : ĠDictionary ) Ġ= Ġwith ( database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġdictionary . entries ĊĊĠĠĠĠĠĠĠ Ġinsert Entries ( entries ) ĊĠĠĠĠĠĠĠ Ġinsert Parts Of Speech ( entries ) ĊĠĠĠĠĠĠĠ Ġinsert S enses ( entries ) ĊĠĠĠ Ġ} Ċ }