package Ġindexing . pager ank Ċ Ċ import Ġrdf . Custom RDF Triple Ċ import Ġrdf . Types And Constants Ċ Ċ class ĠPage Rank Ġ{ ĊĠĠĠ Ġval Ġgraph Ġ= ĠGeneric Graph < String >() ĊĠĠĠ Ġprivate Ġvar Ġranks 1 Ġ= ĠHashMap < String , ĠDouble >() ĊĠĠĠ Ġprivate Ġvar Ġranks 2 Ġ= ĠHashMap < String , ĠDouble >() ĊĠĠĠ Ġprivate Ġval Ġalpha Ġ= Ġ 0 . 8 5 ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Graph ( triples : ĠCollection < Custom RDF Triple >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip les . forEach Ġ{ Ġtriple Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triple . subject Type Ġ== ĠTypes And Constants . Q Type Ġ&& Ġtriple . predicate Type Ġ== ĠTypes And Constants . RDF Direct Prop Prefix Ġ&& Ġtriple . object Type Ġ== ĠTypes And Constants . Q Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriple . objectId ?. let Ġ{ Ġobj Id Ġ-> Ġgraph . add Edge ( triple . subject Id , Ġobj Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnodes Count Ġ= Ġgraph . ad jacency . keys . size ĊĠĠĠĠĠĠĠ Ġval Ġinitial Val Ġ= Ġ 1 . 0 Ġ/ Ġnodes Count ĊĠĠĠĠĠĠĠ Ġgraph . ad jacency . keys . forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġranks 1 [ key ] Ġ= Ġinitial Val ĊĠĠĠĠĠĠĠĠĠĠĠ Ġranks 2 [ key ] Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġiterate Graph () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġno Link Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġgraph . ad jacency . keys . size ĊĠĠĠĠĠĠĠ Ġgraph . ad jacency . keys . forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . ad jacency [ key ]?. let Ġ{ Ġobj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Ġ= Ġranks 1 [ key ] !! Ġ* Ġalpha Ġ/ Ġobj . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobj . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġranks 2 [ item ] Ġ= Ġranks 2 [ item ] !! Ġ+ Ġshare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Link Ġ+= Ġranks 1 [ key ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshare No Link Ġ= Ġno Link Ġ* Ġalpha Ġ/ Ġcount ĊĠĠĠĠĠĠĠ Ġval Ġshare Minus D Ġ= Ġ( 1 . 0 Ġ- Ġalpha ) Ġ/ Ġcount ĊĠĠĠĠĠĠĠ Ġval Ġweak Ġ= Ġshare Minus D Ġ+ Ġshare No Link ĊĠĠĠĠĠĠĠ Ġranks 2 Ġ= Ġranks 2 . map Values Ġ{ Ġx Ġ-> Ġx . value Ġ+ Ġweak Ġ} Ġas ĠHashMap < String , ĠDouble > ĊĠĠĠĠĠĠĠ Ġranks 1 Ġ= Ġranks 1 . map Values Ġ{ Ġ 0 . 0 Ġ} Ġas ĠHashMap < String , ĠDouble > ĊĠĠĠĠĠĠĠ Ġranks 1 Ġ= Ġranks 2 . also Ġ{ Ġranks 2 Ġ= Ġranks 1 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute ( triples : ĠCollection < Custom RDF Triple >, Ġmax Iterations : ĠInt ): ĠHashMap < String , ĠDouble > Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Graph ( triples ) ĊĠĠĠĠĠĠĠ Ġrepeat ( max Iterations ) Ġ{ Ġiterate Graph () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġranks 1 ĊĠĠĠ Ġ} Ċ }