From b5130583e59408ff3dfdb9a14942732a2c8a75a3 Mon Sep 17 00:00:00 2001 From: Miriam Baglioni Date: Mon, 5 Aug 2024 17:08:52 +0200 Subject: [PATCH] [Annotation] extention of bulk tagging to accomodate graph annotation --- .../eu/dnetlib/pace/tree/CountryMatch.java | 55 ++++---- .../dhp/actionmanager/sdgnodoi/job.properties | 2 + .../person/Authors/part-00000.snappy.parquet | Bin 0 -> 77956 bytes .../Employments/part-00000.snappy.parquet | Bin 0 -> 9246 bytes .../person/EmploymentsJson/part-00000 | 100 ++++++++++++++ .../person/Works/part-00001.snappy.parquet | Bin 0 -> 3208 bytes .../webcrawl/actionSet/part-00003 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00010 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00042 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00066 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00087 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00126 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00154 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00160 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00163 | Bin 0 -> 3324 bytes .../webcrawl/actionSet/part-00179 | Bin 0 -> 1691 bytes .../webcrawl/actionSet/part-00196 | Bin 0 -> 1691 bytes .../webcrawl/blackList/not_irish.json | 1 + .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 34 ++--- .../java/eu/dnetlib/dhp/bulktag/Tagging.java | 44 +++--- .../dhp/bulktag/community/ResultTagger.java | 42 ++++-- .../bulktag/community/TaggingConstants.java | 4 + .../bulktag/community/TaggingConstraint.java | 14 ++ .../bulktag/community/TaggingConstraints.java | 16 +++ .../wf/subworkflows/bulktag/job.properties | 4 + .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 126 +++++++++--------- .../model/ProvisionModelSupport.java | 20 ++- .../oa/provision/SolrConfigExploreTest.java | 56 ++++---- .../dhp/oa/provision/SolrConfigTest.java | 3 +- 29 files changed, 340 insertions(+), 181 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/sdgnodoi/job.properties create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Authors/part-00000.snappy.parquet create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Employments/part-00000.snappy.parquet create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/EmploymentsJson/part-00000 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Works/part-00001.snappy.parquet create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00003 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00010 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00042 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00066 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00087 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00126 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00154 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00160 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00163 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00179 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00196 create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/blackList/not_irish.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraint.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraints.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/job.properties diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CountryMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CountryMatch.java index 9cf616356..c02381983 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CountryMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CountryMatch.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree; import java.util.Map; @@ -11,37 +12,37 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("countryMatch") public class CountryMatch extends AbstractStringComparator { - public CountryMatch(Map params) { - super(params, new com.wcohen.ss.JaroWinkler()); - } + public CountryMatch(Map params) { + super(params, new com.wcohen.ss.JaroWinkler()); + } - public CountryMatch(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } + public CountryMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } - protected CountryMatch(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } + protected CountryMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } - @Override - public double distance(final String a, final String b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) { - return -1.0; // return -1 if a field is missing - } - if (a.equalsIgnoreCase("unknown") || b.equalsIgnoreCase("unknown")) { - return -1.0; // return -1 if a country is UNKNOWN - } + @Override + public double distance(final String a, final String b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) { + return -1.0; // return -1 if a field is missing + } + if (a.equalsIgnoreCase("unknown") || b.equalsIgnoreCase("unknown")) { + return -1.0; // return -1 if a country is UNKNOWN + } - return a.equals(b) ? 1.0 : 0; - } + return a.equals(b) ? 1.0 : 0; + } - @Override - public double getWeight() { - return super.weight; - } + @Override + public double getWeight() { + return super.weight; + } - @Override - protected double normalize(final double d) { - return d; - } + @Override + protected double normalize(final double d) { + return d; + } } diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/sdgnodoi/job.properties b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/sdgnodoi/job.properties new file mode 100644 index 000000000..69eca95f4 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/sdgnodoi/job.properties @@ -0,0 +1,2 @@ +sdgPath=/tmp/sdg_20240627_oaid_csv +outputPath=/tmp/miriam/sdgnodoi \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Authors/part-00000.snappy.parquet b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Authors/part-00000.snappy.parquet new file mode 100644 index 0000000000000000000000000000000000000000..72ee6064c149e1669d31ff6bbe429d059efa199e GIT binary patch literal 77956 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 N3zuW()qp*y{x91a%ys|( literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Employments/part-00000.snappy.parquet b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Employments/part-00000.snappy.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d3878ace48af5afee38aebc94fb67d87b87c2760 GIT binary patch literal 9246 zcmch74RjmTo$tN2CP;~FHLV$`;(SW!t z{p!}W_-bw7{9UI`uWq>dA@S=B(XGAzm}7@_YE>M2#@RtF_R6S#j2 ziK3xNd!HoX!xM*#md+U=L)643<%Xyx>nSZcL7z@ilK%@56{W+~!>%0oN>C65jXn`f zr8Ir~b;3)!V5TZ5X;n)(tgDKaEad-?L>0*p3bWGne;YLvL6?#e_tOwlKq{}3s61_n zo+)*l%*RPgnyVf->MBb9T@dYXu__$Z4f=ZI{-B}@;@wwjnAX)n?p-YDA|=zoe^y zmi$4;IB~Ej9M-sBh1Ha#h^et5pCrY98cfOSiTiiNuLvUd3n)A#roSCjWyzpN{IV|Z zJx!zHkpr5dNPF#uuym+8by&)E2PH)_#@~xELog31nsq7&bE9H$hWSi1M(ElZDG{NU2V7w7SF2fuWlUplk&IDXDx zrSnT)UpjyBc1E`JRa~8@6F!cs4=p{sboSyM?8)P7Es*}#rL*`xhxKkxiRM^I533ror#lppPHt@2|PdlsD9)w!!NbVF`gJh3Ds_wUW|rtse+AZe zDiF}MO5Ccd_ijwy=D1dcnQzc4+6DL$-^q_UN9@AR|IrY}a@%T^?DJQv1!SRdh{$Y-e_)e~2&AcN34ke?LFR4?86r4u_%3E@Zm4N!8=y87w^r z54X$M*5uO_yUd-UMz(kv8kYp;Fc4GxjwCXx|5CLKNARE%XIqnm72&BK<(M zAD#q@d3+Xwiw}Vz)9dEVV%e_PUX^=lKZf9Y4nk$3gxF$M9JC9rGhzR0w42YB%e6|! zTJDb6sOwB)a!I+K{x^~?# z!Iqo+tH$=tgSiprZC=52NNci__(lr!I~j{PN;Mh6$aWJ6!Lj16aQB5a;eLeEl44s9EBfS zgU}$hcHokZ`}xoN4x90R@=rL$h1dO_S+N5C0$;vyrsKiTR1FEEWerTmTlQz70nE!5 zYjc6n&;ewj6Mx;6x4lD1H5GHxqNhnW{qgaDob^~7J08EiJO8 zn)9Qh7FI%DU5O=zUB~mR$(rq&Go|4v6Db~R@_m+lkmc2WhowX2Yb~dUL-%En5f&es zv)@P_{4ijMmk6R+3M7ZO>uSnWg35y zMTS{*tqd{NbSwl1!Cc_u7kd!Rd8=~J9vkp=^Piq?Y4;_A@n44EE_~k?M?7_nej|Q!b_W^0usYu4n+wq|`bxI_vlt2-q`dNK$soR=%7?seb|$BB zLRP0NFVM@4l3_EVY!ZJ#*3aMPtITdZv+~n-aa!jAKN)ZSw}6bwpZ}X%KF&*mpz+7j z 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 Knh^YD(EkROzjm4c literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/EmploymentsJson/part-00000 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/EmploymentsJson/part-00000 new file mode 100644 index 000000000..8e1b363b2 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/EmploymentsJson/part-00000 @@ -0,0 +1,100 @@ +{"affiliationId":{"schema":"RINGGOLD","value":"8244"},"departmentName":"Biology","endDate":"2019-05-19","orcid":"0000-0001-6291-9619","roleTitle":"Undergraduate Research Assistant","startDate":"2017-01-26"} +{"affiliationId":{"schema":"GRID","value":"grid.445941.9"},"departmentName":"Department architectural-building constructions","endDate":"","orcid":"0000-0001-6291-9619","roleTitle":"Assistant professor","startDate":"2014-09"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/02jx3x895"},"departmentName":"Learning and Leadership","endDate":"2012-09-01","orcid":"0000-0002-3210-3034","roleTitle":"Leturer"} +{"affiliationId":{"schema":"RINGGOLD","value":"445071"},"departmentName":"Fisheries and Aquaculture","endDate":"2006-01-012012-08-23","orcid":"0000-0002-9030-7609","roleTitle":"Technical Officer"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/05a28rw58"},"departmentName":"Institute of Environmental Engineering","endDate":"2023-11-012024-01-31","orcid":"0000-0002-9030-7609","roleTitle":"Visiting Researcher"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Faculty of Engineering and Informatics","endDate":"2021-12-20","orcid":"0000-0003-0305-8980","roleTitle":"Lecturer"} +{"affiliationId":{"schema":"RINGGOLD","value":"26066"},"departmentName":"Obstetrics and Gynaecology","orcid":"0000-0003-0305-8980","roleTitle":"MD, PhD"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/00ey9xa07"},"departmentName":"Harbin Sport University","endDate":"2024-06-01","orcid":"0000-0003-0305-8980","roleTitle":"Student"} +{"affiliationId":{"schema":"","value":""},"departmentName":"KIPP DC Schools","endDate":"2016-01-012017-01-01","orcid":"0009-0004-7554-419X","roleTitle":"Middle School Science Teacher"} +{"affiliationId":{"schema":"RINGGOLD","value":"19374"},"departmentName":"Music Therapy","endDate":"","orcid":"0000-0002-5115-9762","roleTitle":"Dementia Program Director","startDate":"2017-10-01"} +{"affiliationId":{"schema":"RINGGOLD","value":"9144"},"departmentName":"Interdisciplinary Center for Scientific Computing - IWR","endDate":"2009-01-152012-10-31","orcid":"0000-0002-2004-4153","roleTitle":"PhD student"} +{"departmentName":"2nd Air Supply Maintenance Center Command","endDate":"2012-08-30","orcid":"0000-0002-4389-9744","roleTitle":"Production Planning Group Supervisor","startDate":"2008-09-01"} +{"affiliationId":{"schema":"","value":""},"departmentName":"MITAKY High-Tech Co., Ltd.","endDate":"2020-07-01","orcid":"0000-0001-7628-743X","roleTitle":"President & CEO"} +{"departmentName":"Ancash","endDate":"","orcid":"0000-0002-3861-2833","startDate":""} +{"departmentName":"CALDAS","endDate":"2010-06-17","orcid":"0000-0003-1077-4053","roleTitle":"COORDINADOR ESTUDIO DE RADIO Y TV","startDate":"1999-03-17"} +{"departmentName":"Institute of Sociogenesis and Social Dynamics","endDate":"","orcid":"0000-0001-6881-7760","startDate":""} +{"affiliationId":{"schema":"RINGGOLD","value":"27004"},"departmentName":"Biology","endDate":"1999-09-02","orcid":"0000-0002-8553-169X","roleTitle":"MCf Microbiology "} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/041nas322"},"departmentName":"Bonn Center for Dependency and Slavery Studies","endDate":"2019-01-012023-01-01","orcid":"0009-0002-9250-948X","roleTitle":"Predoctoral Research Associate / wiss. Mitarbeiter"} +{"departmentName":"Процессы и аппараты химических и пищевых производств","endDate":"","orcid":"0000-0002-1805-5670","roleTitle":"старший преподаватель","startDate":"2015-09-03"} +{"affiliationId":{"schema":"RINGGOLD","value":"95414"},"departmentName":"Department of Science, Technology and International relations","endDate":"2021-03-09","orcid":"0000-0002-7616-2482","roleTitle":"Researcher"} +{"affiliationId":{"schema":"RINGGOLD","value":"28730"},"departmentName":"Forensic Medicine & Toxicology","endDate":"2019-08-26","orcid":"0000-0001-7369-1744","roleTitle":"Senior Resident","startDate":"2016-08-27"} +{"departmentName":"Department of Functional & Comparative Genomics","endDate":"2015-10","orcid":"0000-0001-8059-8919","roleTitle":"Postdoctoral Research Associate, Fluorescence Chemical Sensors","startDate":"2014-08"} +{"affiliationId":{"schema":"RINGGOLD","value":"16771"},"departmentName":"Catedra UNESCO de Gestion y Politica Universitaria","endDate":"2016","orcid":"0000-0001-9437-6700","roleTitle":"Investigador","startDate":"2001"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/05v3pg621"},"departmentName":"Department of Multimedia Animation and Application","endDate":"","orcid":"0000-0003-2513-7065","roleTitle":"Professor","startDate":"2012-02-01"} +{"affiliationId":{"schema":"RINGGOLD","value":"246714"},"departmentName":"Delta Dental of Wisconsin","endDate":"","orcid":"0000-0003-2675-3206","roleTitle":"VP & Science Officer","startDate":"2006"} +{"affiliationId":{"schema":"RINGGOLD","value":"146895"},"departmentName":"Facultad de Ciencias Económicas, administrativas y Contables ","endDate":"2015-02-01","orcid":"0000-0001-9384-6395","roleTitle":"Coordinadora de Investigaciones-Facultad CEAC"} +{"affiliationId":{"schema":"RINGGOLD","value":"8367"},"departmentName":"Microbiology, Immunology and Tropical Medicine","endDate":"2019-10-01","orcid":"0000-0002-2349-263X","roleTitle":"Assistant Professor"} +{"affiliationId":{"schema":"RINGGOLD","value":"129705"},"departmentName":"Institut de Recherche en Informatique Fondamentale","orcid":"0000-0003-0287-6252","roleTitle":""} +{"affiliationId":{"schema":"RINGGOLD","value":"119726"},"departmentName":"Computer Engineering/MIS","endDate":"2018-09-15","orcid":"0000-0003-0014-5106","roleTitle":"Assoc.Prof.Dr."} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/00wbwde85"},"departmentName":"school","endDate":"2021-03-01","orcid":"0009-0007-7585-0594","roleTitle":"mahasiswa"} +{"affiliationId":{"schema":"RINGGOLD","value":"9171"},"departmentName":"Computer Science Dept.","endDate":"","orcid":"0000-0002-3202-2904","startDate":"2002-04-01"} +{"affiliationId":{"schema":"GRID","value":"grid.474837.b"},"departmentName":"Gastroenterology","endDate":"","orcid":"0000-0003-0705-5760","startDate":""} +{"affiliationId":{"schema":"","value":""},"departmentName":"School of Physical and Occupational Therapy","endDate":"2018-03-012021-12-31","orcid":"0000-0002-8406-5228","roleTitle":"Postdoctoral Fellow"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Xinqiao Hospital","orcid":"0000-0001-6200-2309","roleTitle":""} +{"affiliationId":{"schema":"","value":""},"departmentName":"DIPARTIMENTO DI PATOLOGIA CHIRURGICA, MEDICA, MOLECOLARE E DELL'AREA CRITICA","endDate":"2018-10-012021-10-01","orcid":"0000-0002-5588-2608","roleTitle":"Ricercatori a tempo determinato"} +{"affiliationId":{"schema":"","value":""},"departmentName":"ECE","endDate":"2021-01-012022-02-01","orcid":"0000-0002-8729-0287","roleTitle":"Visiting Scholar"} +{"departmentName":"Mantenimiento","endDate":"1998-01-01","orcid":"0000-0002-8663-2716","roleTitle":"Project coordinator","startDate":"1994-01-01"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/012wtwr40"},"departmentName":"Centro Universitário Newton Paiva","endDate":"2012-07","orcid":"0000-0002-1725-1805","roleTitle":"Professor Assistente","startDate":"2005-09"} +{"departmentName":"DFC","endDate":"","orcid":"0000-0003-3764-9500","roleTitle":"Professora Substituta","startDate":"2018-02-01"} +{"affiliationId":{"schema":"RINGGOLD","value":"10107"},"departmentName":"Automated Lab - Women's & Children's Hospital site","endDate":"1995-09-052018-09-09","orcid":"0000-0002-5594-9737","roleTitle":"Medical Scientist"} +{"affiliationId":{"schema":"RINGGOLD","value":"33784"},"departmentName":"Computer Science","endDate":"2023-06-04","orcid":"0009-0000-6585-6246","roleTitle":"Visiting Assistant Professor","startDate":"2023-01-09"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/0280a3n32"},"departmentName":"Research","endDate":"2022-06","orcid":"0000-0002-0846-9503","roleTitle":"Research Assistant","startDate":"2019-06"} +{"affiliationId":{"schema":"GRID","value":"grid.8657.c"},"departmentName":"Finnish Meteorological Institute","endDate":"2019-06-01","orcid":"0000-0002-4826-2929","roleTitle":""} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/05290cv24"},"departmentName":"Dipartimento di Informatica e Tecnologie dell'Informazione","endDate":"2022-11-012025-11-01","orcid":"0009-0000-6476-8092","roleTitle":"PhD Student"} +{"affiliationId":{"schema":"GRID","value":"grid.495082.2"},"departmentName":"Laboratory of water bodies sanitaric microbiology and human microbial ecology","endDate":"2017-01-01","orcid":"0000-0003-1194-7251","roleTitle":"Senior reseacher "} +{"affiliationId":{"schema":"RINGGOLD","value":"150713"},"departmentName":"Education","endDate":"2013-09-01","orcid":"0000-0002-2489-1202","roleTitle":"Doctor of Education"} +{"departmentName":"Office of Risk Management","endDate":"","orcid":"0000-0003-2772-313X","roleTitle":"Senior Policy Advisor","startDate":"2014-09-04"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/04pe1sa24"},"departmentName":"Facultad de Estudios Globales y Hospitalidad","endDate":"","orcid":"0009-0003-4270-4196","roleTitle":"Docente en las Carreras de Licenciatura en Turismo y Relaciones Internacionales","startDate":"2023-06-12"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Civil & Mechanical Engineering","endDate":"2014-06-012020-06-30","orcid":"0000-0001-6598-2525","roleTitle":"Assistant Professor"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/02ytfzr55"},"departmentName":"Department of Civil Engineering ","endDate":"2022-03-212024-02-27","orcid":"0000-0002-9572-1358","roleTitle":"Temporary Faculty"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/04wdt0z89"},"departmentName":"library","endDate":"2024-03-01","orcid":"0009-0002-8124-1772","roleTitle":"library it"} +{"departmentName":"Kalil e Pires Advogados","endDate":"","orcid":"0009-0001-3403-0297","roleTitle":"Estagiário","startDate":"2023-03-13"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Coronel Institute of Occupational Health","endDate":"2019-01-01","orcid":"0000-0002-0461-4013","roleTitle":"Principal Investigator"} +{"affiliationId":{"schema":"GRID","value":"grid.5801.c"},"departmentName":"Health Sciences and Technology","orcid":"0000-0002-1651-0457","roleTitle":"Doctoral student"} +{"departmentName":"Prefeitura de Teresina","endDate":"","orcid":"0000-0002-8148-4179","startDate":""} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/00k8rrx20"},"departmentName":"Prosseguir","endDate":"2023-05-012024-05-01","orcid":"0000-0001-5147-3455","roleTitle":"Coordenadora Pedagógica Regional do Prosseguir em Manaus"} +{"affiliationId":{"schema":"RINGGOLD","value":"381864"},"departmentName":"Pharmaron Beijing Co Ltd","endDate":"","orcid":"0000-0003-2165-740X","startDate":"2015-10-27"} +{"affiliationId":{"schema":"RINGGOLD","value":"183390"},"departmentName":"Instituto Tecnológico Superior de Irapuato","endDate":"","orcid":"0000-0003-2101-5917","startDate":"2018-11-01"} +{"affiliationId":{"schema":"RINGGOLD","value":"384754"},"departmentName":"SynCat@Beijing","orcid":"0000-0002-1050-2165","roleTitle":"Vice Director"} +{"affiliationId":{"schema":"RINGGOLD","value":"282795"},"departmentName":"Setor de Coleções Científicas","endDate":"","orcid":"0000-0003-3755-0025","roleTitle":"Estagiária","startDate":"2019-11"} +{"affiliationId":{"schema":"RINGGOLD","value":"434589"},"departmentName":"Chemistry","endDate":"2015-05-25","orcid":"0000-0001-5861-4425","roleTitle":"Lecturer"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Cajamarca","endDate":"2023-11-15","orcid":"0000-0003-1524-3315","roleTitle":"Asistente Administrativo Provincial"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Seduc ma","endDate":"2012-01-24","orcid":"0000-0003-3142-356X","roleTitle":""} +{"departmentName":"Rede Particular de Ensino","endDate":"2021","orcid":"0000-0002-4771-2131","roleTitle":"Professora de Artes Cênicas","startDate":"2018"} +{"affiliationId":{"schema":"FUNDREF","value":"http://dx.doi.org/10.13039/100009042"},"departmentName":"Derecho del Trabajo y de la Seguridad Social","endDate":"2002-12-01","orcid":"0000-0002-1275-5289","roleTitle":"Catedrático de Derecho del Trabajo y de la Seguridad Social"} +{"departmentName":"Department of Ethology","endDate":"2011-01-02","orcid":"0000-0003-1436-7324","roleTitle":"Research Assistant","startDate":"2007-09-01"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/04ka8rx28"},"departmentName":"Mechanical Engineering","orcid":"0009-0006-6397-2183","roleTitle":""} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/002qhr126"},"departmentName":"Theatre","orcid":"0009-0001-6531-9624","roleTitle":"theacher"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Institute of Molecular Medicine, Renji Hospital, School of Medicine.","endDate":"2021-01-27","orcid":"0000-0003-0399-1201","roleTitle":"Associate Professor"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Cell Biology","endDate":"2013-11-012014-07-01","orcid":"0000-0003-1489-4757","roleTitle":"Research Scolarship for Undergraduate Students"} +{"affiliationId":{"schema":"RINGGOLD","value":"346985"},"departmentName":"Maternidade","endDate":"","orcid":"0000-0002-6985-9679","roleTitle":"Enfermeira/UTI neonatal","startDate":"2019-02-26"} +{"affiliationId":{"schema":"RINGGOLD","value":"41726"},"departmentName":"Area Team - Biodiversity","endDate":"2006-01-012008-01-01","orcid":"0000-0002-6553-3786","roleTitle":"Catchment Biodiversity Technical Officer"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/04z7qrj66"},"departmentName":"Merchant Marine College","orcid":"0009-0003-6812-3576","roleTitle":""} +{"affiliationId":{"schema":"","value":""},"departmentName":"Lima","endDate":"2022-03-25","orcid":"0000-0002-9262-5619","roleTitle":"Docente Universitario"} +{"affiliationId":{"schema":"","value":""},"departmentName":"University of Bristol","orcid":"0000-0002-9793-3485","roleTitle":""} +{"departmentName":"US Geological Survey, Ecosystems Mission Area, Cooperative Fish and Wildlife Research Units Program","endDate":"","orcid":"0000-0002-8638-6682","startDate":"2011-06-01"} +{"affiliationId":{"schema":"RINGGOLD","value":"28666"},"departmentName":"English","endDate":"","orcid":"0000-0001-5361-109X","roleTitle":"Assistant Professor","startDate":"2019-07-05"} +{"affiliationId":{"schema":"","value":""},"departmentName":"Centre for Earth System Science","endDate":"2010-03-012012-11-01","orcid":"0000-0001-5323-4431","roleTitle":"Researcher and Executive Officer"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/05bjd0w70"},"departmentName":"Education","endDate":"2013-08-15","orcid":"0000-0001-5960-0586","roleTitle":"Associate Professor and Chair, Department of Education","startDate":"2002-08-15"} +{"affiliationId":{"schema":"RINGGOLD","value":"632513"},"departmentName":"Board ","endDate":"2020-01-01","orcid":"0000-0002-4222-4518","roleTitle":"Boardmember"} +{"affiliationId":{"schema":"GRID","value":"grid.22657.34"},"departmentName":"Faculty of Food Technology","endDate":"2017-01-01","orcid":"0000-0003-2606-8380","roleTitle":"guest scientific assistant, guest researcher, guest lecturer"} +{"affiliationId":{"schema":"FUNDREF","value":"http://dx.doi.org/10.13039/501100008331"},"departmentName":"Radiology","endDate":"","orcid":"0000-0001-6249-450X","startDate":"2016-03-01"} +{"departmentName":"кафедра физики","endDate":"","orcid":"0000-0001-6786-838X","roleTitle":"доцент","startDate":"1981-11-28"} +{"affiliationId":{"schema":"RINGGOLD","value":"6429"},"departmentName":"Molecular and Cellular Physiology","endDate":"2010-01-012013-01-01","orcid":"0000-0002-5538-0464","roleTitle":"Research-Associate"} +{"affiliationId":{"schema":"RINGGOLD","value":"48455"},"departmentName":"Clinical Biochem","endDate":"2016-12-30","orcid":"0000-0002-9563-8044","roleTitle":"Associate Professor","startDate":"2008"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/01xf75524"},"departmentName":"Molecular Oncology","endDate":"2022-01-01","orcid":"0000-0003-0928-003X","roleTitle":""} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/022kthw22"},"departmentName":"Anesthesiology and Perioperative Medicine","endDate":"2022-07-01","orcid":"0000-0001-7410-7271","roleTitle":"Postdoctoral Researcher"} +{"affiliationId":{"schema":"RINGGOLD","value":"125792"},"departmentName":"Environmental Management and Toxicology","endDate":"2006-06-20","orcid":"0000-0001-7855-4183","roleTitle":"Instructional/Tutorial Facilitator"} +{"departmentName":"2004 – 2007 | Teacher of Fiqh and Usul-al-Fiqh | Islamic University | Moscow, Russia","endDate":"","orcid":"0000-0001-8386-4426","startDate":""} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/0190ak572"},"departmentName":"Biology","endDate":"2024-06-01","orcid":"0009-0001-6766-7876","roleTitle":"Research assistant"} +{"affiliationId":{"schema":"RINGGOLD","value":"16763"},"departmentName":"Education","orcid":"0000-0003-2355-4682","roleTitle":"Profesora titular de Universidad/ Senior Lecturer "} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/0406jsq08"},"departmentName":"Farmácia","endDate":"2023-03-01","orcid":"0009-0009-1661-5046","roleTitle":"Residente farmacêutico"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/02aqsxs83"},"departmentName":"School of Biological Sciences","endDate":"2021-08-16","orcid":"0000-0002-1696-1952","roleTitle":"Assistant Professor"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/00s582s04"},"departmentName":"cajamarca","endDate":"2024-01-01","orcid":"0009-0001-0970-2741","roleTitle":"BACHILLER"} +{"affiliationId":{"schema":"RINGGOLD","value":"186027"},"departmentName":"РЯиК","endDate":"","orcid":"0000-0002-1000-5441","roleTitle":"старший преподаватель","startDate":"2007-09-01"} +{"affiliationId":{"schema":"RINGGOLD","value":"47910"},"departmentName":"Faculty of Life Science and Technology","endDate":"2012-07-082015-10-01","orcid":"0000-0001-7533-998X","roleTitle":"Lecturer"} +{"affiliationId":{"schema":"RINGGOLD","value":"2234"},"departmentName":"Education","endDate":"","orcid":"0000-0001-6123-8483","roleTitle":"Assistant Professor","startDate":"2019-01-07"} +{"affiliationId":{"schema":"ROR","value":"https://ror.org/04qkymg17"},"departmentName":"genera surgical ward","endDate":"2013-10-012015-02-01","orcid":"0009-0009-7638-0453","roleTitle":"Registered Nurse"} +{"affiliationId":{"schema":"RINGGOLD","value":"575342"},"departmentName":"GBUZ Naucno-prakticeskij psihonevrologiceskij centr imeni Z P Solov'eva Departamenta zdravoohranenia goroda Moskvy","endDate":"2022-11-01","orcid":"0000-0002-0344-9765","roleTitle":""} +{"affiliationId":{"schema":"","value":""},"departmentName":"SERVICE DE CHIRURGIE ORTHOPÉDIQUE ET TRAUMATOLOGIE","endDate":"2024-02-01","orcid":"0009-0003-2119-1766","roleTitle":"CHIRURGIEN ORTHOPEDISTE"} diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Works/part-00001.snappy.parquet b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/person/Works/part-00001.snappy.parquet new file mode 100644 index 0000000000000000000000000000000000000000..51f797092c28711f3303ef11b03409da2829e2c4 GIT binary patch literal 3208 zcmeHKNpBoQ6s{R}dn1lw;-2(~36w`;%K>*!ud``la1x9UPB4iTB4L*DOxaVUH+OYA zF~$-{BXQ(_f`m*YP|PC40S-t=$X6~LqX;3yZ$LRj2=ThTB!orrEl7;i-BtCr@4b4j zUd`;}d0i5u?X2`uW=1+J2?%|dxpWjEq`^;tM^`FFU03QAy{;ZZV}@cHx~7<#X;qG) zLR~X8rCQMp6^)sSVcQ09)^#}n{ngKN3kdRc6@VGPt zFuJAQf_!w(GU(frxx07|oE)G;hpjBUhcaDa@AVgKgh0zh>C%kUpSbdr+y%t8&oVu4 zQr3nQ#5nhQ;p;~o8Y-+U!kC0t*$UujNE74mN^o=+Y7=e?X2?i zbY+G{k*b>pJbFzt`ZEePbx;ahV@uj=mR6?0>#Z`^H4U~%(<_Q)T9$HE-9Xr?*J@Q= ztJnHA3a|sA$vTbad@UePM5R@ZG!%*%DHZfn&i20uhrV;RjGhN5e_ zUR8|#1f;IjfK#(fi0LV5>YkYP>^dM9{w*eHq=( z%RGap9RCWWl*2AleAd6vfs2LwXB9Ux?!ND)txg zG+_6rNmMn4kDu2`NgC!!O0 zih;xULPR2pQ$rc{-Q?WNF-}_uvxJ@GRmy_{U=3z^cy>waFPn_LRc_*j-DQ%K${Bz#O zUuOPuWqV%(dgl7uC1^m|{5#W!I2;t0U**X$L!@pb9U95Xq93+cdjugnD?=W%xs(Nx zEy!I9WJ$^<%g|{;vI?yu73kiP2ZPxERMtAN<5m=k@0lLHJo&J0LO+%6T`;(OW*T;*yO_iSmw|88I#RrT*T15vpisbt4zA0{q ulRHatE74UOuC%Ro$A&AZYT~hln86*Yw3dF)#qI(P*H0i-L}(WNgZu$d&#W&1 literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00003 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00003 new file mode 100644 index 0000000000000000000000000000000000000000..fd296ef068e3ec73a87192775242327861ed88b6 GIT binary patch literal 1691 zcmeHGJ8#rL5I%uKNlz0_OM9~H*e15SD5N+jA|Mh4LNK;x?^aoRt=;t<_iFe7R1`>v zUqQ_;LZXI_S?3;+P^8n<*>30c%{MdO>+_cn9w|NYpn+nH-WW=y8c!(i5(lwqZ%4mh{CNK1Yp-|zF*%+vY`wBZD@E>=ox&luD_gj>an zNU?EI=9wcxsluGLcC7TUHdffy4djBmY}INvU3Tm*wbE|w-OI8l_IVP;90N#;lQQCY zM91LALF5NX5hEpA&?9uqi2Y@$#3t7rPEe#+_)+dBC4_05#2BP$l7wNA^OMA_jt)mS zzPqijE!5gGvTx|qR2$S*AkpZ~X+<(Q+FK@n?qqT&lf7j!hW~YPQzeHS`c@@}NbGQx F`~&QPNGbpT literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00010 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00010 new file mode 100644 index 0000000000000000000000000000000000000000..b83cbef7379eb456c8a08ca24fdc61ae8eb6fffd GIT binary patch literal 1691 zcmeHGy>1jS5RO3N9n!$bw5Qcxc5idLT@)xzLW&3h3WU(CJ-)NzTd!Z z?)OVb^FGS7m+~Zu2T58|+AGiv680^Yol^_fnrs3*3@d3^Q8ijG-`}>(nX0aoQ>7-9 z1nsa(7Kzp(^|mqy)JW}>)7FC(-^O~|I8XKBD5pvre{Ibbb>2pXqQrM&0UjpS64&6I zqB_h?oto6f`hr`sU4yiMRo!J$_ZbRH)4&Gfp=qQ02cp%aU)(f-Vipi;B;3_^vbq@!3x zfRswBwTqCafe1mBJ8Asb*kR?o@=X}XnG9&t*f3po6fdl?VeRcJikNns^x~s3lRT4g zn&+6INCf9;-pi66fj!s}hGq2Qg)nN3rNiM8bAXJ;d72LfQVdGo&q2mzax8?%1%c^s zRN%Ya`pQDBJtO;?K25bo>lG4>_MDa^lgB&D literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00042 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00042 new file mode 100644 index 0000000000000000000000000000000000000000..aa23693786347779904da93da3f7ebf9140f8682 GIT binary patch literal 1691 zcmeHG%Zd|06b%aggBvH5+t759?j+qShv*_84C;Uj5xw1YD=DVZ)l^j{=CyYv`X}PQ zh`%!8LT~ltF(3mW>#1Gc_c`~TH!og2daTVjfD-Zv1{2^~mx0v5C4O>udm8n7IsQ8Q z`~CCBpFe(GpZ$6Et zM})H$D`BBDaF$Y@Rtj^6To^rN>AMxX!Uff7hihG80n*?HdTA=MWB~1?BYF_VaRyNm zqlns3-tC5iZj@2k8K?>=_bq14p@F#~8wUrYLTHv2l~SAcw=F9sis^ zr=>P7%?;V+psvz6X7s5M5VO`6F!jhrbsX}hXRAp#cR}@9urBAfl^!~t*BvblcoVa& zbVt-?(_+-mRV5LJPEOG}n3gx}wU|M5xhVZ425qI>g&9L3m-QL=4pl}+v5f#Bq>?)q zWez}+Zo{$USvvp-WyQ~wgjW&Mm^-I$*>c$}e#=SoBet*DG^u0xYKg{4BpCHMZAd0hj+V*wy-e<9ac*liJh*Jf1#&L AJpcdz literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00066 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00066 new file mode 100644 index 0000000000000000000000000000000000000000..c08053152fb61d1743783a5965a6d93ebaac23e9 GIT binary patch literal 1691 zcmeHGOK#gR5H%X0cj%@y*i`{TkS!^evfi#uy2m}e?nQS; zms9@x=eOyPUq@$m?|QwXH{^KBunl;PPRSzRvnH@qx`IH12+mP~le+%?;_s4`3Kk2N zKOvkASOasVfwP?Qv{G0)lm}N25qa{)LcO=7u^~74sAh4v55d7q>@_~ zWuAH>t@)+CQp{h4F1>2LzNtI=sT4hBC*3&@(+eN BMr`@vM3HfmZPQ#L; zZ~#_pfgR zc0@R9u@V;AfM6Nr8Lct*D5N!0mc3uG8(dJGcDyzv7N9JCqL*co4+qd5c4QCYH06*C zQ4->12Yj92x4s#2q zrlqky%PraFpl`A{a{AN^XtK@~Fb&K`bsUOjm{yZ`?t<#IU|lY3D?1>b*NBc9yp7pb zx+iM0X)(g{RY`+GucqicOv~HpwU|YHy(mK`7G0(Nl^sK&mh~9~go@KqY$HHQrPaz8H2Ja5ZXV4O(cAcnoPBL*CR zr-Q!094Og?9b;HV8n1;>yIeXP5DAaDNK%mudYwT(?m)YbAo6Y+=K{8eqXOT<*6Eaj zg<88L`;I$tHYAhhN6X~TgG?S|ac*liETA;f=d1Y D+jdMe literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00126 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00126 new file mode 100644 index 0000000000000000000000000000000000000000..b090f3c219d1a9a7b41cab3b5e22500460242184 GIT binary patch literal 1691 zcmeHG%W4!s6b%aE!nNSWgmNVeO-)bt%yjR<=wenu4Y&}I+g-OZMQXa5s_KdJ`i1%7C{Z=1fvNEW9mqm=oG*D+dT*E zJN(i7eERxo@%-8MUsu1sjSdbTAClu0!zL0Hdaa5`OzOx{=_y18Wb__2cx9@~M}L>B z)Ua5v{0`x)!)lmo1A^t0XSBxBqmb52S^jCs&T&q4x_o77tUy`(LNCu{kqx1n#j+1P zO$$h}6lKy)%3hBTdr3iMXP_IT+>clsjVxSfvI+1ouB2gk)o8u`eABXIs+uXM3QbuO zw8IWrBwC9!+r}VJBaK(gTMt&{KGxgDdFscbj5_W7wKX%Eyp0S^3GdDVWnioYuE9A) zeVCg&HLZ>Hd1=XZ0s1_@z=A$40%F#=3Z?KAqQL5{s_U{=}X^r55cOgbqzXN3n?j zDV0`R7iEqD5K2|y`7z~C2 zWtqgO%p_!kBn#|&uxA*Sk@A%=YMV=k!{crr5{}&-7b50^VLvW~DC0p_a#<8W$#gg> z;N5S1W1-RBkbMiESgp}|g#@ELr!~ps<(*~n=Rqb9GP$!%Ch)&bZmQ%yhrUzEeI#~& GmHY$q7fH7O literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00154 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00154 new file mode 100644 index 0000000000000000000000000000000000000000..027c9f5bb819f26ea5e32610e3b237229601e7f4 GIT binary patch literal 1691 zcmeHG&2AGh5RL$G;R(1vWvaY)A*iZn{ABngWo<&<^?szbuQMZU9VV6MnkgMXjV3zQtS7ZEh{FQnY5BC zLJ3e7hh!0G3{r0!LyZclJ-+BY*i;v>&UDsMy)YP4rE`C4^o%<1BYjcgdv1ZsPpl`d zz*wWr?o>ow?X|{uutc=RbEuw z?JHVp@GNGN>58cJddR4r>slHdIypt_VA`HdZ^#U)!$s>mF=#vG4$KiWa@n7Ouh4Ni zicJIvA(h;^2)XBp5LDXT&P}x0Z>*E9^8+~$9<4j$r_18-)M(?^-oLWU!-z+sO8IES zixE$FDDooCqA1JqG)^i4J1|G+myw01wU%2f9ZoS4d0ixNf=NF1h$4o#sFFO*A?2bV zFddHcd@r`Xu~2Kz$iAgdQ*F^WiA1A6r!~ps(Y0mr=T;`SGP$-)Ch)&bF014whkmY- Kn@H^DD)|Rzn?_&& literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00160 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00160 new file mode 100644 index 0000000000000000000000000000000000000000..7d0af8a04579997bc536fa9adfac34977386fb01 GIT binary patch literal 1691 zcmeHGy>1jS5RO3N4Jc?JG6l_PwRiiI-R+`4ktzZrQ6PlI>+zk5Z@sd;Iqoi3QP3b> zga@MJH9(?Zyt$u9C{lEF+<9icnfYesd;9A3qbJ6WBWR(XU^D??OdBZ^o#SVJyXT;P zKfgZy`=yA!{dn=~6QAkw;Namiay)0)MWR8k6_3QEjU1((LS#TjZ%~6*ruqKh&yv*| z77JG0A)F0Z3v+Eiu!?X-YpgvAY0Z>X@0aWX=agp{UzrvgP!>PZt18LM0*2*C<`8EY zhqTO4ro*&OlDJ4xPH8VecSzWG$PZ5}%rw~qcsOmOVO7&w*Js$lV!0fb-Lva|Ubx1rnLH$~=PZzdT?J6Gk6&*Er z9kb4KOVnyLU{ud{Ee#I6nxgYCZLg;{U>5cHybYaLbe;BRb_|VL^k)z%bexW29RX4* ztu`(~o&+KURqnX+6Jt*s=auimK+a@9o6d&mvQd0xjSXw>UsWY}o(@q!0_kYPY3o@5 z$i*;5QDPCN1omLZ7?zR6SHh?bmJX*V(o%|2<`|2-6ym5B*+}p_8DWwq*%5*1a8%&C z+xprrw!cdL E0X@)2mH+?% literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00163 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00163 new file mode 100644 index 0000000000000000000000000000000000000000..228ce04d554bf4a3035530a71fa25be72d1275e0 GIT binary patch literal 3324 zcmeHJ%W4!s6b%aggCH78a5Xgj&UEiWbP*7O8gL;JZdKpP6shTIs;d)cCi4Mq{1-pM zoeTfPjk?iWotY${k#R)aOzrAE>OK#rUOahr=dQ8G0W=^+7>uAYrU{e@4)KkdE3LNa$(y+4bw4T4dE}1b^pQ=`IOlpde-8mz^Yt+QS0C|(#86zNjmSaV95_m(~=)q5!c;XBqBuAyxe z#bNEFRpZ83R|-qAGtejH8FISx6;Nl}wuZ5^ux%)^UA2DFD*`zWT_lVxsw(}1aXGQ(=bcpq6)J(5g|F# z;wWG5)zlXfO6@Vpm*rDe8?;U#mC>)$oM3W)Wte=~z+?lHm0>c1pK)>>CF?BuB}&$T z*k7S!LnfYGHe~Yu$t0u?LlT8C&!xy^NUVT4R!Jp9T10vBdotO{pvZPa#G`_fhsaYI ui$cmMNr!O;i(kl^Wb&QPFaBX0g4salU;M-Vm|#{|{+kJA1=y`mFh2mPe}nD- literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00179 b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/actionSet/part-00179 new file mode 100644 index 0000000000000000000000000000000000000000..344d44a0a00ecec2a72e397cda038b1fd4e82db6 GIT binary patch literal 1691 zcmeHG&1w`u5Dp4?13@pkwBTtOW_D(OW^N&R*nk8z;6X&Hr>nC~dZ&l(p55%<-IFil z!I$todPmJc1g^2}TnT#?+BA(HUO)yFCZ( zdpr8|YW(B!=aZ*@zkfZnCkF?QUy$P^!zL0HdaZaQCUxW}^%NolGJ201yfW3dM}JnV z)UaH#VvlgvWi>3c0l^Bw8LhGOD5N!0R(x8q3tUj1Bwm{uD^M1{&?^eb^ARL@PYxjN z_c>&FA7z$gWtzsLG~<+Z2D(AQenj3mwlLRZ6X0Q7NyCb&(R%awwq?asHB(M;O(+T4 zVV5ittwri>YY?cB+T)AXgH?GG>uuva)r+H?DqZ_)Yi87W8ySic-)jq$VPY+D4bCa5 z!`#BDX>F`8N=vpm=!;^GoIWiBnyhmbOarrV8;7D3rqv;yyP$S0*rp5HDsCzswG|yT zconnFbVt-?(`8i8H#H3oy_%x)Fs-kq*JT#<*`f}eSagl{r}i8wwQSEIRA@LI#Wn(@ zR9fv^ggg#J2&&vs<0r9StDw#J6Fx34Jjk`EIuOG=PX`3{V9zluqaUw@Q9CRhP69%J7MvFwwy2MlJIV2WT@*WKYZQJkLe=k^L zV7X-VJ;K?Tb+9lNB&!K$jlm|MRL;&>{po_8;)3#|{L*&Vf_C_sUR^6um5^2wH3eQ2 z0`jUrm8W@=WxULCL21vx^hnr`C`Nk@&JEcl1lVttWp&#dvpT+QxnR0I(_RZhC7eN%CFsOYJ| ztC)4BJEB&rF{65+?`Uus^c;PFd3QCvF>`2+7G3Pbq3=yNa3|2}ZwC!D-E}QU6XI)(T@ame=j9y_+KZtRq~KSzgEdZB=&HX F`~w(VMD73p literal 0 HcmV?d00001 diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/blackList/not_irish.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/blackList/not_irish.json new file mode 100644 index 000000000..a5509cab1 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/webcrawl/blackList/not_irish.json @@ -0,0 +1 @@ +{"doi":"https://doi.org/10.1007/978-3-030-75768-7","OpenAlexId":"https://openalex.org/W2124362779"} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 0a7a4913e..f4824dd55 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -8,7 +8,6 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; -import eu.dnetlib.dhp.bulktag.criteria.VerbResolverFactory; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; @@ -23,7 +22,6 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; @@ -32,6 +30,8 @@ import eu.dnetlib.dhp.api.model.CommunityEntityMap; import eu.dnetlib.dhp.api.model.EntityCommunities; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.bulktag.community.*; +import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; +import eu.dnetlib.dhp.bulktag.criteria.VerbResolverFactory; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.Context; @@ -93,9 +93,10 @@ public class SparkBulkTagJob { ProtoMap protoMap = new Gson().fromJson(temp, ProtoMap.class); log.info("pathMap: {}", new Gson().toJson(protoMap)); - SelectionConstraints taggingConstraints = new Gson() - .fromJson(parser.get("taggingCriteria"), SelectionConstraints.class); - taggingConstraints.setSelection(VerbResolverFactory.newInstance()); + TaggingConstraints taggingConstraints = new Gson() + .fromJson(parser.get("taggingCriteria"), TaggingConstraints.class); + + taggingConstraints.getTags().forEach(t -> t.setSelection(VerbResolverFactory.newInstance())); SparkConf conf = new SparkConf(); CommunityConfiguration cc; @@ -277,13 +278,8 @@ public class SparkBulkTagJob { String outputPath, ProtoMap protoMappingParams, CommunityConfiguration communityConfiguration, - SelectionConstraints taggingConstraints) { + TaggingConstraints taggingConstraints) { - try { - System.out.println(new ObjectMapper().writeValueAsString(protoMappingParams)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } ModelSupport.entityTypes .keySet() .parallelStream() @@ -295,30 +291,22 @@ public class SparkBulkTagJob { readPath(spark, inputPath + e.name(), resultClazz) .map(patchResult(), Encoders.bean(resultClazz)) .filter(Objects::nonNull) - .map((MapFunction) value -> resultTagger + .map( + (MapFunction) value -> resultTagger .enrichContextCriteria( value, communityConfiguration, protoMappingParams, taggingConstraints), - Encoders.bean(Tagging.class)) + Encoders.bean(resultClazz)) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath + e.name());// writing the tagging in the working dir for entity - readPath(spark, outputPath + e.name(), Tagging.class) - .map((MapFunction) t -> (R) t.getResult(), Encoders.bean(resultClazz) )// copy the tagging in the actual result output path + readPath(spark, outputPath + e.name(), resultClazz) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(inputPath + e.name()); - readPath(spark, outputPath + e.name(), Tagging.class) - .map((MapFunction) t -> t.getTag(), Encoders.STRING() )// copy the tagging in the actual result output path - .filter(Objects::nonNull) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json("/user/miriam.baglioni/graphTagging/" + e.name()); - }); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/Tagging.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/Tagging.java index d01d4b805..3ea7d9ef1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/Tagging.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/Tagging.java @@ -1,32 +1,34 @@ + package eu.dnetlib.dhp.bulktag; import java.io.Serializable; + import eu.dnetlib.dhp.schema.oaf.Result; -public class Tagging implements Serializable { - private String tag; - private R result; +public class Tagging implements Serializable { + private String tag; + private R result; - public String getTag() { - return tag; - } + public String getTag() { + return tag; + } - public void setTag(String tag) { - this.tag = tag; - } + public void setTag(String tag) { + this.tag = tag; + } - public R getResult() { - return result; - } + public R getResult() { + return result; + } - public void setResult(R result) { - this.result = result; - } + public void setResult(R result) { + this.result = result; + } - public static Tagging newInstance(R result, String tag){ - Tagging t = new Tagging<>(); - t.result = result; - t.tag = tag; - return t; - } + public static Tagging newInstance(R result, String tag) { + Tagging t = new Tagging<>(); + t.result = result; + t.tag = tag; + return t; + } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java index 75189e7de..49fed9493 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java @@ -10,8 +10,6 @@ import java.lang.reflect.Method; import java.util.*; import java.util.stream.Collectors; - -import eu.dnetlib.dhp.bulktag.Tagging; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +19,7 @@ import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.PathNotFoundException; +import eu.dnetlib.dhp.bulktag.Tagging; import eu.dnetlib.dhp.bulktag.actions.MapModel; import eu.dnetlib.dhp.bulktag.actions.Parameters; import eu.dnetlib.dhp.bulktag.eosc.EoscIFTag; @@ -93,18 +92,18 @@ public class ResultTagger implements Serializable { } - public Tagging enrichContextCriteria( - final R result, final CommunityConfiguration conf, final Map criteria, SelectionConstraints taggingConstraints) + public R enrichContextCriteria( + final R result, final CommunityConfiguration conf, final Map criteria, + TaggingConstraints taggingConstraints) throws InvocationTargetException, NoSuchMethodException { // Verify if the entity is deletedbyinference. In case verify if to clean the context list // from all the zenodo communities if (result.getDataInfo().getDeletedbyinference()) { clearContext(result); - return Tagging.newInstance(result, null); + return result; } - String retString = null; final Map> param = getParamMap(result, criteria); // Execute the EOSCTag for the services @@ -123,8 +122,11 @@ public class ResultTagger implements Serializable { } //adding code for tagging of results searching supplementaryMaterial - if(taggingConstraints.getCriteria().stream().anyMatch(crit -> crit.verifyCriteria(param))) - retString = "supplementary"; + final Set tags = new HashSet<>(); + taggingConstraints.getTags().forEach(t -> { + if (t.getCriteria().stream().anyMatch(crit -> crit.verifyCriteria(param))) + tags.add(t.getTagId()); + }); // communities contains all the communities to be not added to the context final Set removeCommunities = new HashSet<>(); @@ -253,10 +255,26 @@ public class ResultTagger implements Serializable { clearContext(result); /* Verify if there is something to bulktag */ - if (communities.isEmpty()) { - return Tagging.newInstance(result, retString); + if (communities.isEmpty() && tags.isEmpty()) { + return result; } + tags.forEach(t -> { + Context con = new Context(); + con.setId(t); + List dataInfoList = Arrays + .asList( + OafMapperUtils + .dataInfo( + false, ANNOTATION_DATA_INFO_TYPE, true, false, + OafMapperUtils + .qualifier( + CLASS_ID_ANNOTATION, CLASS_NAME_ANNOTATION, DNET_PROVENANCE_ACTIONS, + DNET_PROVENANCE_ACTIONS), + TAGGING_TRUST)); + result.getContext().add(con); + }); + result.getContext().forEach(c -> { final String cId = c.getId(); if (communities.contains(cId)) { @@ -321,7 +339,7 @@ public class ResultTagger implements Serializable { result.getContext().stream().map(Context::getId).collect(Collectors.toSet())); if (communities.isEmpty()) - return Tagging.newInstance(result, retString); + return result; List toaddcontext = communities .stream() @@ -381,7 +399,7 @@ public class ResultTagger implements Serializable { .collect(Collectors.toList()); result.getContext().addAll(toaddcontext); - return Tagging.newInstance(result, retString); + return result; } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java index aea21f8e5..637fa7f2f 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstants.java @@ -8,6 +8,10 @@ public class TaggingConstants { public static final String BULKTAG_DATA_INFO_TYPE = "bulktagging"; + public static final String ANNOTATION_DATA_INFO_TYPE = "annotation"; + public static final String CLASS_ID_ANNOTATION = "graph:annotation"; + public static final String CLASS_NAME_ANNOTATION = "Graph Annotation"; + public static final String CLASS_ID_SUBJECT = "community:subject"; public static final String CLASS_ID_DATASOURCE = "community:datasource"; public static final String CLASS_ID_CZENODO = "community:zenodocommunity"; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraint.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraint.java new file mode 100644 index 000000000..80c5cbf18 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraint.java @@ -0,0 +1,14 @@ + +package eu.dnetlib.dhp.bulktag.community; + +public class TaggingConstraint extends SelectionConstraints { + private String tagId; + + public String getTagId() { + return tagId; + } + + public void setTagId(String tagId) { + this.tagId = tagId; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraints.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraints.java new file mode 100644 index 000000000..90042af58 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/TaggingConstraints.java @@ -0,0 +1,16 @@ + +package eu.dnetlib.dhp.bulktag.community; + +import java.util.List; + +public class TaggingConstraints { + private List tags; + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/job.properties new file mode 100644 index 000000000..9e7d615a4 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/job.properties @@ -0,0 +1,4 @@ +sourcePath=/tmp/miriam/12_graph_copy +pathMap=/data/bulktagging/pathMap +baseURL=https://services.openaire.eu/openaire/community/ +taggingCriteria={"tags":[{"id":"SM","criteria":[{"constraint":[{"verb":"starts_with_caseinsensitive","field":"title","value":"supplementary material for"},{"verb":"starts_with_caseinsensitive","field":"title","value":"supplementary document for"},{"verb":"starts_with_caseinsensitive","field":"title","value":"figure"},{"verb":"starts_with_caseinsensitive","field":"title","value":"supplementary figure"},{"verb":"starts_with_caseinsensitive","field":"title","value":"supplemental figure"},{"verb":"starts_with_caseinsensitive","field":"title","value":"supplementary table"},{"verb":"starts_with_caseinsensitive","field":"title","value":"table for"}]}]}]} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 5e51b687f..e70752bb7 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -122,9 +122,9 @@ public class BulkTagJobTest { "-taggingConf", taggingConf, "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -162,9 +162,9 @@ public class BulkTagJobTest { "-taggingConf", taggingConf, "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -271,8 +271,8 @@ public class BulkTagJobTest { "-pathMap", workingDir.toString() + "/data/bulktagging/protoMap", "-nameNode", "local", - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/" }); final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); @@ -354,9 +354,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -438,7 +438,7 @@ public class BulkTagJobTest { "-pathMap", workingDir.toString() + "/data/bulktagging/protoMap/pathMap", "-nameNode", "local", - "-taggingCriteria", taggingCriteria + "-taggingCriteria", taggingCriteria }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -496,9 +496,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -620,9 +620,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -751,9 +751,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -854,9 +854,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -900,9 +900,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -957,9 +957,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1009,9 +1009,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1231,9 +1231,9 @@ public class BulkTagJobTest { "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1352,9 +1352,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1475,9 +1475,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1518,9 +1518,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1566,9 +1566,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1606,9 +1606,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1684,9 +1684,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1725,9 +1725,9 @@ public class BulkTagJobTest { // "-baseURL", "https://services.openaire.eu/openaire/community/", "-pathMap", pathMap, "-taggingConf", taggingConf, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1769,9 +1769,9 @@ public class BulkTagJobTest { "/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf_publicationdate.xml")), "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap, - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1874,9 +1874,9 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", "-pathMap", workingDir.toString() + "/data/bulktagging/protoMap/pathMap", - "-taggingCriteria", taggingCriteria, - "-baseURL", "https://services.openaire.eu/openaire/community/", - "-nameNode", "local" + "-taggingCriteria", taggingCriteria, + "-baseURL", "https://services.openaire.eu/openaire/community/", + "-nameNode", "local" }); } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java index b450b95be..abcf4992f 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java @@ -5,7 +5,6 @@ import java.io.StringReader; import java.util.*; import java.util.stream.Collectors; -import eu.dnetlib.dhp.schema.solr.ExternalReference; import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentException; @@ -31,6 +30,7 @@ import eu.dnetlib.dhp.schema.solr.Context; import eu.dnetlib.dhp.schema.solr.Country; import eu.dnetlib.dhp.schema.solr.Datasource; import eu.dnetlib.dhp.schema.solr.EoscIfGuidelines; +import eu.dnetlib.dhp.schema.solr.ExternalReference; import eu.dnetlib.dhp.schema.solr.Instance; import eu.dnetlib.dhp.schema.solr.Journal; import eu.dnetlib.dhp.schema.solr.Measure; @@ -562,10 +562,16 @@ public class ProvisionModelSupport { .orElse(null); } - private static List mapExternalReference(List externalReference) { - return Optional.ofNullable(externalReference) - .map(ext -> ext.stream() - .map(e -> ExternalReference.newInstance( + private static List mapExternalReference( + List externalReference) { + return Optional + .ofNullable(externalReference) + .map( + ext -> ext + .stream() + .map( + e -> ExternalReference + .newInstance( e.getSitename(), e.getLabel(), e.getAlternateLabel(), @@ -573,8 +579,8 @@ public class ProvisionModelSupport { mapCodeLabel(e.getQualifier()), e.getRefidentifier(), e.getQuery())) - .collect(Collectors.toList())) - .orElse(Lists.newArrayList()); + .collect(Collectors.toList())) + .orElse(Lists.newArrayList()); } private static List asContext(List ctxList, diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigExploreTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigExploreTest.java index 41eac2a30..90aef5adc 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigExploreTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigExploreTest.java @@ -1,12 +1,13 @@ package eu.dnetlib.dhp.oa.provision; +import static org.junit.jupiter.api.Assertions.assertEquals; + import java.io.File; import java.io.IOException; import java.net.URI; import java.nio.file.Path; -import eu.dnetlib.dhp.oa.provision.model.SerializableSolrInputDocument; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.solr.client.solrj.SolrQuery; @@ -32,14 +33,13 @@ import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; - -import eu.dnetlib.dhp.oa.provision.utils.ISLookupClient; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.junit.jupiter.api.Assertions.assertEquals; +import eu.dnetlib.dhp.oa.provision.model.SerializableSolrInputDocument; +import eu.dnetlib.dhp.oa.provision.utils.ISLookupClient; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; @ExtendWith(MockitoExtension.class) public class SolrConfigExploreTest { @@ -91,7 +91,7 @@ public class SolrConfigExploreTest { SparkConf conf = new SparkConf(); conf.setAppName(XmlIndexingJobTest.class.getSimpleName()); conf.registerKryoClasses(new Class[] { - SerializableSolrInputDocument.class + SerializableSolrInputDocument.class }); conf.setMaster("local[1]"); @@ -101,10 +101,10 @@ public class SolrConfigExploreTest { conf.set("spark.sql.warehouse.dir", workingDir.resolve("spark").toString()); spark = SparkSession - .builder() - .appName(SolrConfigExploreTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); + .builder() + .appName(SolrConfigExploreTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); // random unassigned HTTP port final int jettyPort = 0; @@ -134,35 +134,35 @@ public class SolrConfigExploreTest { log.info(new ConfigSetAdminRequest.List().process(miniCluster.getSolrClient()).toString()); log - .info( - CollectionAdminRequest.ClusterStatus - .getClusterStatus() - .process(miniCluster.getSolrClient()) - .toString()); + .info( + CollectionAdminRequest.ClusterStatus + .getClusterStatus() + .process(miniCluster.getSolrClient()) + .toString()); NamedList res = createCollection( - miniCluster.getSolrClient(), SHADOW_COLLECTION, 4, 2, 20, CONFIG_NAME); + miniCluster.getSolrClient(), SHADOW_COLLECTION, 4, 2, 20, CONFIG_NAME); res.forEach(o -> log.info(o.toString())); // miniCluster.getSolrClient().setDefaultCollection(SHADOW_COLLECTION); res = createCollection( - miniCluster.getSolrClient(), PUBLIC_COLLECTION, 4, 2, 20, CONFIG_NAME); + miniCluster.getSolrClient(), PUBLIC_COLLECTION, 4, 2, 20, CONFIG_NAME); res.forEach(o -> log.info(o.toString())); admin = new SolrAdminApplication(miniCluster.getZkClient().getZkServerAddress()); CollectionAdminResponse rsp = (CollectionAdminResponse) admin - .createAlias(ProvisionConstants.PUBLIC_ALIAS_NAME, PUBLIC_COLLECTION); + .createAlias(ProvisionConstants.PUBLIC_ALIAS_NAME, PUBLIC_COLLECTION); assertEquals(0, rsp.getStatus()); rsp = (CollectionAdminResponse) admin.createAlias(ProvisionConstants.SHADOW_ALIAS_NAME, SHADOW_COLLECTION); assertEquals(0, rsp.getStatus()); log - .info( - CollectionAdminRequest.ClusterStatus - .getClusterStatus() - .process(miniCluster.getSolrClient()) - .toString()); + .info( + CollectionAdminRequest.ClusterStatus + .getClusterStatus() + .process(miniCluster.getSolrClient()) + .toString()); } @@ -180,7 +180,8 @@ public class SolrConfigExploreTest { new XmlIndexingJob(spark, inputPath, SHADOW_FORMAT, ProvisionConstants.SHADOW_ALIAS_NAME, batchSize) .run(isLookupClient); - Assertions.assertEquals(0, miniCluster.getSolrClient().commit(ProvisionConstants.SHADOW_ALIAS_NAME).getStatus()); + Assertions + .assertEquals(0, miniCluster.getSolrClient().commit(ProvisionConstants.SHADOW_ALIAS_NAME).getStatus()); String[] queryStrings = { "cancer", @@ -200,7 +201,8 @@ public class SolrConfigExploreTest { // System.out.println(rsp.getExplainMap()); for (SolrDocument doc : rsp.getResults()) { - log.info( + log + .info( doc.get("score") + "\t" + doc.get("__indexrecordidentifier") + "\t" + doc.get("resultidentifier") + "\t" + @@ -216,7 +218,7 @@ public class SolrConfigExploreTest { } protected static NamedList createCollection(CloudSolrClient client, String name, int numShards, - int replicationFactor, int maxShardsPerNode, String configName) throws Exception { + int replicationFactor, int maxShardsPerNode, String configName) throws Exception { ModifiableSolrParams modParams = new ModifiableSolrParams(); modParams.set(CoreAdminParams.ACTION, CollectionParams.CollectionAction.CREATE.name()); modParams.set("name", name); diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java index 2c62389c6..c04fa1cc6 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/SolrConfigTest.java @@ -85,7 +85,8 @@ public class SolrConfigTest extends SolrTest { new XmlIndexingJob(spark, inputPath, SHADOW_FORMAT, ProvisionConstants.SHADOW_ALIAS_NAME, batchSize) .run(isLookupClient); - Assertions.assertEquals(0, miniCluster.getSolrClient().commit(ProvisionConstants.SHADOW_ALIAS_NAME).getStatus()); + Assertions + .assertEquals(0, miniCluster.getSolrClient().commit(ProvisionConstants.SHADOW_ALIAS_NAME).getStatus()); String[] queryStrings = { "cancer",