From e168d95ec0bdc361621ea8470c000c1177453e1b Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 11:58:28 +0100 Subject: [PATCH] bug fix in the authormatch comparator, implementation of tests --- .../test.properties | 3 +- .../src/main/java/eu/dnetlib/Deduper.java | 8 +- .../eu/dnetlib/jobs/SparkCreateSimRels.java | 2 +- .../java/eu/dnetlib/pace/DedupLocalTest.java | 94 ++++++++-------- .../pace/config/pub.new.tree.conf.json | 81 +++++++++----- .../pace/common/AbstractPaceFunctions.java | 7 ++ .../eu/dnetlib/pace/tree/AuthorsMatch.java | 102 +++++++++++++----- .../pace/util/BlockProcessorForTesting.java | 26 ++--- .../pace/comparators/ComparatorTest.java | 18 +++- .../java/eu/dnetlib/pace/util/UtilTest.java | 18 +++- 10 files changed, 236 insertions(+), 123 deletions(-) diff --git a/dhp-build/dhp-build-properties-maven-plugin/test.properties b/dhp-build/dhp-build-properties-maven-plugin/test.properties index 6810a00..3a47164 100644 --- a/dhp-build/dhp-build-properties-maven-plugin/test.properties +++ b/dhp-build/dhp-build-properties-maven-plugin/test.properties @@ -1,2 +1 @@ -# Mon Sep 13 14:51:29 CEST 2021 -projectPropertyKey=projectPropertyValue +# Thu Dec 30 13:11:51 CET 2021 diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java b/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java index ab7cb2c..6a5bdaf 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java @@ -85,7 +85,7 @@ public class Deduper implements Serializable { } public static JavaRDD computeRelations( - JavaSparkContext context, JavaPairRDD blocks, DedupConfig config, boolean useTree) { + JavaSparkContext context, JavaPairRDD blocks, DedupConfig config, boolean useTree, boolean noMatch) { Map accumulators = Utility.constructAccumulator(config, context.sc()); return blocks @@ -93,7 +93,7 @@ public class Deduper implements Serializable { it -> { final SparkReporter reporter = new SparkReporter(accumulators); new BlockProcessorForTesting(config) - .processSortedBlock(it._1(), it._2().getDocuments(), reporter, useTree); + .processSortedBlock(it._1(), it._2().getDocuments(), reporter, useTree, noMatch); return reporter.getRelations().iterator(); }) .mapToPair(it -> new Tuple2<>(it._1() + it._2(), new Relation(it._1(), it._2(), "simRel"))) @@ -101,7 +101,7 @@ public class Deduper implements Serializable { .map(Tuple2::_2); } - public static void createSimRels(DedupConfig dedupConf, SparkSession spark, String entitiesPath, String simRelsPath, boolean useTree){ + public static void createSimRels(DedupConfig dedupConf, SparkSession spark, String entitiesPath, String simRelsPath, boolean useTree, boolean noMatch){ JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -117,7 +117,7 @@ public class Deduper implements Serializable { JavaPairRDD blocks = Deduper.createSortedBlocks(mapDocuments, dedupConf); // create relations by comparing only elements in the same group - JavaRDD relations = Deduper.computeRelations(sc, blocks, dedupConf, useTree); + JavaRDD relations = Deduper.computeRelations(sc, blocks, dedupConf, useTree, noMatch); // save the simrel in the workingdir spark diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/jobs/SparkCreateSimRels.java b/dnet-dedup-test/src/main/java/eu/dnetlib/jobs/SparkCreateSimRels.java index fb34853..6a21beb 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/jobs/SparkCreateSimRels.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/jobs/SparkCreateSimRels.java @@ -83,7 +83,7 @@ public class SparkCreateSimRels extends AbstractSparkJob { JavaPairRDD blocks = Deduper.createSortedBlocks(mapDocuments, dedupConfig); // create relations by comparing only elements in the same group - JavaRDD relations = Deduper.computeRelations(sc, blocks, dedupConfig, useTree); + JavaRDD relations = Deduper.computeRelations(sc, blocks, dedupConfig, useTree, false); // save the simrel in the workingdir spark diff --git a/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java b/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java index d70716f..9aa7b48 100644 --- a/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java +++ b/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java @@ -20,7 +20,11 @@ import org.apache.hadoop.fs.Path; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.ForeachFunction; import org.apache.spark.api.java.function.PairFunction; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; @@ -175,12 +179,13 @@ public class DedupLocalTest extends DedupTestUtils { @Test //full deduplication workflow test @Ignore - public void deduplicationTest() throws IOException { + public void deduplicationTest() throws Exception { //custom parameters for this test - DedupConfig dedupConfig = DedupConfig.load(readFileFromHDFS("/Users/miconis/IdeaProjects/DnetDedup/dnet-dedup/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json")); - String inputPath = "/Users/miconis/Desktop/FDup paper/publications_dump_10Mi"; - String workingPath = "/tmp/dedup_working_dir"; + DedupConfig dedupConfig = DedupConfig.load(readFileFromHDFS( + Paths.get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json").toURI()).toFile().getAbsolutePath() + )); + String inputPath = Paths.get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/examples/publications.dump.1000.json").toURI()).toFile().getAbsolutePath(); String simRelsPath = workingPath + "/simrels"; String mergeRelsPath = workingPath + "/mergerels"; String outputPath = workingPath + "/dedup"; @@ -191,7 +196,8 @@ public class DedupLocalTest extends DedupTestUtils { spark, inputPath, simRelsPath, - true + true, + false ); long simrels_time = System.currentTimeMillis() - before_simrels; @@ -234,11 +240,11 @@ public class DedupLocalTest extends DedupTestUtils { @Test //test the match between two JSON @Ignore public void matchTest() throws Exception { - String json1 = "{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"pid\": [], \"oaiprovenance\": {\"originDescription\": {\"metadataNamespace\": \"http://www.openarchives.org/OAI/2.0/oai_dc/\", \"harvestDate\": \"2020-05-16T09:19:18.795Z\", \"baseURL\": \"https%3A%2F%2Flekythos.library.ucy.ac.cy%2Foai%2Frequest\", \"datestamp\": \"2020-05-14T07:35:25Z\", \"altered\": true, \"identifier\": \"oai:lekythos.library.ucy.ac.cy:10797/13865\"}}, \"relevantdate\": [], \"contributor\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"Agosti, Maristella\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"Borbinha, Jos\\u00e9\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"\\u039a\\u03b1\\u03c0\\u03b9\\u03b4\\u03ac\\u03ba\\u03b7\\u03c2, \\u03a3\\u03b1\\u03c1\\u03ac\\u03bd\\u03c4\\u03bf\\u03c2\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"Kapidakis, Sarantos\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"\\u03a4\\u03bc\\u03ae\\u03bc\\u03b1 \\u0391\\u03c1\\u03c7\\u03b5\\u03b9\\u03bf\\u03bd\\u03bf\\u03bc\\u03af\\u03b1\\u03c2 \\u03ba\\u03b1\\u03b9 \\u0392\\u03b9\\u03b2\\u03bb\\u03b9\\u03bf\\u03b8\\u03b7\\u03ba\\u03bf\\u03bd\\u03bf\\u03bc\\u03af\\u03b1\\u03c2, \\u0395\\u03c1\\u03b3\\u03b1\\u03c3\\u03c4\\u03ae\\u03c1\\u03b9\\u03bf \\u03a8\\u03b7\\u03c6\\u03b9\\u03b1\\u03ba\\u03ce\\u03bd \\u0392\\u03b9\\u03b2\\u03bb\\u03b9\\u03bf\\u03b8\\u03b7\\u03ba\\u03ce\\u03bd \\u03ba\\u03b1\\u03b9 \\u0397\\u03bb\\u03b5\\u03ba\\u03c4\\u03c1\\u03bf\\u03bd\\u03b9\\u03ba\\u03ae\\u03c2 \\u0394\\u03b7\\u03bc\\u03bf\\u03c3\\u03af\\u03b5\\u03c5\\u03c3\\u03b7\\u03c2, \\u0399\\u03cc\\u03bd\\u03b9\\u03bf \\u03a0\\u03b1\\u03bd\\u03b5\\u03c0\\u03b9\\u03c3\\u03c4\\u03ae\\u03bc\\u03b9\\u03bf\"}], \"id\": \"50|od______2389::3e967b6804e6dfafb1d47c81ad5011f3\", \"description\": [], \"lastupdatetimestamp\": 1628685153367, \"author\": [], \"collectedfrom\": [{\"value\": \"LEKYTHOS\", \"key\": \"10|opendoar____::063e26c670d07bb7c4d30e6fc69fe056\"}], \"instance\": [{\"refereed\": {\"classid\": \"UNKNOWN\", \"classname\": \"Unknown\", \"schemename\": \"dnet:review_levels\", \"schemeid\": \"dnet:review_levels\"}, \"hostedby\": {\"value\": \"LEKYTHOS\", \"key\": \"10|opendoar____::063e26c670d07bb7c4d30e6fc69fe056\"}, \"url\": [\"http://hdl.handle.net/10797/13865\"], \"pid\": [], \"distributionlocation\": \"\", \"alternateIdentifier\": [], \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"2009-01-01\"}, \"collectedfrom\": {\"value\": \"LEKYTHOS\", \"key\": \"10|opendoar____::063e26c670d07bb7c4d30e6fc69fe056\"}, \"accessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0004\", \"classname\": \"Conference object\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}], \"resulttype\": {\"classid\": \"publication\", \"classname\": \"publication\", \"schemename\": \"dnet:result_typologies\", \"schemeid\": \"dnet:result_typologies\"}, \"dateofcollection\": \"2020-05-16T09:19:18.795Z\", \"fulltext\": [], \"dateoftransformation\": \"2021-05-09T17:22:10.634Z\", \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"2009-01-01\"}, \"format\": [], \"subject\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"value\": \"\\u0392\\u03b9\\u03b2\\u03bb\\u03b9\\u03bf\\u03b8\\u03ae\\u03ba\\u03b5\\u03c2, \\u03a3\\u03c5\\u03bd\\u03ad\\u03b4\\u03c1\\u03b9\\u03b1, \\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"value\": \"Libraries, Congresses, Greece\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"value\": \"\\u0392\\u03b9\\u03b2\\u03bb\\u03b9\\u03bf\\u03b8\\u03ae\\u03ba\\u03b5\\u03c2 \\u03c9\\u03c2 \\u03c6\\u03c5\\u03c3\\u03b9\\u03ba\\u03ad\\u03c2 \\u03c3\\u03c5\\u03bb\\u03bb\\u03bf\\u03b3\\u03ad\\u03c2\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"value\": \"Libraries as physical collections\"}], \"coverage\": [], \"externalReference\": [], \"publisher\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"Springer\"}, \"language\": {\"classid\": \"eng\", \"classname\": \"English\", \"schemename\": \"dnet:languages\", \"schemeid\": \"dnet:languages\"}, \"bestaccessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"country\": [], \"extraInfo\": [], \"originalId\": [\"oai:lekythos.library.ucy.ac.cy:10797/13865\", \"50|od______2389::3e967b6804e6dfafb1d47c81ad5011f3\"], \"source\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"13th European Conference, ECDL 2009\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"https://www.springer.com/gp/book/9783642043451\"}], \"context\": [], \"title\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"main title\", \"classname\": \"main title\", \"schemename\": \"dnet:dataCite_title\", \"schemeid\": \"dnet:dataCite_title\"}, \"value\": \"Research and Advanced Technology for Digital Libraries\"}]}"; - String json2 = "{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"resourcetype\": {\"classid\": \"0002\", \"classname\": \"0002\", \"schemename\": \"dnet:dataCite_resource\", \"schemeid\": \"dnet:dataCite_resource\"}, \"pid\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"handle\", \"classname\": \"Handle\", \"schemename\": \"dnet:pid_types\", \"schemeid\": \"dnet:pid_types\"}, \"value\": \"11245.1/b69d387a-80f6-4675-8130-2488bd93ed43\"}], \"oaiprovenance\": {\"originDescription\": {\"metadataNamespace\": \"\", \"harvestDate\": \"2021-08-04T12:49:02.536Z\", \"baseURL\": \"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif\", \"datestamp\": \"2020-06-02T10:56:09Z\", \"altered\": true, \"identifier\": \"oai:services.nod.dans.knaw.nl:Publications/uvapub:oai:dare.uva.nl:publications/b69d387a-80f6-4675-8130-2488bd93ed43\"}}, \"relevantdate\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"Issued\", \"classname\": \"Issued\", \"schemename\": \"dnet:dataCite_date\", \"schemeid\": \"dnet:dataCite_date\"}, \"value\": \"2017-01-01\"}], \"contributor\": [], \"id\": \"50|dris___00893::f8a8a3eb400fb07d19c5b28942f06453\", \"description\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"This book constitutes the proceedings of the 21st International Conference on Theory and Practice of Digital Libraries, TPDL 2017, held in Thessaloniki, Greece, in September 2017. The 39 full papers, 11 short papers, and 10 poster papers presented in this volume were carefully reviewed and selected from 106 submissions. In addition the book contains 7 doctoral consortium papers. The contributions are organized in topical sections named: linked data; corpora; data in digital libraries; quality in digital libraries; digital humanities; entities; scholarly communication; sentiment analysis; information behavior; information retrieval.\"}], \"lastupdatetimestamp\": 1628685003505, \"author\": [{\"surname\": \"Kamps\", \"name\": \"J.\", \"pid\": [], \"rank\": 1, \"affiliation\": [], \"fullname\": \"Kamps, J.\"}, {\"surname\": \"Tsakonas\", \"name\": \"G.\", \"pid\": [], \"rank\": 2, \"affiliation\": [], \"fullname\": \"Tsakonas, G.\"}, {\"surname\": \"Manolopoulos\", \"name\": \"Y.\", \"pid\": [], \"rank\": 3, \"affiliation\": [], \"fullname\": \"Manolopoulos, Y.\"}, {\"surname\": \"Iliadis\", \"name\": \"L.\", \"pid\": [], \"rank\": 4, \"affiliation\": [], \"fullname\": \"Iliadis, L.\"}, {\"surname\": \"Karydis\", \"name\": \"I.\", \"pid\": [], \"rank\": 5, \"affiliation\": [], \"fullname\": \"Karydis, I.\"}], \"collectedfrom\": [{\"value\": \"NARCIS\", \"key\": \"10|eurocrisdris::fe4903425d9040f680d8610d9079ea14\"}], \"instance\": [{\"refereed\": {\"classid\": \"UNKNOWN\", \"classname\": \"Unknown\", \"schemename\": \"dnet:review_levels\", \"schemeid\": \"dnet:review_levels\"}, \"hostedby\": {\"value\": \"NARCIS\", \"key\": \"10|eurocrisdris::fe4903425d9040f680d8610d9079ea14\"}, \"url\": [\"\", \"http://dx.doi.org/10.1007/978-3-319-67008-9\"], \"pid\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"handle\", \"classname\": \"Handle\", \"schemename\": \"dnet:pid_types\", \"schemeid\": \"dnet:pid_types\"}, \"value\": \"11245.1/b69d387a-80f6-4675-8130-2488bd93ed43\"}], \"alternateIdentifier\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"doi\", \"classname\": \"Digital Object Identifier\", \"schemename\": \"dnet:pid_types\", \"schemeid\": \"dnet:pid_types\"}, \"value\": \"10.1007/978-3-319-67008-9\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"urn\", \"classname\": \"urn\", \"schemename\": \"dnet:pid_types\", \"schemeid\": \"dnet:pid_types\"}, \"value\": \"urn:nbn:nl:ui:29-b69d387a-80f6-4675-8130-2488bd93ed43\"}], \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"2017-01-01\"}, \"collectedfrom\": {\"value\": \"NARCIS\", \"key\": \"10|eurocrisdris::fe4903425d9040f680d8610d9079ea14\"}, \"accessright\": {\"classid\": \"CLOSED\", \"classname\": \"Closed Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0002\", \"classname\": \"Book\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}], \"resulttype\": {\"classid\": \"publication\", \"classname\": \"publication\", \"schemename\": \"dnet:result_typologies\", \"schemeid\": \"dnet:result_typologies\"}, \"dateofcollection\": \"2021-08-04T12:49:02.536Z\", \"fulltext\": [], \"dateoftransformation\": \"2021-08-05T10:41:57.844Z\", \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"value\": \"2017-01-01\"}, \"format\": [], \"subject\": [], \"coverage\": [], \"externalReference\": [], \"language\": {\"classid\": \"en\", \"classname\": \"en\", \"schemename\": \"dnet:languages\", \"schemeid\": \"dnet:languages\"}, \"bestaccessright\": {\"classid\": \"CLOSED\", \"classname\": \"Closed Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"country\": [], \"extraInfo\": [], \"originalId\": [\"50|dris___00893::f8a8a3eb400fb07d19c5b28942f06453\", \"oai:services.nod.dans.knaw.nl:Publications/uvapub:oai:dare.uva.nl:publications/b69d387a-80f6-4675-8130-2488bd93ed43\"], \"source\": [], \"context\": [], \"title\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"main title\", \"classname\": \"main title\", \"schemename\": \"dnet:dataCite_title\", \"schemeid\": \"dnet:dataCite_title\"}, \"value\": \"Research and Advanced Technology for Digital Libraries\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:datasetarchive\", \"classname\": \"sysimport:crosswalk:datasetarchive\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"0.9\"}, \"qualifier\": {\"classid\": \"main title\", \"classname\": \"main title\", \"schemename\": \"dnet:dataCite_title\", \"schemeid\": \"dnet:dataCite_title\"}, \"value\": \"21st International Conference on Theory and Practice of Digital Libraries, TPDL 2017, Thessaloniki, Greece, September 18-21, 2017 : proceedings\"}]}"; + String json1 = "{\"context\": [], \"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:repository\", \"classname\": \"sysimport:crosswalk:repository\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": true, \"inferenceprovenance\": \"dedup-similarity-result-levenstein\", \"invisible\": false, \"trust\": \"0.9\"}, \"resourcetype\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"pid\": [], \"contributor\": [], \"resulttype\": {\"classid\": \"publication\", \"classname\": \"publication\", \"schemename\": \"dnet:result_typologies\", \"schemeid\": \"dnet:result_typologies\"}, \"relevantdate\": [], \"collectedfrom\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Scientific Electronic Library Online - Brazil\", \"key\": \"10|opendoar____::996a7fa078cc36c46d02f9af3bef918b\"}], \"id\": \"50|od_______608::5cea59e3711ee7fa68f626b4350ca947\", \"subject\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"keyword\", \"classname\": \"keyword\", \"schemename\": \"dnet:result_subject\", \"schemeid\": \"dnet:result_subject\"}, \"value\": \"dengue 4\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"keyword\", \"classname\": \"keyword\", \"schemename\": \"dnet:result_subject\", \"schemeid\": \"dnet:result_subject\"}, \"value\": \"epidemiology\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"keyword\", \"classname\": \"keyword\", \"schemename\": \"dnet:result_subject\", \"schemeid\": \"dnet:result_subject\"}, \"value\": \"deaths\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"keyword\", \"classname\": \"keyword\", \"schemename\": \"dnet:result_subject\", \"schemeid\": \"dnet:result_subject\"}, \"value\": \"genotyping\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"keyword\", \"classname\": \"keyword\", \"schemename\": \"dnet:result_subject\", \"schemeid\": \"dnet:result_subject\"}, \"value\": \"Cear\\\\\\\\xe1/Brazil\"}], \"embargoenddate\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"lastupdatetimestamp\": 0, \"author\": [{\"surname\": \"Ramalho\", \"name\": \"Izabel Leti\\\\\\\\u0301cia Cavalcante\", \"pid\": [], \"rank\": 1, \"affiliation\": [], \"fullname\": \"Ramalho, Izabel Let\\\\\\\\xedcia Cavalcante\"}, {\"surname\": \"Arau\\\\\\\\u0301jo\", \"name\": \"Fernanda Montenegro Carvalho\", \"pid\": [], \"rank\": 2, \"affiliation\": [], \"fullname\": \"Ara\\\\\\\\xfajo, Fernanda Montenegro de Carvalho\"}, {\"surname\": \"Cavalcanti\", \"name\": \"Luciano Pamplona Go\\\\\\\\u0301es\", \"pid\": [], \"rank\": 3, \"affiliation\": [], \"fullname\": \"Cavalcanti, Luciano Pamplona de G\\\\\\\\xf3es\"}, {\"surname\": \"Braga\", \"name\": \"Deborah Nunes Melo\", \"pid\": [], \"rank\": 4, \"affiliation\": [], \"fullname\": \"Braga, Deborah Nunes Melo\"}, {\"surname\": \"Perdiga\\\\\\\\u0303o\", \"name\": \"Anne Carolinne Bezerra\", \"pid\": [], \"rank\": 5, \"affiliation\": [], \"fullname\": \"Perdig\\\\\\\\xe3o, Anne Carolinne Bezerra\"}, {\"surname\": \"Santos\", \"name\": \"Flavia Barreto Dos\", \"pid\": [], \"rank\": 6, \"affiliation\": [], \"fullname\": \"Santos, Flavia Barreto dos\"}, {\"surname\": \"Nogueira\", \"name\": \"Fernanda Bruycker\", \"pid\": [], \"rank\": 7, \"affiliation\": [], \"fullname\": \"Nogueira, Fernanda de Bruycker\"}, {\"surname\": \"Esco\\\\\\\\u0301ssia\", \"name\": \"Kiliana Nogueira Farias Da\", \"pid\": [], \"rank\": 8, \"affiliation\": [], \"fullname\": \"Esc\\\\\\\\xf3ssia, Kiliana Nogueira Farias da\"}, {\"surname\": \"Guedes\", \"name\": \"Maria Izabel Florindo\", \"pid\": [], \"rank\": 9, \"affiliation\": [], \"fullname\": \"Guedes, Maria Izabel Florindo\"}], \"instance\": [{\"refereed\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"hostedby\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Scientific Electronic Library Online - Brazil\", \"key\": \"10|opendoar____::996a7fa078cc36c46d02f9af3bef918b\"}, \"processingchargeamount\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"license\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"http://creativecommons.org/licenses/by/4.0/\"}, \"url\": [\"http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0074-02762018001100300&lng=en&tlng=en\"], \"distributionlocation\": \"\", \"processingchargecurrency\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"2018-10-18\"}, \"collectedfrom\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Scientific Electronic Library Online - Brazil\", \"key\": \"10|opendoar____::996a7fa078cc36c46d02f9af3bef918b\"}, \"accessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0001\", \"classname\": \"Article\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}], \"dateofcollection\": \"2018-10-17T15:29:29.5Z\", \"fulltext\": [], \"dateoftransformation\": \"2020-03-05T17:09:49.618Z\", \"description\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"BACKGROUND The first dengue cases in Brazil with laboratory confirmation occurred in the northern region of the country, with the isolation of two serotypes, dengue virus 1 (DENV-1) and DENV-4. In Cear\\\\\\\\xe1, the introduction of DENV-4 was reported during a DENV-1 epidemic in 2011, with only two isolations. OBJECTIVES The aim of this study was to characterise the first DENV-4 epidemic in the state of Cear\\\\\\\\xe1, Brazil. METHODS The study population was composed of patients with suspected dengue that were reported to health care units from January to December 2012. The laboratory confirmation of infection was made by viral isolation, reverse transcription polymerase chain reaction (RT-PCR), AgNS1, immunohistochemistry and IgM enzyme-linked immunosorbent assay (ELISA). MAIN CONCLUSIONS In the study year, 72,211 suspected dengue cases were reported and 51,865 of these cases (71.8%) were confirmed to be positive. Co-circulation of three serotypes, DENV-1, DENV-3 and DENV-4, was detected with a predominance of DENV-4 (95.3%). Most cases were not severe, but there were 44 fatal outcomes. DENV-4 Genotype II was identified for the first time in Cear\\\\\\\\xe1.\"}], \"format\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"text/html\"}], \"journal\": {\"issnPrinted\": \"\", \"conferencedate\": \"\", \"conferenceplace\": \"\", \"name\": \"\", \"edition\": \"\", \"vol\": \"\", \"sp\": \"\", \"iss\": \"\", \"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"issnOnline\": \"\", \"ep\": \"\", \"issnLinking\": \"\"}, \"coverage\": [], \"publisher\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Instituto Oswaldo Cruz, Minist\\\\\\\\xe9rio da Sa\\\\\\\\xfade\"}, \"language\": {\"classid\": \"eng\", \"classname\": \"English\", \"schemename\": \"dnet:languages\", \"schemeid\": \"dnet:languages\"}, \"bestaccessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"country\": [], \"extraInfo\": [], \"originalId\": [\"oai:scielo:S0074-02762018001100300\"], \"source\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Mem\\\\\\\\xf3rias do Instituto Oswaldo Cruz, Volume: 113, Issue: 11, Article number: e180320, Published: 18 OCT 2018\"}], \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"2018-10-18\"}, \"title\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"main title\", \"classname\": \"main title\", \"schemename\": \"dnet:dataCite_title\", \"schemeid\": \"dnet:dataCite_title\"}, \"value\": \"Dengue 4 in Cear\\\\\\\\xe1, Brazil: characterisation of epidemiological and laboratorial aspects and causes of death during the first epidemic in the state\"}]}"; + String json2 = "{\"context\": [], \"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"sysimport:actionset\", \"classname\": \"sysimport:actionset\", \"schemename\": \"dnet:provenanceActions\", \"schemeid\": \"dnet:provenanceActions\"}, \"inferred\": true, \"inferenceprovenance\": \"dedup-similarity-result-levenstein\", \"invisible\": false, \"trust\": \"0.9\"}, \"resourcetype\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"pid\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"doi\", \"classname\": \"doi\", \"schemename\": \"dnet:pid_types\", \"schemeid\": \"dnet:pid_types\"}, \"value\": \"10.1590/0074-02760180320\"}], \"contributor\": [], \"resulttype\": {\"classid\": \"publication\", \"classname\": \"publication\", \"schemename\": \"dnet:result_typologies\", \"schemeid\": \"dnet:result_typologies\"}, \"relevantdate\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"published-online\", \"classname\": \"published-online\", \"schemename\": \"dnet:dataCite_date\", \"schemeid\": \"dnet:dataCite_date\"}, \"value\": \"2018-10-18\"}], \"collectedfrom\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Crossref\", \"key\": \"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Microsoft Academic Graph\", \"key\": \"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"ORCID\", \"key\": \"10|openaire____::806360c771262b4d6770e7cdf04b5c5a\"}, {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"UnpayWall\", \"key\": \"10|openaire____::8ac8380272269217cb09a928c8caa993\"}], \"id\": \"50|doiboost____::ceb0e80cefc02755597cfc1221fc5582\", \"subject\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"keyword\", \"classname\": \"keyword\", \"schemename\": \"dnet:subject\", \"schemeid\": \"dnet:subject\"}, \"value\": \"Microbiology (medical)\"}], \"embargoenddate\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"lastupdatetimestamp\": 0, \"author\": [{\"surname\": \"Ramalho\", \"name\": \"Izabel Let\\\\\\\\xedcia Cavalcante\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2278015306\"}], \"rank\": 1, \"affiliation\": [], \"fullname\": \"Izabel Let\\\\\\\\xedcia Cavalcante Ramalho\"}, {\"surname\": \"Ara\\\\\\\\xfajo\", \"name\": \"Fernanda Montenegro de Carvalho\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2155354179\"}], \"rank\": 2, \"affiliation\": [], \"fullname\": \"Fernanda Montenegro de Carvalho Ara\\\\\\\\xfajo\"}, {\"surname\": \"Cavalcanti\", \"name\": \"Luciano Pamplona de G\\\\\\\\xf3es\", \"pid\": [{\"qualifier\": {\"classid\": \"ORCID\", \"classname\": \"ORCID\"}, \"value\": \"0000-0002-3440-1182\"}, {\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2169061508\"}], \"rank\": 3, \"affiliation\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Federal University of Cear\\\\\\\\xe1\"}], \"fullname\": \"Luciano Pamplona de G\\\\\\\\xf3es Cavalcanti\"}, {\"surname\": \"Braga\", \"name\": \"Deborah Nunes Melo\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2269038449\"}], \"rank\": 4, \"affiliation\": [], \"fullname\": \"Deborah Nunes Melo Braga\"}, {\"surname\": \"Perdig\\\\\\\\xe3o\", \"name\": \"Anne Carolinne Bezerra\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2052668005\"}], \"rank\": 5, \"affiliation\": [], \"fullname\": \"Anne Carolinne Bezerra Perdig\\\\\\\\xe3o\"}, {\"surname\": \"Santos\", \"name\": \"Flavia Barreto dos\", \"pid\": [{\"qualifier\": {\"classid\": \"ORCID\", \"classname\": \"ORCID\"}, \"value\": \"0000-0002-1309-5366\"}, {\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2557272706\"}], \"rank\": 6, \"affiliation\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Oswaldo Cruz Foundation\"}], \"fullname\": \"Flavia Barreto dos Santos\"}, {\"surname\": \"Nogueira\", \"name\": \"Fernanda de Bruycker\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2335476746\"}], \"rank\": 7, \"affiliation\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Oswaldo Cruz Foundation\"}], \"fullname\": \"Fernanda de Bruycker Nogueira\"}, {\"surname\": \"Esc\\\\\\\\xf3ssia\", \"name\": \"Kiliana Nogueira Farias da\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"329386728\"}], \"rank\": 8, \"affiliation\": [], \"fullname\": \"Kiliana Nogueira Farias da Esc\\\\\\\\xf3ssia\"}, {\"surname\": \"Guedes\", \"name\": \"Maria Izabel Florindo\", \"pid\": [{\"qualifier\": {\"classid\": \"MAG Identifier\", \"classname\": \"MAG Identifier\"}, \"value\": \"2132750169\"}], \"rank\": 9, \"affiliation\": [], \"fullname\": \"Maria Izabel Florindo Guedes\"}], \"instance\": [{\"refereed\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"hostedby\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Unknown Repository\", \"key\": \"10|openaire____::55045bd2a65019fd8e6741a755395c8c\"}, \"processingchargeamount\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"license\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"url\": [\"http://www.scielo.br/pdf/mioc/v113n11/1678-8060-mioc-113-11-e180320.pdf\"], \"distributionlocation\": \"\", \"processingchargecurrency\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"collectedfrom\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"UnpayWall\", \"key\": \"10|openaire____::8ac8380272269217cb09a928c8caa993\"}, \"accessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0001\", \"classname\": \"Article\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}, {\"refereed\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"hostedby\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Unknown Repository\", \"key\": \"10|openaire____::55045bd2a65019fd8e6741a755395c8c\"}, \"processingchargeamount\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"license\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"url\": [\"http://www.scielo.br/pdf/mioc/v113n11/1678-8060-mioc-113-11-e180320.pdf\"], \"distributionlocation\": \"\", \"processingchargecurrency\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"collectedfrom\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Crossref\", \"key\": \"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2\"}, \"accessright\": {\"classid\": \"UNKNOWN\", \"classname\": \"not available\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0001\", \"classname\": \"Article\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}, {\"refereed\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"hostedby\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Unknown Repository\", \"key\": \"10|openaire____::55045bd2a65019fd8e6741a755395c8c\"}, \"processingchargeamount\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"license\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"url\": [\"https://academic.microsoft.com/#/detail/2897780704\"], \"distributionlocation\": \"\", \"processingchargecurrency\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"collectedfrom\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Microsoft Academic Graph\", \"key\": \"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a\"}, \"accessright\": {\"classid\": \"UNKNOWN\", \"classname\": \"not available\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0001\", \"classname\": \"Article\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}, {\"refereed\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"hostedby\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Mem\\\\\\\\xf3rias do Instituto Oswaldo Cruz.\", \"key\": \"10|doajarticles::91d64232489446b40bc194bf95493001\"}, \"processingchargeamount\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"license\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"url\": [\"http://dx.doi.org/10.1590/0074-02760180320\"], \"distributionlocation\": \"\", \"processingchargecurrency\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"collectedfrom\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"Crossref\", \"key\": \"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2\"}, \"accessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0001\", \"classname\": \"Article\", \"schemename\": \"dnet:publication_resource\", \"schemeid\": \"dnet:publication_resource\"}}], \"dateofcollection\": \"2019-02-15\", \"fulltext\": [], \"dateoftransformation\": \"\", \"description\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"The first dengue cases in Brazil with laboratory confirmation occurred in the northern region of the country, with the isolation of two serotypes, dengue virus 1 (DENV-1) and DENV-4. In Ceara, the introduction of DENV-4 was reported during a DENV-1 epidemic in 2011, with only two isolations. OBJECTIVES The aim of this study was to characterise the first DENV-4 epidemic in the state of Ceara, Brazil. METHODS The study population was composed of patients with suspected dengue that were reported to health care units from January to December 2012. The laboratory confirmation of infection was made by viral isolation, reverse transcription polymerase chain reaction (RT-PCR), AgNS1, immunohistochemistry and IgM enzyme-linked immunosorbent assay (ELISA). MAIN CONCLUSIONS In the study year, 72,211 suspected dengue cases were reported and 51,865 of these cases (71.8%) were confirmed to be positive. Co-circulation of three serotypes, DENV-1, DENV-3 and DENV-4, was detected with a predominance of DENV-4 (95.3%). Most cases were not severe, but there were 44 fatal outcomes. DENV-4 Genotype II was identified for the first time in Ceara\"}], \"format\": [], \"journal\": {\"issnPrinted\": \"0074-0276\", \"conferencedate\": \"\", \"conferenceplace\": \"\", \"name\": \"FapUNIFESP (SciELO)\", \"edition\": \"\", \"vol\": \"\", \"sp\": \"\", \"iss\": \"\", \"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"issnOnline\": \"1678-8060\", \"ep\": \"\", \"issnLinking\": \"\"}, \"coverage\": [], \"publisher\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"\"}, \"language\": {\"classid\": \"und\", \"classname\": \"Undetermined\", \"schemename\": \"dnet:languages\", \"schemeid\": \"dnet:languages\"}, \"bestaccessright\": {\"classid\": \"OPEN\", \"classname\": \"Open Access\", \"schemename\": \"dnet:access_modes\", \"schemeid\": \"dnet:access_modes\"}, \"country\": [], \"extraInfo\": [], \"originalId\": [\"10.1590/0074-02760180320\"], \"source\": [], \"dateofacceptance\": {\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"value\": \"2018-10-18\"}, \"title\": [{\"dataInfo\": {\"deletedbyinference\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemename\": \"\", \"schemeid\": \"\"}, \"inferred\": false, \"inferenceprovenance\": \"\", \"invisible\": false, \"trust\": \"\"}, \"qualifier\": {\"classid\": \"main title\", \"classname\": \"main title\", \"schemename\": \"dnet:dataCite_title\", \"schemeid\": \"dnet:dataCite_title\"}, \"value\": \"Dengue 4 in Cear\\\\\\\\xe1, Brazil: characterisation of epidemiological and laboratorial aspects and causes of death during the first epidemic in the state\"}]}"; DedupConfig config = DedupConfig.load(readFileFromHDFS(Paths - .get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/config/pub.prod.tree.conf.json").toURI()) + .get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/config/pub.new.tree.conf.json").toURI()) .toFile() .getAbsolutePath())); @@ -284,7 +290,7 @@ public class DedupLocalTest extends DedupTestUtils { } // create relations by comparing only elements in the same group - JavaRDD relations = Deduper.computeRelations(context, blocks, dedupConf, true); + JavaRDD relations = Deduper.computeRelations(context, blocks, dedupConf, true, false); for (Relation r: relations.collect()) { System.out.println("*******RELATIONS*******"); System.out.println("source = " + r.getSource()); @@ -335,49 +341,47 @@ public class DedupLocalTest extends DedupTestUtils { @Test @Ignore - public void asMapDocument() throws IOException { + public void asMapDocument() throws Exception { final String json = "{\"context\": [], \"dataInfo\": {\"invisible\": false, \"trust\": \"0.9\", \"provenanceaction\": {\"classid\": \"sysimport:actionset\", \"classname\": \"sysimport:actionset\", \"schemeid\": \"dnet:provenanceActions\", \"schemename\": \"dnet:provenanceActions\"}, \"inferred\": false, \"deletedbyinference\": false}, \"resourcetype\": {\"classid\": \"0013\", \"classname\": \"0013\", \"schemeid\": \"dnet:dataCite_resource\", \"schemename\": \"dnet:dataCite_resource\"}, \"pid\": [{\"qualifier\": {\"classid\": \"doi\", \"classname\": \"doi\", \"schemeid\": \"dnet:pid_types\", \"schemename\": \"dnet:pid_types\"}, \"value\": \"10.1016/b978-0-323-54696-6.00057-4\"}], \"contributor\": [], \"bestaccessright\": {\"classid\": \"RESTRICTED\", \"classname\": \"Restricted\", \"schemeid\": \"dnet:access_modes\", \"schemename\": \"dnet:access_modes\"}, \"relevantdate\": [{\"qualifier\": {\"classid\": \"created\", \"classname\": \"created\", \"schemeid\": \"dnet:dataCite_date\", \"schemename\": \"dnet:dataCite_date\"}, \"value\": \"2018-11-30T10:52:46Z\"}], \"collectedfrom\": [{\"key\": \"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2\", \"value\": \"Crossref\"}], \"id\": \"50|doiboost____::0a5280c186efacdc7c8ce845cec3fceb\", \"subject\": [], \"lastupdatetimestamp\": 1585062372132, \"author\": [{\"fullname\": \"Eric Caumes\", \"surname\": \"Caumes\", \"name\": \"Eric\", \"rank\": 1}], \"instance\": [{\"hostedby\": {\"key\": \"10|openaire____::55045bd2a65019fd8e6741a755395c8c\", \"value\": \"Unknown Repository\"}, \"license\": {\"value\": \"https://www.elsevier.com/tdm/userlicense/1.0/\"}, \"url\": [\"https://api.elsevier.com/content/article/PII:B9780323546966000574?httpAccept=text/xml\", \"https://api.elsevier.com/content/article/PII:B9780323546966000574?httpAccept=text/plain\", \"http://dx.doi.org/10.1016/b978-0-323-54696-6.00057-4\"], \"dateofacceptance\": {\"value\": \"2018-11-30T10:52:46Z\"}, \"collectedfrom\": {\"key\": \"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2\", \"value\": \"Crossref\"}, \"accessright\": {\"classid\": \"RESTRICTED\", \"classname\": \"Restricted\", \"schemeid\": \"dnet:access_modes\", \"schemename\": \"dnet:access_modes\"}, \"instancetype\": {\"classid\": \"0013\", \"classname\": \"Part of book or chapter of book\", \"schemeid\": \"dnet:publication_resource\", \"schemename\": \"dnet:publication_resource\"}}], \"dateofcollection\": \"2020-03-24T15:06:12Z\", \"fulltext\": [], \"description\": [], \"format\": [], \"measures\": [], \"coverage\": [], \"externalReference\": [], \"publisher\": {\"value\": \"Elsevier\"}, \"resulttype\": {\"classid\": \"publication\", \"classname\": \"publication\", \"schemeid\": \"dnet:result_typologies\", \"schemename\": \"dnet:result_typologies\"}, \"country\": [], \"extraInfo\": [], \"originalId\": [\"10.1016/b978-0-323-54696-6.00057-4\"], \"source\": [{\"value\": \"Crossref\"}, {\"value\": \"Travel Medicine ISBN: 9780323546966\"}], \"dateofacceptance\": {\"value\": \"2018-11-30T10:52:46Z\"}, \"title\": [{\"qualifier\": {\"classid\": \"main title\", \"classname\": \"main title\", \"schemeid\": \"dnet:dataCite_title\", \"schemename\": \"dnet:dataCite_title\"}, \"value\": \"Skin Diseases\"}]}\n"; - DedupConfig dedupConf = DedupConfig.load(readFileFromHDFS("/Users/miconis/IdeaProjects/DnetDedup/dnet-dedup/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json")); + DedupConfig dedupConfig = DedupConfig.load(readFileFromHDFS( + Paths.get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json").toURI()).toFile().getAbsolutePath() + )); - final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); + final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConfig, json); for(String field: mapDocument.getFieldMap().keySet()) { System.out.println(field + ": " + mapDocument.getFieldMap().get(field).stringValue()); } } -} -// function mocking the tree processor by considering every comparison instead of using early exits -// private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { -// -// double score = 0.0; -// //LAYER 1 - comparison of the PIDs json lists -// Map params = new HashMap<>(); -// params.put("jpath_value", "$.value"); -// params.put("jpath_classid", "$.qualifier.classid"); -// JsonListMatch jsonListMatch = new JsonListMatch(params); -// double result = jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config); -// if (result >= 0.5) //if the result of the comparison is greater than the threshold -// score += 10.0; //high score because it should match when the first condition is satisfied -// else -// score += 0.0; -// -// //LAYER 2 - comparison of the title version and the size of the authors lists -// TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); -// double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); -// SizeMatch sizeMatch = new SizeMatch(params); -// double result2 = sizeMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); -// if (Math.min(result1, result2) != 0) -// score+=0; -// else -// score-=2; -// -// //LAYER 3 - computation of levenshtein on titles -// LevensteinTitle levensteinTitle = new LevensteinTitle(params); -// double result3 = levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); -// score += Double.isNaN(result3)?0.0:result3;; -// -// return score >= 0.99; -// } \ No newline at end of file + @Test + @Ignore + public void noMatchTest() throws Exception { + + //custom parameters for this test + DedupConfig dedupConfig = DedupConfig.load(readFileFromHDFS( + Paths.get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/config/pub.new.tree.conf.json").toURI()).toFile().getAbsolutePath() + )); +// String inputPath = Paths.get(DedupLocalTest.class.getResource("/eu/dnetlib/pace/examples/publications.dump.1000.json").toURI()).toFile().getAbsolutePath(); + String inputPath = "/Users/miconis/IdeaProjects/DnetHadoop/dnet-hadoop/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/entities/publication/publication.gz"; + String simRelsPath = workingPath + "/simrels"; + + Deduper.createSimRels( + dedupConfig, + spark, + inputPath, + simRelsPath, + true, + true + ); + Dataset noMatches = spark.read().load(simRelsPath).as(Encoders.bean(Relation.class)); + + System.out.println("noMatches = " + noMatches.count()); + + noMatches.foreach((ForeachFunction) r -> System.out.println(r.getSource() + " " + r.getTarget())); + + FileUtils.deleteDirectory(new File(workingPath)); + } +} \ No newline at end of file diff --git a/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json b/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json index 8ebd2be..497a1ec 100644 --- a/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json +++ b/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json @@ -51,6 +51,27 @@ ], "decisionTree": { "start": { + "fields": [ + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid", + "mode": "count" + } + } + ], + "threshold": 1.0, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "instanceTypeCheck", + "ignoreUndefined": "false" + }, + "instanceTypeCheck": { "fields": [ { "field": "instance", @@ -62,23 +83,13 @@ ], "threshold": 0.5, "aggregation": "MAX", - "positive": "layer1", + "positive": "pidVSaltid", "negative": "NO_MATCH", - "undefined": "layer1", + "undefined": "pidVSaltid", "ignoreUndefined": "true" }, - "layer1": { + "pidVSaltid": { "fields": [ - { - "field": "pid", - "comparator": "jsonListMatch", - "weight": 1.0, - "countIfUndefined": "false", - "params": { - "jpath_value": "$.value", - "jpath_classid": "$.qualifier.classid" - } - }, { "field": "pid", "comparator": "jsonListMatch", @@ -87,18 +98,19 @@ "params": { "jpath_value": "$.value", "jpath_classid": "$.qualifier.classid", - "crossCompare": "alternateid" + "crossCompare": "alternateid", + "mode": "count" } } ], - "threshold": 0.5, + "threshold": 1.0, "aggregation": "MAX", - "positive": "layer2", - "negative": "layer3", - "undefined": "layer3", + "positive": "softCheck", + "negative": "earlyExits", + "undefined": "earlyExits", "ignoreUndefined": "true" }, - "layer2": { + "softCheck": { "fields": [ { "field": "title", @@ -115,7 +127,7 @@ "undefined": "NO_MATCH", "ignoreUndefined": "true" }, - "layer3": { + "earlyExits": { "fields": [ { "field": "title", @@ -134,12 +146,12 @@ ], "threshold": 1.0, "aggregation": "AND", - "positive": "layer4", + "positive": "strongCheck", "negative": "NO_MATCH", - "undefined": "layer4", + "undefined": "strongCheck", "ignoreUndefined": "false" }, - "layer4": { + "strongCheck": { "fields": [ { "field": "title", @@ -151,10 +163,31 @@ ], "threshold": 0.99, "aggregation": "AVG", - "positive": "MATCH", + "positive": "surnames", "negative": "NO_MATCH", "undefined": "NO_MATCH", "ignoreUndefined": "true" + }, + "surnames": { + "fields": [ + { + "field": "authors", + "comparator": "authorsMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "surname_th": 0.75, + "fullname_th": 0.75, + "mode": "surname" + } + } + ], + "threshold": 0.6, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "MATCH", + "ignoreUndefined": "true" } }, "model": [ diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 2f0fc4f..858fe98 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -16,6 +16,8 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.text.Normalizer; import java.util.*; import java.util.function.Function; @@ -160,6 +162,11 @@ public abstract class AbstractPaceFunctions { return Normalizer.normalize(s, Normalizer.Form.NFD); } + public String utf8(final String s) { + byte[] bytes = s.getBytes(StandardCharsets.UTF_8); + return new String(bytes, StandardCharsets.UTF_8); + } + public String unicodeNormalization(final String s) { Matcher m = hexUnicodePattern.matcher(s); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index ff9d497..b5a56f6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -1,13 +1,13 @@ package eu.dnetlib.pace.tree; import com.google.common.collect.Iterables; -import com.wcohen.ss.JaroWinkler; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.Person; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; +import com.wcohen.ss.AbstractStringDistance; import java.util.Comparator; import java.util.List; @@ -25,6 +25,7 @@ public class AuthorsMatch extends AbstractComparator { private double NAME_THRESHOLD; private double FULLNAME_THRESHOLD; private String MODE; //full or surname + private int common; public AuthorsMatch(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); @@ -34,6 +35,11 @@ public class AuthorsMatch extends AbstractComparator { SURNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("surname_th", "0.95")); NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); + common = 0; + } + + protected AuthorsMatch(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); } @Override @@ -45,41 +51,85 @@ public class AuthorsMatch extends AbstractComparator { List aList = ((FieldList) a).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); List bList = ((FieldList) b).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); - int common = 0; + common = 0; + //compare each element of List1 with each element of List2 for (Person p1 : aList) - for (Person p2 : bList) - if(MODE.equals("full")) { - if (personComparator(p1, p2)) - common += 1; - } - else { - if (surnameComparator(p1, p2)) + + for (Person p2 : bList) { + + //both persons are inaccurate + if (!p1.isAccurate() && !p2.isAccurate()) { + //compare just normalized fullnames + if (ssalgo.score(normalization(p1.getNormalisedFullname()), normalization(p2.getNormalisedFullname())) > FULLNAME_THRESHOLD) { common += 1; + break; + } } - return (double)common / (aList.size() + bList.size() - common); + //one person is inaccurate + if (p1.isAccurate() ^ p2.isAccurate()) { + //prepare data + String name = p1.isAccurate()? normalization(p1.getNormalisedFirstName()) : normalization(p2.getNormalisedFirstName()); + String surname = p1.isAccurate()? normalization(p2.getNormalisedSurname()) : normalization(p2.getNormalisedSurname()); + + String fullname = p1.isAccurate()? normalization(p2.getNormalisedFullname()) : normalization(p1.getNormalisedFullname()); + + if (fullname.contains(surname)) { + if (MODE.equals("full")) { + if (fullname.contains(name)) { + common += 1; + break; + } + } + else { //MODE equals "surname" + common += 1; + break; + } + } + } + + //both persons are accurate + if (p1.isAccurate() && p2.isAccurate()) { + + if (compareSurname(p1, p2)) { + if (MODE.equals("full")) { + if(compareFirstname(p1, p2)) { + common += 1; + break; + } + } + else { //MODE equals "surname" + common += 1; + break; + } + } + + } + + } + + //normalization factor to compute the score + int normFactor = aList.size() == bList.size() ? aList.size() : (aList.size() + bList.size() - common); + + return (double)common / normFactor; } - public boolean personComparator(Person p1, Person p2) { - - if(!p1.isAccurate() || !p2.isAccurate()) - return ssalgo.score(p1.getOriginal(), p2.getOriginal()) > FULLNAME_THRESHOLD; - - if(ssalgo.score(p1.getSurnameString(),p2.getSurnameString()) > SURNAME_THRESHOLD) - if(p1.getNameString().length()<=2 || p2.getNameString().length()<=2) - return firstLC(p1.getNameString()).equals(firstLC(p2.getNameString())); - else - return ssalgo.score(p1.getNameString(), p2.getNameString()) > NAME_THRESHOLD; - else - return false; + public boolean compareSurname(Person p1, Person p2) { + return ssalgo.score(normalization(p1.getNormalisedSurname()), normalization(p2.getNormalisedSurname())) > SURNAME_THRESHOLD; } - public boolean surnameComparator(Person p1, Person p2) { + public boolean compareFirstname(Person p1, Person p2) { - if(!p1.isAccurate() || !p2.isAccurate()) - return ssalgo.score(p1.getOriginal(), p2.getOriginal()) > FULLNAME_THRESHOLD; + if(p1.getNormalisedFirstName().length()<=2 || p2.getNormalisedFirstName().length()<=2) { + if (firstLC(p1.getNormalisedFirstName()).equals(firstLC(p2.getNormalisedFirstName()))) + return true; + } - return ssalgo.score(p1.getSurnameString(), p2.getSurnameString()) > SURNAME_THRESHOLD; + return ssalgo.score(normalization(p1.getNormalisedFirstName()), normalization(p2.getNormalisedFirstName())) > NAME_THRESHOLD; + } + + public String normalization(String s) { + return normalize(utf8(cleanup(s))); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index d5e785a..a6bef3f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -36,23 +36,23 @@ public class BlockProcessorForTesting { this.dedupConf = dedupConf; } - public void processSortedBlock(final String key, final List documents, final Reporter context, boolean useTree) { + public void processSortedBlock(final String key, final List documents, final Reporter context, boolean useTree, boolean noMatch) { if (documents.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(prepare(documents), context, useTree); + process(prepare(documents), context, useTree, noMatch); } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); } } - public void process(final String key, final Iterable documents, final Reporter context, boolean useTree) { + public void process(final String key, final Iterable documents, final Reporter context, boolean useTree, boolean noMatch) { final Queue q = prepare(documents); if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(simplifyQueue(q, key, context), context, useTree); + process(simplifyQueue(q, key, context), context, useTree, noMatch); } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); @@ -123,7 +123,7 @@ public class BlockProcessorForTesting { } } - private void process(final Queue queue, final Reporter context, boolean useTree) { + private void process(final Queue queue, final Reporter context, boolean useTree, boolean noMatch) { while (!queue.isEmpty()) { @@ -155,18 +155,18 @@ public class BlockProcessorForTesting { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - if(!compareInstanceType(pivot, curr, dedupConf)){ - emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + //draws no match relations (test purpose) + if (noMatch) { + emitOutput(!new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); } else { - emitOutput(false, idPivot, idCurr, context); + //use the decision tree implementation or the "normal" implementation of the similarity score (valid only for publications) + if(useTree) + emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + else + emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); } -// if(useTree) -// emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); -// else -// emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); - } } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 70a5b16..f4eee93 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -165,11 +165,6 @@ public class ComparatorTest extends AbstractPaceTest { result = jaroWinkler.distance("Victoria Dataverse", "Windsor Dataverse", conf); System.out.println("result = " + result); - final Levenstein levenstein = new Levenstein(params); - - result = levenstein.distance("Victoria", "Windsor", conf); - System.out.println("result = " + result); - } @Test @@ -182,6 +177,14 @@ public class ComparatorTest extends AbstractPaceTest { System.out.println("result = " + result); } + @Test + public void levensteinTest() { + final Levenstein levenstein = new Levenstein(params); + + double result = levenstein.distance("la bruzzo", "la bruzzo", conf); + System.out.println("result = " + result); + } + @Test public void instanceTypeMatchTest() { @@ -238,6 +241,11 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(1.0, result); + Field e = createFieldList(Arrays.asList("Manghi, Paolo", "Atzori, Claudio"), "authors"); + result = authorsMatch.compare(a, e, conf); + + assertEquals(0.25, result); + } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index d8e0767..601831e 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -1,23 +1,35 @@ package eu.dnetlib.pace.util; +import eu.dnetlib.pace.model.Person; +import jdk.nashorn.internal.ir.annotations.Ignore; import org.junit.jupiter.api.*; import java.util.HashMap; import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; public class UtilTest { - Map params; + static Map params; @BeforeAll - public void setUp(){ - params = new HashMap(); + public static void setUp(){ + params = new HashMap<>(); } @Test + @Ignore public void paceResolverTest() { PaceResolver paceResolver = new PaceResolver(); paceResolver.getComparator("keywordMatch", params); } + @Test + public void personTest() { + Person p = new Person("j. f. kennedy", false); + + assertEquals("kennedy", p.getSurnameString()); + assertEquals("j f", p.getNameString()); + } + }