package Ġde . web is . web is stud . the sis . re imer . domain . stats Ċ Ċ import Ġde . web is . web is stud . the sis . re imer . corpus . url . urls Ċ import Ġde . web is . web is stud . the sis . re imer . data . data Dir Ċ import Ġde . web is . web is stud . the sis . re imer . groups . fingerprint Groups Ċ import Ġde . web is . web is stud . the sis . re imer . model . Cor pus Ċ import Ġde . web is . web is stud . the sis . re imer . model . J ud ged Document Ċ import Ġde . web is . web is stud . the sis . re imer . model . t rec Documents Ċ import Ġdev . re imer . domain . k tx . domain OrNull Ċ import Ġdev . re imer . kotlin . jvm . k tx .* Ċ import Ġdev . re imer . serialization . json l . Json L Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġjava . io . File Ċ import Ġkotlin . system . exit Process Ċ Ċ fun Ġmain ( var arg Ġargs : ĠString ) Ġ{ Ċ ĉ val Ġcorpus Ġ= ĠCor pus . valueOf Case Ins ensitive ( args [ 0 ]) Ċ ĉ val Ġonly Duplicates Ġ= Ġargs . get OrNull ( 1 ) Ġin ĠarrayOf ("-- red undant ", Ġ"- r ") Ċ ĉ val Ġstats Ġ= Ġcorpus . domain Stats ( only Duplicates ) Ċ ĉ val Ġdata Dir Ġ= Ġcorpus . data Dir Ċ ĉ val ĠfileName Suffix Ġ= Ġif Ġ( only Duplicates ) Ġ"- red undant " Ġelse Ġ"" Ċ ĉ stats . save Json L ( data Dir . resolve (" domain - stats $ fileName Suffix . json l ")) Ċ ĉ stats . save Lat ex Table ( data Dir . resolve (" domain - stats $ fileName Suffix . tex "), Ġ 1 0 0 ) Ċ ĉ stats . save Domain Lat ex Table ( data Dir . resolve (" wikipedia - stats $ fileName Suffix . tex "), Ġ" wikipedia . org ") Ċ ĉ stats . print Domain Port ion (" wikipedia . org ") Ċ ĉ stats . print Global Re levance Degree () Ċ ĉ exit Process ( 0 ) Ċ } Ċ Ċ private Ġval ĠJSON _ L Ġ= ĠJson L () Ċ Ċ fun ĠCor pus . domain Stats ( only Duplicates : ĠBoolean ): ĠList < Domain Stats > Ġ{ Ċ ĉ return Ġwhen Ġ{ Ċĉ ĉ only Duplicates Ġ-> Ġ{ Ċĉĉ ĉ val Ġduplicate Ids Ġ= Ġfingerprint Groups Ċĉĉĉĉ ĉ . groups Ċĉĉĉĉ ĉ . flatMap Ġ{ Ġit . ids Ġ} Ċĉĉĉĉ ĉ . distinct () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Stats Ġ{ Ġit . id Ġin Ġduplicate Ids Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdomain Stats () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCor pus . domain Stats ( predicate : Ġ( J ud ged Document ) Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ}): ĠList < Domain Stats > Ġ{ Ċ ĉ val Ġurls Ġ= Ġurls ĊĊ ĉ val Ġdocuments Ġ= Ġt rec Documents Ċĉĉ ĉ . filter ( predicate ) Ċĉĉ ĉ . map Ġ{ Ġit Ġto Ġit . id Ġ} Ċĉĉ ĉ . toMap () Ċĉĉ ĉ . inverse () Ċ ĉ val Ġids Ġ= Ġdocuments . keys ĊĊ ĉ val Ġdomain Id Ġ= Ġids . map Ġ{ Ġit Ġto Ġurls [ it ]?. domain OrNull ?. root Ġ} Ċĉĉ ĉ . toMap () Ċĉĉ ĉ . filter Value NotNull () Ċĉĉ ĉ . inverse () Ċ ĉ val Ġdomain Re levance Ġ= Ġdomain Id Ċĉĉ ĉ . map Values Ġ{ Ġ(_, Ġids ) Ġ-> Ċĉĉĉ ĉ val Ġjudge ments Ġ= Ġids Ċĉĉĉĉĉ ĉ . flatMap ToMap Ġ{ Ġid Ġ-> Ċĉĉĉĉĉĉ ĉ documents . getValue ( id ). map ToMap Ġ{ Ġit . topic Ġto Ġit . judge ment Ġ} Ċĉĉĉĉĉ ĉ } Ċĉĉĉ ĉ print (".") Ċĉĉĉ ĉ judge ments Ċĉĉ ĉ } Ċ ĉ println () ĊĊ ĉ val Ġdomains Ġ= Ġdomain Id . keys ĊĊ ĉ return Ġdomains . map Ġ{ Ġdomain Ġ-> Ċĉ ĉ Domain Stats ( Ċĉĉĉ ĉ domain , Ċĉĉĉ ĉ domain Re levance . getValue ( domain ) Ċĉĉĉĉĉ ĉ . map Ġ{ Ġ( topic , Ġjudge ments ) Ġ-> Ċĉĉĉĉĉĉ ĉ Domain Stats . Re levance ( topic . task . id , Ġtopic . id . toInt (), Ġjudge ments ) Ċĉĉĉĉĉ ĉ } Ċĉ ĉ ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCollection < Domain Stats >. save Lat ex Table ( file : ĠFile , Ġn : ĠInt Ġ= Ġsize ) Ġ{ ĊĠĠĠ Ġfile . prepare New File () ĊĠĠĠ Ġas Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Descending Ġ{ Ġit . documents Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġstats Ġ-> ĊĉĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ${ stats . domain } Ġ& ĠTODO Ġ& Ġ${ stats . relevant Documents } Ġ& Ġ${ stats . ir relevant Documents } Ġ& Ġ${ stats . documents } Ġ& Ġ${ "% . 2 f ". format ( stats . re levance Degree Ġ* Ġ 1 0 0 )}\ ,\ % Ġ\\ """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" \ begin { tabular }{ @ {} l rr rr @{ }} """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ to pr ule """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ textbf { Domain } Ġ& Ġ\ textbf { Tag } Ġ& Ġ\ textbf { Rel .} Ġ& Ġ\ textbf { Ir rel .} Ġ& Ġ\ textbf { Count } Ġ& Ġ\ textbf {\ % ~ Rel .} Ġ\\ """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ mid rule """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ bottom rule """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" \ end { tabular } """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Lines To ( file ) Ċ } Ċ Ċ fun ĠCollection < Domain Stats >. print Global Re levance Degree () Ġ{ ĊĠĠĠ Ġvar Ġglobal Documents Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġrelevant Documents Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( stats Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġglobal Documents Ġ+= Ġstats . documents ĊĠĠĠĠĠĠĠ Ġrelevant Documents Ġ+= Ġstats . relevant Documents ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġportion Percent Ġ= Ġ 1 0 0 . 0 Ġ* Ġrelevant Documents Ġ/ Ġglobal Documents ĊĠĠĠ Ġprintln (" Re levant Ġdocuments Ġmake Ġup Ġfor Ġ$ relevant Documents Ġof Ġ$ global Documents Ġdocuments Ġ(${ "% . 2 f ". format ( portion Percent )} % ). ") Ċ } Ċ Ċ fun ĠCollection < Domain Stats >. print Domain Port ion ( domain : ĠString ) Ġ{ ĊĠĠĠ Ġvar Ġglobal Documents Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġdomain Documents Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( stats Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġglobal Documents Ġ+= Ġstats . documents ĊĠĠĠĠĠĠĠ Ġif Ġ( stats . domain Ġ== Ġdomain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Documents Ġ+= Ġstats . documents ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġportion Percent Ġ= Ġ 1 0 0 . 0 Ġ* Ġdomain Documents Ġ/ Ġglobal Documents ĊĠĠĠ Ġprintln (" Domain Ġ'$ domain ' Ġmakes Ġup Ġfor Ġ$ domain Documents Ġof Ġ$ global Documents Ġdocuments Ġ(${ "% . 2 f ". format ( portion Percent )} % ). ") Ċ } Ċ Ċ fun ĠCollection < Domain Stats >. save Domain Lat ex Table ( file : ĠFile , Ġdomain : ĠString ) Ġ{ ĊĠĠĠ Ġfile . prepare New File () ĊĠĠĠ Ġas Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . domain Ġ== Ġdomain Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . re levance . as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . topic Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( topic , Ġre levance ) Ġ-> ĊĉĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Ġto ĠDomain Stats ( Ċĉĉĉ ĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Ġ= Ġdomain , Ċĉĉĉ ĠĠĠĠĠĠĠĠĠĠĠ Ġre levance Ġ= Ġre levance ĊĉĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Descending Ġ{ Ġ(_, Ġstats ) Ġ-> Ġstats . documents Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( topic , Ġstats ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ$ topic Ġ& Ġ${ "% . 2 f ". format ( stats . re levance Degree )}\ % Ġ& Ġ${ stats . documents } Ġ\\ """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" \ begin { tabular }{ @ {} l rr @{ }} """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ to pr ule """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ textbf { Topic } Ġ& Ġ\ textbf {\ % ~ Rel .\ ĠDoc .} Ġ& Ġ\ textbf {\ # ~ Doc .} Ġ\\ """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ mid rule """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĠĠĠ Ġ\ bottom rule """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" \ end { tabular } """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Lines To ( file ) Ċ } Ċ Ċ fun ĠIterable < Domain Stats >. save Json L ( file : ĠFile ) Ġ{ ĊĠĠĠ Ġfile . prepare New File () ĊĠĠĠ Ġval Ġstats Ġ= Ġsorted By Descending Ġ{ Ġit . documents Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠ ĠJSON _ L . stringify ( Domain Stats . serializer (), Ġstats ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Lines To ( file ) Ċ } Ċ Ċ @ Serializable Ċ data Ġclass ĠDomain Stats ( ĊĠĠĠĠĠĠĠ Ġval Ġdomain : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġre levance : ĠList < Re levance > Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġjudge ments Ġget () Ġ= Ġre levance . flatMap Ġ{ Ġit . judge ments Ġ} ĊĊĠĠĠ Ġval Ġdocuments Ġget () Ġ= Ġjudge ments . count () ĊĊĠĠĠ Ġval Ġrelevant Documents Ġget () Ġ= Ġjudge ments . count Ġ{ Ġit Ġ> Ġ 0 Ġ} ĊĊĠĠĠ Ġval Ġir relevant Documents Ġget () Ġ= Ġjudge ments . count Ġ{ Ġit Ġ<= Ġ 0 Ġ} ĊĊĠĠĠ Ġval Ġre levance Degree : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjudge ments Ġ= Ġjudge ments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjudge ments . count Ġ{ Ġit Ġ> Ġ 0 Ġ} Ġ/ Ġjudge ments . size . toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠRe levance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtaskId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtopic Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjudge ments : ĠList < Int > ĊĠĠĠ Ġ) Ċ }