package Ġorg . jetbrains . bio . pub trend s . pm Ċ Ċ import Ġorg . jetbrains . bio . pub trend s . db . Abstract DB Writer Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . util . zip . GZIP InputStream Ċ import Ġjavax . xml . namespace . QName Ċ import Ġjavax . xml . stream . X MLE vent Reader Ċ import Ġjavax . xml . stream . XML Input Factory Ċ import Ġjavax . xml . stream . XML Stream Exception ĊĊ Ċ class ĠPub med XML Parser ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Writer : ĠAbstract DB Writer < Pub med Article >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbatch Size : ĠInt Ġ= Ġ 0 Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLoggerFactory . getLogger ( Pub med XML Parser :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠArticle Ġtag ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠA RT IC LE _ TAG Ġ= Ġ" Pub med Article Set / Pub med Article " ĊĊĠĠĠĠĠĠĠ Ġ// ĠSub - article Ġtags ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMED LINE _ C IT ATION _ TAG Ġ= Ġ" Pub med Article Set / Pub med Article / Med line C itation " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP UB MED _ DATA _ TAG Ġ= Ġ" Pub med Article Set / Pub med Article / Pub med Data " ĊĊĠĠĠĠĠĠĠ Ġ// ĠTags Ġthat Ġactually Ġcontain Ġdata ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPM ID _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / PM ID " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDE LETED _ PM ID _ TAG Ġ= Ġ" Pub med Article Set / Delete C itation / PM ID " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠYEAR _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Journal / Journal Issue / Pub Date / Year " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMON TH _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Journal / Journal Issue / Pub Date / Month " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDAY _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Journal / Journal Issue / Pub Date / Day " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMED LINE _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Journal / Journal Issue / Pub Date / Med line Date " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPUBLIC ATION _ TYPE _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Publication TypeList / Publication Type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTITLE _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Article Title " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAB STR ACT _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Abstract / Abstract Text " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOTHER _ AB STR ACT _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Other Abstract / Abstract Text " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAUTHOR _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Author List / Author " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAUTHOR _ LAST NAME _ TAG Ġ= Ġ"$ AUTHOR _ TAG / LastName " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAUTHOR _ INITIAL S _ TAG Ġ= Ġ"$ AUTHOR _ TAG / Initial s " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAUTHOR _ AFF ILI ATION _ TAG Ġ= Ġ"$ AUTHOR _ TAG / Aff iliation Info / Aff iliation " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠC IT ATION _ PM ID _ TAG Ġ= Ġ"$ PUB MED _ DATA _ TAG / Reference List / Reference / Article IdList / Article Id " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY WORD _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Keyword List / Keyword " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM ESH _ HEAD ING _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Mesh Heading List / Mesh Heading " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM ESH _ DESCRIPTOR _ TAG Ġ= Ġ"$ MESH _ HEAD ING _ TAG / Descriptor Name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM ESH _ QUAL IFIER _ TAG Ġ= Ġ"$ MESH _ HEAD ING _ TAG / Qualifier Name " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDAT AB ANK _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Data Bank List / Data Bank " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDAT AB ANK _ NAME _ TAG Ġ= Ġ"$ DAT AB ANK _ TAG / Data Bank Name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACCESS ION _ NUMBER _ TAG Ġ= Ġ"$ DAT AB ANK _ TAG / Access ion Number List / Access ion Number " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDO I _ TAG Ġ= Ġ"$ PUB MED _ DATA _ TAG / Article IdList / Article Id " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLANGUAGE _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Language " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠJ O URN AL _ TITLE _ TAG Ġ= Ġ"$ ME DL INE _ C IT ATION _ TAG / Article / Journal / Title " ĊĊĠĠĠĠĠĠĠ Ġ// ĠMonth Ġmapping ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCAL END AR _ MONTH Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Jan " Ġto Ġ 1 , Ġ" Feb " Ġto Ġ 2 , Ġ" Mar " Ġto Ġ 3 , Ġ" Apr " Ġto Ġ 4 , Ġ" May " Ġto Ġ 5 , Ġ" Jun " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Jul " Ġto Ġ 7 , Ġ" Aug " Ġto Ġ 8 , Ġ" Sep " Ġto Ġ 9 , Ġ" Oct " Ġto Ġ 1 0 , Ġ" Nov " Ġto Ġ 1 1 , Ġ" Dec " Ġto Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠNON _ BASIC _ LAT IN _ REGEX Ġ= Ġ"\\ P { In Basic _ Latin }". to Regex () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfactory Ġ= ĠXML Input Factory . new Factory () !! ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfactory . setProperty ( XML Input Factory . SUPPORT _ DTD , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠContainer Ġfor Ġparsed Ġarticles ĊĠĠĠ Ġprivate Ġvar Ġarticles Stored Ġ= Ġ 0 ĊĠĠĠ Ġinternal Ġval Ġarticle List Ġ= Ġmutable ListOf < Pub med Article >() ĊĠĠĠ Ġinternal Ġval Ġdeleted Article PM ID List Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠ Ġ// ĠStats Ġabout ĠXML Ġtags ĊĠĠĠ Ġval Ġtags Ġ= ĠHashMap < String , ĠInt >() ĊĊĠĠĠ Ġfun Ġparse ( name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" File Ġlocation : Ġ${ file . absolute Path }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` in ` Ġ= Ġif Ġ( name . endsWith (". gz ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG ZIP InputStream ( Buffered InputStream ( FileInputStream ( file ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ// Ġfor Ġtests ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuffered InputStream ( FileInputStream ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` in `. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Data ( factory . create X MLE vent Reader ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠXML Stream Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" Failed Ġto Ġparse Ġ$ name ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Data ( event Reader : ĠX MLE vent Reader ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠStats Ġabout Ġarticles Ġ& Ġtags ĊĠĠĠĠĠĠĠ Ġvar Ġarticle Counter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġkeyword Counter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġc itation Counter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġarticles Stored Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠCont ainers Ġfor Ġdata Ġabout Ġcurrent Ġarticle ĊĠĠĠĠĠĠĠ Ġvar Ġp mid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġyear : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġabstract Text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġmutable ListOf < Author >() ĊĠĠĠĠĠĠĠ Ġvar Ġauthor Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġauthor Aff ili ations Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġdatab anks Ġ= Ġmutable ListOf < D atab ank Entry >() ĊĠĠĠĠĠĠĠ Ġvar Ġdatab ank Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġdatab ank Access ion Numbers Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġkeyword List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġc itation List Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġmesh Heading List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Mesh Heading Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġvar Ġjournal Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġlanguage Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġdoi Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġtype Ġ= ĠPublic ation Type . Article ĊĊĠĠĠĠĠĠĠ Ġ// ĠA ux iliary Ġvariables Ġfor Ġparsing ĊĠĠĠĠĠĠĠ Ġvar ĠfullName Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġis Abstract Structured Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Article Title Parsed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Abstract Text Parsed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis C itation PM ID Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis DO IF ound Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġafter Ġpreviously Ġprocessed Ġfiles ĊĠĠĠĠĠĠĠ Ġarticle List . clear () ĊĠĠĠĠĠĠĠ Ġdeleted Article PM ID List . clear () ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( event Reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml Event Ġ= Ġevent Reader . next Event () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ< Start Of The Tag > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Event . is Start Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Element Ġ= Ġxml Event . as Start Element () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġfull Ġname Ġof Ġthe Ġtag Ġ-- Ġnew Ġtag Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Name Ġ= Ġstart Element . name . local Part ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġif Ġ( fullName . isEmpty ()) Ġlocal Name Ġelse Ġ"$ fullName /$ local Name " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġstart Ġelements ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( fullName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA RT IC LE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" New Ġarticle Ġstart ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Abstract Structured Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Article Title Parsed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Abstract Text Parsed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis C itation PM ID Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis DO IF ound Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp mid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Aff ili ations . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab anks . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Access ion Numbers . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc itation List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmesh Heading List . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠPublic ation Type . Article ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAUTHOR _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Aff ili ations . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAB STR ACT _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Element . attributes . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Abstract Structured Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Abstract Text Parsed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC itations Ġ( PM ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC IT ATION _ PM ID _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Element . getAttribute ByName ( QName (" IdType ")). value Ġ== Ġ" pub med ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis C itation PM ID Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD atab anks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDAT AB ANK _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Access ion Numbers . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDO I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDO I _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Element . getAttribute ByName ( QName (" IdType ")). value Ġ== Ġ" doi ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis DO IF ound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMe SH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ESH _ HEAD ING _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Mesh Heading Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags [ fullName ] Ġ= Ġ( tags [ fullName ] Ġ?: Ġ 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Event . is Characters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Element Ġ= Ġxml Event . as Characters () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġthe Ġcontents Ġof Ġthe ĠPub med Article Ġclass Ġwith Ġuseful Ġinformation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPM ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠPM ID _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp mid Ġ= Ġdata Element . data . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPM IDs Ġof Ġdeleted Ġarticles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠDE LETED _ PM ID _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Article PM ID List . add ( data Element . data . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYear Ġof Ġpublication , Ġignore ĠMON TH _ TAG Ġand ĠDAY _ TAG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠYEAR _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġdata Element . data . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠMED LINE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Regex Ġ= Ġ"( 1 \\ d | 2 0 )\\ d { 2 }". to Regex () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Match Ġ= Ġyear Regex . find ( data Element . data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( year Match Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear Match . value . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġparse Ġyear Ġfrom ĠMED LINE Ġdate Ġin Ġarticle Ġ$ pm id : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Article Title Parsed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ+= Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠTITLE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Article Title Parsed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAbstract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Abstract Text Parsed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Text Ġ+= Ġif Ġ( fullName Ġ== ĠAB STR ACT _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġdata Element . data . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠOTHER _ AB STR ACT _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Text Ġ+= Ġ" Ġ${ data Element . data }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKey words ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠKEY WORD _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword List . add ( data Element . data . trim (). replace (", Ġ", Ġ" Ġ"). replace ('/', Ġ' Ġ')) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC itations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fullName Ġ== ĠC IT ATION _ PM ID _ TAG ) Ġ&& Ġ( is C itation PM ID Found ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWork around Ġfor Ġftp :// ftp . ncbi . nlm . nih . gov / pub med / update files / pub med 2 0 n 1 0 3 7 . xml . gz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSee Ġhttps :// github . com / Jet Brains - Research / pub trend s / issues / 2 0 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc itation List . add ( data Element . data . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis C itation PM ID Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" Failed Ġto Ġprocess Ġ$ C IT ATION _ PM ID _ TAG : Ġ${ data Element . data }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD atab anks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠDAT AB ANK _ NAME _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Name Ġ= Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠACCESS ION _ NUMBER _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Access ion Numbers . add ( data Element . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMe SH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠM ESH _ DESCRIPTOR _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġdata Element . data . replace (", Ġ", Ġ" Ġ"). replace ("[ /& ]+ ", Ġ" Ġ"). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Mesh Heading Ġ= Ġdescriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug ("$ pm id : ĠMe SH ĠDescriptor Ġ<$ descriptor > Ġ<$ current Mesh Heading >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠM ESH _ QUAL IFIER _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġdata Element . data . replace (", Ġ", Ġ" Ġ"). replace ("[ /& ]+ ", Ġ" Ġ"). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Mesh Heading Ġ+= Ġ" Ġ$ qual ifier " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug ("$ pm id : ĠMe SH ĠQual ifier Ġ<$ qual ifier > Ġ<$ current Mesh Heading >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAuthors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠAUTHOR _ LAST NAME _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠAUTHOR _ INITIAL S _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ+= Ġ" Ġ${ data Element . data }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠAUTHOR _ AFF ILI ATION _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Aff ili ations . add ( data Element . data . trim (' Ġ', Ġ'. '). replace ( NON _ BASIC _ LAT IN _ REGEX , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOther Ġinformation Ġ- Ġjournal Ġtitle , Ġlanguage , ĠDO I , Ġpublication Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠJ O URN AL _ TITLE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjournal Name Ġ= Ġdata Element . data . replace ( NON _ BASIC _ LAT IN _ REGEX , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠLANGUAGE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġdata Element . data . replace ( NON _ BASIC _ LAT IN _ REGEX , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fullName Ġ== ĠDO I _ TAG ) Ġ&& Ġ( is DO IF ound ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Ġ= Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis DO IF ound Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ== ĠPUBLIC ATION _ TYPE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublication Type Ġ= Ġdata Element . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Type . contains (" Technical ĠReport ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠPublic ation Type . Technical Report ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Type . contains (" Clin ical ĠT rial ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠPublic ation Type . Clin ical Trial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Type Ġ== Ġ" Dataset " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠPublic ation Type . Dataset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Type Ġ== Ġ" Review " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠPublic ation Type . Review ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ</ EndOf The Tag > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Event . is End Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Element Ġ= Ġxml Event . as End Element () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Name Ġ= Ġend Element . name . local Part ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( fullName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġarticle Ġto Ġthe Ġlist Ġand Ġstore Ġif Ġneeded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA RT IC LE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Counter ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc itation Counter Ġ+= Ġc itation List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Counter Ġ+= Ġkeyword List . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Text Ġ= Ġabstract Text . trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpub med Article Ġ= ĠPub med Article ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp mid Ġ= Ġp mid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear Ġ?: Ġ 1 9 7 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle . replace ( NON _ BASIC _ LAT IN _ REGEX , Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Ġ= Ġabstract Text . replace ( NON _ BASIC _ LAT IN _ REGEX , Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeywords Ġ= Ġkeyword List . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcit ations Ġ= Ġc itation List . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmesh Ġ= Ġmesh Heading List . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Ġ= Ġdoi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaux Ġ= ĠA ux Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors . toList (), Ġdatab anks . toList (), ĠJournal ( journal Name ), Ġlanguage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" Found Ġnew Ġarticle : Ġ$ pub med Article ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle List . add ( pub med Article ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġauthor Ġto Ġthe Ġlist Ġof Ġauthors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAUTHOR _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name . replace ( NON _ BASIC _ LAT IN _ REGEX , Ġ""), Ġauthor Aff ili ations . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFix Ġtitle Ġ& Ġabstract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAB STR ACT _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Abstract Structured ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Text Ġ+= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Abstract Text Parsed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD atab anks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDAT AB ANK _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab anks . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD atab ank Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatab ank Name , Ġdatab ank Access ion Numbers . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTITLE _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle . trim ('[ ', Ġ' ]', Ġ'.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Article Title Parsed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMe SH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ESH _ HEAD ING _ TAG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmesh Heading List . add ( current Mesh Heading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġfull Ġname Ġof Ġthe Ġtag Ġ-- Ġtag Ġclosed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( local Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= ĠfullName . remove Suffix ("/ $ local Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStore Ġarticles Ġif Ġreached Ġpreferred Ġsize Ġof Ġthe Ġbatch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( batch Size Ġ> Ġ 0 ) Ġ&& Ġ( article List . size Ġ== Ġbatch Size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore Articles () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠStore Ġfinal Ġbatch Ġof Ġarticles Ġif Ġnot Ġempty ĊĠĠĠĠĠĠĠ Ġif Ġ( article List . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Articles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġarticles Ġif Ġneeded ĊĠĠĠĠĠĠĠ Ġif Ġ( deleted Article PM ID List . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info (" Deleting Ġ${ deleted Article PM ID List . size } Ġarticles ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Writer . delete ( deleted Article PM ID List . map Ġ{ Ġit . toString () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLOG . info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Articles Ġfound : Ġ$ article Counter , Ġdeleted : Ġ${ deleted Article PM ID List . size }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" keywords : Ġ$ keyword Counter , Ġcit ations : Ġ$ citation Counter " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstore Articles () Ġ{ ĊĠĠĠĠĠĠĠ ĠLOG . info (" St oring Ġarticles Ġ${ articles Stored Ġ+ Ġ 1 }-${ articles Stored Ġ+ Ġarticle List . size } ...") ĊĊĠĠĠĠĠĠĠ Ġdb Writer . store ( article List ) ĊĠĠĠĠĠĠĠ Ġarticles Stored Ġ+= Ġarticle List . size ĊĠĠĠ Ġ} Ċ }