/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠGen omic Data S ci . org Ċ Ġ*/ Ċ Ċ package Ġorg . gen omic dat asci . covid pub med . model Ċ Ċ import Ġbi oc . Bio C Annotation Ċ import Ġbi oc . Bio CP ass age Ċ import Ġorg . gen omic dat asci . covid pub med . lib .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġf cr is cu o Ġon Ġ 2 0 2 1 Jul 2 9 Ċ Ġ*/ Ċ data Ġclass ĠPub Med Article ( ĊĠĠĠ Ġval Ġlabels : ĠList < String >, ĊĠĠĠ Ġval Ġpub med Id : ĠString , Ġval Ġp mc Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġdoi Id : ĠString Ġ= Ġ"", Ġval Ġarticle Title : ĠString , ĊĠĠĠ Ġvar Ġabstract : ĠString , ĊĠĠĠ Ġval Ġauthors : ĠList < Author >, ĊĠĠĠ Ġval Ġjournal : ĠJournal Issue , ĊĠĠĠ Ġval Ġannotations : ĠMap < Int , ĠL it Cov id Annotation >, ĊĠĠĠ Ġval Ġreferences : ĠList < Pub Med Reference > Ċ ) Ċ Ċ data Ġclass ĠPub Med Reference ( ĊĠĠĠ Ġval Ġlabels : ĠList < String >, ĊĠĠĠ Ġval Ġparent Pub Med Id : ĠString , ĊĠĠĠ Ġval Ġpub med Id : ĠString , ĊĠĠĠ Ġval Ġdoi Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġarticle Title : ĠString , ĊĠĠĠ Ġval Ġauthors : ĠList < Author >, ĊĠĠĠ Ġval Ġjournal : ĠJournal Issue , ĊĠĠĠ Ġval Ġannotations : ĠMap < Int , ĠL it Cov id Annotation >, Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠisValid () Ġ= Ġpub med Id . isNotEmpty () Ġ&& Ġparent Pub Med Id . isNotEmpty () ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠL it Cov id Model Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġarticle Ġdetails Ġprovided Ġin Ġa Ġreference Ġpassage Ġare Ġdifferent Ġfrom ĊĠĠĠĠĠĠĠ Ġ// Ġthose Ġprovided Ġin Ġa Ġtitle Ġ( i . e . Ġmain ) Ġpassage ĊĠĠĠĠĠĠĠ Ġfun Ġparse Bio C Refer n ce Pass age ( parent Pub med Id : ĠString , Ġpassage : ĠBio CP ass age ): ĠPub Med Reference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpub med Id Ġ= Ġresolve Reference Pub Med Id ( pass age ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoi Ġ= Ġresolve Reference Do i Id ( pass age ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġpassage . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġresolve Author List ( pub med Id , Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotations Ġ= Ġprocess Ref Annotations ( pub med Id , Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal Name Ġ= Ġresolve Pass age Inf on Value (" source ", Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġresolve Pass age Inf on Value (" year ", Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume Ġ= Ġresolve Pass age Inf on Value (" volume ", Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf page Ġ= Ġresolve Pass age Inf on Value (" f page ", Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl page Ġ= Ġresolve Pass age Inf on Value (" l page ", Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Ġ= Ġresolve Pass age Inf on Value (" issue ", Ġpassage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal Issue Ġ= ĠJournal Issue . parse Reference Journal Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Id , Ġdoi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Name , Ġyear , Ġvolume , Ġissue , Ġf page , Ġl page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPub Med Reference ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" Pub Med Article ", Ġ" Reference "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Pub med Id , Ġpub med Id , Ġdoi , Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors , Ġjournal Issue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprocess Ref Annotations ( pub med Id : ĠString , Ġpassage : ĠBio CP ass age ): ĠMap < Int , ĠL it Cov id Annotation > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Map Ġ= Ġmutable Map Of < Int , ĠL it Cov id Annotation >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassage . annotations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpub med Annotation Ġ= ĠL it Cov id Annotation . parse Bio C Annotation ( pub med Id , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! annotation Map . contains ( pub med Annotation . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Map [ pub med Annotation . id ] Ġ= Ġpub med Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġannotation Map . toMap () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠL it Cov id Annotation ( ĊĠĠĠ Ġval Ġlabels : ĠList < String >, ĊĠĠĠ Ġval Ġpub med Id : ĠString , ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠ Ġval Ġidentifier : ĠString , ĊĠĠĠ Ġval Ġtext : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠisValid (): ĠBoolean Ġ= Ġ( type . isNotEmpty () Ġ&& Ġidentifier . isNotEmpty ()) ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠL it Cov id Model Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Bio C Annotation ( pub med Id : ĠString , Ġbi oc Ann : ĠBio C Annotation ): ĠL it Cov id Annotation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidentifier Ġ= Ġ Ġwhen Ġ( bi oc Ann . inf ons . keys . contains (" identifier ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġbi oc Ann . inf ons . get OrDefault (" identifier ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġbi oc Ann . inf ons . get OrDefault (" Identifier ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġbi oc Ann . inf ons . get OrDefault (" type ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbi oc Ann . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( identifier Ġ+ Ġtype ). hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠL it Cov id Annotation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Id , Ġid , Ġtype , Ġidentifier , Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠJournal Issue ( ĊĠĠĠ Ġval Ġlabels : ĠList < String >, ĊĠĠĠ Ġval Ġpub med Id : ĠString , ĊĠĠĠ Ġval Ġdoi Id : ĠString , ĊĠĠĠ Ġval Ġjournal Name : ĠString , ĊĠĠĠ Ġval Ġjournal Issue : ĠString , ĊĠĠĠ Ġval Ġid : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠisValid (): ĠBoolean Ġ= Ġpub med Id . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Name . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Id . isNotEmpty () ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠL it Cov id Model Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Reference Journal Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Id : ĠString Ġ= Ġ" Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Year : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Volume : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Issue : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf page : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl page : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠJournal Issue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġissue Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( journal Year . isNotEmpty ()) Ġissue Ġ= Ġ"$ issue ($ journal Year )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( journal Volume . isNotEmpty ()) Ġissue Ġ= Ġ" Ġ$ issue Ġ$ journal Volume " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( journal Issue . isNotEmpty ()) Ġissue Ġ= Ġ" Ġ$ issue Ġ$ journal Issue " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f page . isNotEmpty ()) Ġissue Ġ= Ġ" Ġ$ issue Ġpg :$ f page -$ l page " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( journal Name Ġ+ ĠJournal Issue ). hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal Name Label Ġ= Ġjournal Name . filter Ġ{ it . is Letter Or Digit () Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJournal Issue ( listOf (" Journal Issue ", Ġjournal Name Label ), Ġpub med Id , Ġdoi Id , Ġjournal Name , Ġissue , Ġid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Journal String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Id : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Text : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠJournal Issue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġjournal Text . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġparse String On Sem i Colon ( journal Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtokens [ 0 ]. filter Ġ{ Ġit . is Letter Or Digit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= Ġwhen Ġ( name . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠlistOf ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tokens . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub list Ġ= Ġtokens . sub List ( 1 , Ġtokens . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Ġ= Ġsub list . join ToString (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJournal Issue ( labels , Ġpub med Id , Ġdoi Id , Ġname , Ġissue , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJournal Issue ( labels , Ġpub med Id , Ġdoi Id , Ġname , Ġ"", Ġid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠAuthor ( ĊĠĠĠ Ġval Ġlabels : ĠList < String >, ĊĠĠĠ Ġval Ġpub med Id : ĠString , ĊĠĠĠ Ġval Ġs urname : ĠString , ĊĠĠĠ Ġval Ġgiven Name : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġid : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġ/* ĊĠĠĠ Ġsample ĠAuthor ĠBio C Ġentry : Ġ< inf on Ġkey =" name _ 1 "> surname : Y am am oto ; given - names : Sh iger u </ inf on > ĊĠĠĠ Ġval Ġjournal Name Label Ġ= Ġjournal Name . filter Ġ{ it . is Letter Or Digit () Ġ Ġ} ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠisValid () Ġ= Ġs urname . isNotBlank () ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠL it Cov id Model Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Author String ( pub med Id : ĠString , Ġauthor Text : ĠString ): ĠAuthor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsn Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgn Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse String On Sem i Colon ( author Text ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġparse String On Colon ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name [ 0 ] Ġ== Ġ" surname ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn Ġ= Ġname [ 1 ]. filter Ġ{ Ġit . is Letter Or Digit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgn Ġ= Ġname [ 1 ]. filter Ġ{ it . is Letter Or Digit () Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAuthor ( listOf ( sn ), Ġpub med Id , Ġsn , Ġgn , Ġauthor Text . hashCode ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ