From 6b45e37e22fc2ecd61e54982626e1fb99ca17a4a Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Wed, 11 Dec 2019 16:57:37 +0100 Subject: [PATCH] implemented DedupRecord factory with the merge of organizations --- .../dnetlib/dhp/schema/oaf/Organization.java | 23 + .../eu/dnetlib/dhp/schema/oaf/Result.java | 23 +- .../dhp/schema/oaf/StructuredProperty.java | 2 +- .../eu/dnetlib/dedup/DedupRecordFactory.java | 94 +- .../dnetlib/dedup/SparkCreateDedupTest.java | 9 +- .../eu/dnetlib/dedup/conf/org.curr.conf.json | 18 +- .../eu/dnetlib/dedup/conf/org.curr.conf2.json | 1753 ----------------- 7 files changed, 113 insertions(+), 1809 deletions(-) delete mode 100644 dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf2.json diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java index 6f89eca7e..c3e9a7007 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java @@ -164,4 +164,27 @@ public class Organization extends OafEntity implements Serializable { public void setCountry(Qualifier country) { this.country = country; } + + + @Override + public void mergeFrom(OafEntity e) { + super.mergeFrom(e); + final Organization o = (Organization) e; + legalshortname = o.getLegalshortname() != null ? o.getLegalshortname() : legalshortname; + legalname = o.getLegalname() != null ? o.getLegalname() : legalname; + alternativeNames = mergeLists(o.getAlternativeNames(), alternativeNames); + websiteurl = o.getWebsiteurl() != null ? o.getWebsiteurl() : websiteurl; + logourl = o.getLogourl() != null ? o.getLogourl() : logourl; + eclegalbody = o.getEclegalbody() != null ? o.getEclegalbody() : eclegalbody; + eclegalperson = o.getEclegalperson() != null ? o.getEclegalperson() : eclegalperson; + ecnonprofit = o.getEcnonprofit() != null ? o.getEcnonprofit() : ecnonprofit; + ecresearchorganization = o.getEcresearchorganization() != null ? o.getEcresearchorganization() : ecresearchorganization; + echighereducation = o.getEchighereducation() != null ? o.getEchighereducation() : echighereducation; + ecinternationalorganizationeurinterests = o.getEcinternationalorganizationeurinterests() != null ? o.getEcinternationalorganizationeurinterests() : ecinternationalorganizationeurinterests; + ecinternationalorganization = o.getEcinternationalorganization() != null ? o.getEcinternationalorganization() : ecinternationalorganization; + ecenterprise = o.getEcenterprise() != null ? o.getEcenterprise() :ecenterprise; + ecsmevalidated = o.getEcsmevalidated() != null ? o.getEcsmevalidated() :ecsmevalidated; + ecnutscode = o.getEcnutscode() != null ? o.getEcnutscode() :ecnutscode; + country = o.getCountry() != null ? o.getCountry() :country; + } } diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java index 1bb7f6a67..7fb7aef10 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java @@ -3,10 +3,7 @@ package eu.dnetlib.dhp.schema.oaf; import org.apache.commons.lang3.StringUtils; import java.io.Serializable; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; public abstract class Result extends OafEntity implements Serializable { @@ -253,11 +250,6 @@ public abstract class Result extends OafEntity implements Serializable { Result r = (Result) e; - - - //TODO mergeFrom is used only for create Dedup Records since the creation of these two fields requires more complex functions (maybe they will be filled in an external function) -// dateofacceptance = r.getDateofacceptance(); - instance = mergeLists(instance, r.getInstance()); if (r.getResulttype() != null) @@ -274,7 +266,7 @@ public abstract class Result extends OafEntity implements Serializable { relevantdate = mergeLists(relevantdate, r.getRelevantdate()); - description = mergeLists(description, r.getDescription()); + description = longestLists(description, r.getDescription()); if (r.getPublisher() != null) publisher = r.getPublisher(); @@ -310,5 +302,16 @@ public abstract class Result extends OafEntity implements Serializable { } + private List> longestLists(List> a, List> b) { + if(a == null || b == null) + return a==null?b:a; + if (a.size()== b.size()) { + int msa = a.stream().filter(i -> i.getValue() != null).map(i -> i.getValue().length()).max(Comparator.naturalOrder()).orElse(0); + int msb = b.stream().filter(i -> i.getValue() != null).map(i -> i.getValue().length()).max(Comparator.naturalOrder()).orElse(0); + return msa>msb?a:b; + } + return a.size()> b.size()?a:b; + } + } diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java index ea2370c7a..f6c6b7335 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java @@ -35,7 +35,7 @@ public class StructuredProperty implements Serializable { } public String toComparableString(){ - return String.format("%s::%s", value != null ? value.toLowerCase() : "", qualifier != null ? qualifier.toComparableString().toLowerCase() : ""); + return value != null ? value.toLowerCase() : ""; } @Override diff --git a/dhp-workflows/dhp-dedup/src/main/java/eu/dnetlib/dedup/DedupRecordFactory.java b/dhp-workflows/dhp-dedup/src/main/java/eu/dnetlib/dedup/DedupRecordFactory.java index 000be640a..c6e3efbc4 100644 --- a/dhp-workflows/dhp-dedup/src/main/java/eu/dnetlib/dedup/DedupRecordFactory.java +++ b/dhp-workflows/dhp-dedup/src/main/java/eu/dnetlib/dedup/DedupRecordFactory.java @@ -22,32 +22,32 @@ import static java.util.stream.Collectors.toMap; public class DedupRecordFactory { - public static JavaRDD createDedupRecord(final JavaSparkContext sc, final SparkSession spark, final String mergeRelsInputPath, final String entitiesInputPath, final OafEntityType entityType, final DedupConfig dedupConf){ + public static JavaRDD createDedupRecord(final JavaSparkContext sc, final SparkSession spark, final String mergeRelsInputPath, final String entitiesInputPath, final OafEntityType entityType, final DedupConfig dedupConf) { // final JavaPairRDD inputJsonEntities = sc.textFile(entitiesInputPath) - .mapToPair((PairFunction) it-> - new Tuple2(MapDocumentUtil.getJPathString(dedupConf.getWf().getIdPath(), it),it) + .mapToPair((PairFunction) it -> + new Tuple2(MapDocumentUtil.getJPathString(dedupConf.getWf().getIdPath(), it), it) ); //: source is the dedup_id, target is the id of the mergedIn - JavaPairRDD mergeRels = spark + JavaPairRDD mergeRels = spark .read().load(mergeRelsInputPath).as(Encoders.bean(Relation.class)) .where("relClass=='merges'") .javaRDD() .mapToPair( - (PairFunction)r-> + (PairFunction) r -> new Tuple2(r.getTarget(), r.getSource()) ); // final JavaPairRDD joinResult = mergeRels.join(inputJsonEntities).mapToPair((PairFunction>, String, String>) Tuple2::_2); - JavaPairRDD keyJson = joinResult.mapToPair((PairFunction, OafKey, String>) json -> { + JavaPairRDD keyJson = joinResult.mapToPair((PairFunction, OafKey, String>) json -> { String idValue = json._1(); - String trust =""; + String trust = ""; try { trust = MapDocumentUtil.getJPathString("$.dataInfo.trust", json._2()); } catch (Throwable e) { @@ -72,11 +72,7 @@ public class DedupRecordFactory { .groupByKey(); - - - - - switch(entityType){ + switch (entityType) { case publication: return sortedJoinResult.map(DedupRecordFactory::publicationMerger); case dataset: @@ -97,7 +93,7 @@ public class DedupRecordFactory { } - private static Publication publicationMerger(Tuple2> e){ + private static Publication publicationMerger(Tuple2> e) { Publication p = new Publication(); //the result of the merge, to be returned at the end @@ -111,54 +107,80 @@ public class DedupRecordFactory { StringBuilder trust = new StringBuilder("0.0"); if (e._2() != null) - e._2().forEach(pub -> { - try { - Publication publication = mapper.readValue(pub, Publication.class); + e._2().forEach(pub -> { + try { + Publication publication = mapper.readValue(pub, Publication.class); - final String currentTrust = publication.getDataInfo().getTrust(); - if (!"1.0".equals(currentTrust)) { - trust.setLength(0); - trust.append(currentTrust); + final String currentTrust = publication.getDataInfo().getTrust(); + if (!"1.0".equals(currentTrust)) { + trust.setLength(0); + trust.append(currentTrust); + } + p.mergeFrom(publication); + p.setAuthor(DedupUtility.mergeAuthor(p.getAuthor(), publication.getAuthor())); + //add to the list if they are not null + if (publication.getDateofacceptance() != null) + dateofacceptance.add(publication.getDateofacceptance().getValue()); + } catch (Exception exc) { + throw new RuntimeException(exc); } - p.mergeFrom(publication); - p.setAuthor(DedupUtility.mergeAuthor(p.getAuthor(), publication.getAuthor())); - //add to the list if they are not null - if (publication.getDateofacceptance() != null) - dateofacceptance.add(publication.getDateofacceptance().getValue()); - } catch (Exception exc){ - throw new RuntimeException(exc); - } - }); + }); p.setDateofacceptance(DatePicker.pick(dateofacceptance)); return p; } - private static Dataset datasetMerger(Tuple2> e){ + private static Dataset datasetMerger(Tuple2> e) { throw new NotImplementedException(); } - private static Project projectMerger(Tuple2> e){ + private static Project projectMerger(Tuple2> e) { throw new NotImplementedException(); } - private static Software softwareMerger(Tuple2> e){ + private static Software softwareMerger(Tuple2> e) { throw new NotImplementedException(); } - private static Datasource datasourceMerger(Tuple2> e){ + private static Datasource datasourceMerger(Tuple2> e) { throw new NotImplementedException(); } - private static Organization organizationMerger(Tuple2> e){ + private static Organization organizationMerger(Tuple2> e) { - throw new NotImplementedException(); + Organization o = new Organization(); //the result of the merge, to be returned at the end + + o.setId(e._1()); + + final ObjectMapper mapper = new ObjectMapper(); + + + StringBuilder trust = new StringBuilder("0.0"); + + if (e._2() != null) + e._2().forEach(pub -> { + try { + Organization organization = mapper.readValue(pub, Organization.class); + + final String currentTrust = organization.getDataInfo().getTrust(); + if (!"1.0".equals(currentTrust)) { + trust.setLength(0); + trust.append(currentTrust); + } + o.mergeFrom(organization); + + } catch (Exception exc) { + throw new RuntimeException(exc); + } + }); + + return o; } - private static OtherResearchProduct otherresearchproductMerger(Tuple2> e){ + private static OtherResearchProduct otherresearchproductMerger(Tuple2> e) { throw new NotImplementedException(); } diff --git a/dhp-workflows/dhp-dedup/src/test/java/eu/dnetlib/dedup/SparkCreateDedupTest.java b/dhp-workflows/dhp-dedup/src/test/java/eu/dnetlib/dedup/SparkCreateDedupTest.java index 5d5576dd8..7aa8a4302 100644 --- a/dhp-workflows/dhp-dedup/src/test/java/eu/dnetlib/dedup/SparkCreateDedupTest.java +++ b/dhp-workflows/dhp-dedup/src/test/java/eu/dnetlib/dedup/SparkCreateDedupTest.java @@ -16,10 +16,11 @@ import java.util.List; public class SparkCreateDedupTest { String configuration; + String entity = "organization"; @Before public void setUp() throws IOException { - configuration = IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dedup/conf/pub.curr.conf.json")); + configuration = IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dedup/conf/org.curr.conf.json")); } @@ -29,7 +30,7 @@ public class SparkCreateDedupTest { SparkCreateSimRels.main(new String[] { "-mt", "local[*]", "-s", "/home/sandro/betadump", - "-e", "publication", + "-e", entity, "-c", ArgumentApplicationParser.compressArgument(configuration), "-t", "/tmp/dedup", }); @@ -42,7 +43,7 @@ public class SparkCreateDedupTest { SparkCreateConnectedComponent.main(new String[] { "-mt", "local[*]", "-s", "/home/sandro/betadump", - "-e", "publication", + "-e", entity, "-c", ArgumentApplicationParser.compressArgument(configuration), "-t", "/tmp/dedup", }); @@ -54,7 +55,7 @@ public class SparkCreateDedupTest { SparkCreateDedupRecord.main(new String[] { "-mt", "local[*]", "-s", "/home/sandro/betadump", - "-e", "publication", + "-e", entity, "-c", ArgumentApplicationParser.compressArgument(configuration), "-d", "/tmp/dedup", }); diff --git a/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf.json b/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf.json index a878d2419..2aeb4c582 100644 --- a/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf.json +++ b/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf.json @@ -7,7 +7,7 @@ "queueMaxSize": "2000", "groupMaxSize": "50", "slidingWindowSize": "200", - "idPath": ".id", + "idPath": "$.id", "rootBuilder": [ "organization", "projectOrganization_participation_isParticipant", @@ -84,7 +84,7 @@ "type": "String", "weight": "0", "ignoreMissing": "false", - "path": ".country.classid" + "path": "$.country.classid" }, { "name": "legalshortname", @@ -92,7 +92,7 @@ "type": "String", "weight": "0.1", "ignoreMissing": "true", - "path": ".legalshortname.value" + "path": "$.legalshortname.value" }, { "name": "legalname", @@ -100,7 +100,7 @@ "type": "String", "weight": "0.9", "ignoreMissing": "false", - "path": ".legalname.value", + "path": "$.legalname.value", "params": { "windowSize": 4, "threshold": 0.7 @@ -112,11 +112,19 @@ "type": "URL", "weight": "0", "ignoreMissing": "true", - "path": ".websiteurl.value", + "path": "$.websiteurl.value", "params": { "host": 0.5, "path": 0.5 } + }, + { + "name": "gridid", + "algo": "Null", + "type": "String", + "weight": "0.0", + "ignoreMissing": "true", + "path": "$.pid[?(@.qualifier.classid ==\"grid\")].value" } ], "blacklists": { diff --git a/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf2.json b/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf2.json deleted file mode 100644 index 2aeb4c582..000000000 --- a/dhp-workflows/dhp-dedup/src/test/resources/eu/dnetlib/dedup/conf/org.curr.conf2.json +++ /dev/null @@ -1,1753 +0,0 @@ -{ - "wf": { - "threshold": "0.9", - "dedupRun": "001", - "entityType": "organization", - "orderField": "legalname", - "queueMaxSize": "2000", - "groupMaxSize": "50", - "slidingWindowSize": "200", - "idPath": "$.id", - "rootBuilder": [ - "organization", - "projectOrganization_participation_isParticipant", - "datasourceOrganization_provision_isProvidedBy" - ], - "includeChildren": "true" - }, - "pace": { - "clustering": [ - { - "name": "sortedngrampairs", - "fields": [ - "legalname" - ], - "params": { - "max": 2, - "ngramLen": "3" - } - }, - { - "name": "suffixprefix", - "fields": [ - "legalname" - ], - "params": { - "max": 1, - "len": "3" - } - }, - { - "name": "urlclustering", - "fields": [ - "websiteurl" - ], - "params": {} - }, - { - "name": "keywordsclustering", - "fields": [ - "legalname" - ], - "params": { - "max": 2, - "windowSize": 4 - } - } - ], - "strictConditions": [ - { - "name": "exactMatch", - "fields": [ - "gridid" - ] - } - ], - "conditions": [ - { - "name": "DomainExactMatch", - "fields": [ - "websiteurl" - ] - }, - { - "name": "exactMatch", - "fields": [ - "country" - ] - } - ], - "model": [ - { - "name": "country", - "algo": "Null", - "type": "String", - "weight": "0", - "ignoreMissing": "false", - "path": "$.country.classid" - }, - { - "name": "legalshortname", - "algo": "JaroWinklerNormalizedName", - "type": "String", - "weight": "0.1", - "ignoreMissing": "true", - "path": "$.legalshortname.value" - }, - { - "name": "legalname", - "algo": "JaroWinklerNormalizedName", - "type": "String", - "weight": "0.9", - "ignoreMissing": "false", - "path": "$.legalname.value", - "params": { - "windowSize": 4, - "threshold": 0.7 - } - }, - { - "name": "websiteurl", - "algo": "Null", - "type": "URL", - "weight": "0", - "ignoreMissing": "true", - "path": "$.websiteurl.value", - "params": { - "host": 0.5, - "path": 0.5 - } - }, - { - "name": "gridid", - "algo": "Null", - "type": "String", - "weight": "0.0", - "ignoreMissing": "true", - "path": "$.pid[?(@.qualifier.classid ==\"grid\")].value" - } - ], - "blacklists": { - "legalname": [] - }, - "synonyms": { - "key::1": [ - "university", - "università", - "università studi", - "universitario", - "universitaria", - "université", - "universitaire", - "universitaires", - "universidad", - "universitade", - "Universität", - "universitaet", - "Uniwersytet", - "университет", - "universiteit", - "πανεπιστήμιο", - "universitesi", - "universiteti" - ], - "key::2": [ - "studies", - "studi", - "études", - "estudios", - "estudos", - "Studien", - "studia", - "исследования", - "studies", - "σπουδές" - ], - "key::3": [ - "advanced", - "superiore", - "supérieur", - "supérieure", - "supérieurs", - "supérieures", - "avancado", - "avancados", - "fortgeschrittene", - "fortgeschritten", - "zaawansowany", - "передовой", - "gevorderd", - "gevorderde", - "προχωρημένος", - "προχωρημένη", - "προχωρημένο", - "προχωρημένες", - "προχωρημένα", - "wyzsza" - ], - "key::4": [ - "institute", - "istituto", - "institut", - "instituto", - "instituto", - "Institut", - "instytut", - "институт", - "instituut", - "ινστιτούτο" - ], - "key::5": [ - "hospital", - "ospedale", - "hôpital", - "hospital", - "hospital", - "Krankenhaus", - "szpital", - "больница", - "ziekenhuis", - "νοσοκομείο" - ], - "key::6": [ - "research", - "ricerca", - "recherche", - "investigacion", - "pesquisa", - "Forschung", - "badania", - "исследования", - "onderzoek", - "έρευνα", - "erevna", - "erevnas" - ], - "key::7": [ - "college", - "collegio", - "université", - "colegio", - "faculdade", - "Hochschule", - "Szkoła Wyższa", - "Высшая школа", - "universiteit", - "κολλέγιο" - ], - "key::8": [ - "foundation", - "fondazione", - "fondation", - "fundación", - "fundação", - "Stiftung", - "Fundacja", - "фонд", - "stichting", - "ίδρυμα", - "idryma" - ], - "key::9": [ - "center", - "centro", - "centre", - "centro", - "centro", - "zentrum", - "centrum", - "центр", - "centrum", - "κέντρο" - ], - "key::10": [ - "national", - "nazionale", - "national", - "nationale", - "nationaux", - "nationales", - "nacional", - "nacional", - "national", - "krajowy", - "национальный", - "nationaal", - "nationale", - "εθνικό" - ], - "key::11": [ - "association", - "associazione", - "association", - "asociación", - "associação", - "Verein", - "verband", - "stowarzyszenie", - "ассоциация", - "associatie" - ], - "key::12": [ - "society", - "societa", - "société", - "sociedad", - "sociedade", - "gesellschaft", - "społeczeństwo", - "общество", - "maatschappij", - "κοινωνία" - ], - "key::13": [ - "international", - "internazionale", - "international", - "internacional", - "internacional", - "international", - "międzynarodowy", - "Международный", - "internationaal", - "internationale", - "διεθνής", - "διεθνή", - "διεθνές" - ], - "key::14": [ - "community", - "comunita", - "communauté", - "comunidad", - "comunidade", - "Gemeinschaft", - "społeczność", - "сообщество", - "gemeenschap", - "κοινότητα" - ], - "key::15": [ - "school", - "scuola", - "école", - "escuela", - "escola", - "schule", - "Szkoła", - "школа", - "school", - "σχολείο" - ], - "key::16": [ - "education", - "educazione", - "éducation", - "educacion", - "Educação", - "Bildung", - "Edukacja", - "образование", - "opleiding", - "εκπαίδευση" - ], - "key::17": [ - "academy", - "accademia", - "académie", - "academia", - "academia", - "Akademie", - "akademie", - "академия", - "academie", - "ακαδημία" - ], - "key::18": [ - "public", - "pubblico", - "public", - "publique", - "publics", - "publiques", - "publico", - "publico", - "Öffentlichkeit", - "publiczny", - "публичный", - "publiek", - "publieke", - "δημόσιος", - "δημόσια", - "δημόσιο" - ], - "key::19": [ - "museum", - "museo", - "musée", - "mueso", - "museu", - "museum", - "muzeum", - "музей", - "museum", - "μουσείο" - ], - "key::20": [ - "group", - "gruppo", - "groupe", - "grupo", - "grupo", - "gruppe", - "grupa", - "группа", - "groep", - "ομάδα", - "όμιλος" - ], - "key::21": [ - "department", - "dipartimento", - "département", - "departamento", - "departamento", - "abteilung", - "departament", - "отдел", - "afdeling", - "τμήμα" - ], - "key::22": [ - "council", - "consiglio", - "conseil", - "Consejo", - "conselho", - "gesellschaft", - "rada", - "совет", - "raad", - "συμβούλιο" - ], - "key::23": [ - "library", - "biblioteca", - "bibliothèque", - "biblioteca", - "biblioteca", - "Bibliothek", - "biblioteka", - "библиотека", - "bibliotheek", - "βιβλιοθήκη" - ], - "key::24": [ - "ministry", - "ministero", - "ministère", - "ministerio", - "ministério", - "Ministerium", - "ministerstwo", - "министерство", - "ministerie", - "υπουργείο" - ], - "key::25": [ - "services", - "servizi", - "services", - "servicios", - "Serviços", - "Dienstleistungen", - "usługi", - "услуги", - "diensten", - "υπηρεσίες" - ], - "key::26": [ - "central", - "centrale", - "central", - "centrale", - "centrales", - "central", - "central", - "zentral", - "centralny", - "цетральный", - "centraal", - "κεντρικός", - "κεντρική", - "κεντρικό", - "κεντρικά" - ], - "key::27": [ - "general", - "generale", - "général", - "générale", - "généraux", - "générales", - "general", - "geral", - "general", - "Allgemeines", - "general", - "общий", - "algemeen", - "algemene", - "γενικός", - "γενική", - "γενικό", - "γενικά" - ], - "key::28": [ - "applied", - "applicati", - "appliqué", - "appliquée", - "appliqués", - "appliquées", - "aplicado", - "aplicada", - "angewendet", - "stosowany", - "прикладной", - "toegepast", - "toegepaste", - "εφαρμοσμένος", - "εφαρμοσμένη", - "εφαρμοσμένο", - "εφαρμοσμένα" - ], - "key::29": [ - "european", - "europee", - "europea", - "européen", - "européenne", - "européens", - "européennes", - "europeo", - "europeu", - "europäisch", - "europejski", - "европейский", - "Europees", - "Europese", - "ευρωπαϊκός", - "ευρωπαϊκή", - "ευρωπαϊκό", - "ευρωπαϊκά" - ], - "key::30": [ - "agency", - "agenzia", - "agence", - "agencia", - "agencia", - "agentur", - "agencja", - "агенция", - "agentschap", - "πρακτορείο" - ], - "key::31": [ - "laboratory", - "laboratorio", - "laboratoire", - "laboratorio", - "laboratorio", - "labor", - "laboratorium", - "лаборатория", - "laboratorium", - "εργαστήριο" - ], - "key::32": [ - "industry", - "industria", - "industrie", - "индустрия", - "industrie", - "βιομηχανία" - ], - "key::33": [ - "industrial", - "industriale", - "industriel", - "industrielle", - "industriels", - "industrielles", - "индустриальный", - "industrieel", - "βιομηχανικός", - "βιομηχανική", - "βιομηχανικό", - "βιομηχανικά", - "βιομηχανικές" - ], - "key::34": [ - "consortium", - "consorzio", - "consortium", - "консорциум", - "consortium", - "κοινοπραξία" - ], - "key::35": [ - "organization", - "organizzazione", - "organisation", - "organización", - "organização", - "organizacja", - "организация", - "organisatie", - "οργανισμός" - ], - "key::36": [ - "authority", - "autorità", - "autorité", - "авторитет", - "autoriteit" - ], - "key::37": [ - "federation", - "federazione", - "fédération", - "федерация", - "federatie", - "ομοσπονδία" - ], - "key::38": [ - "observatory", - "osservatorio", - "observatoire", - "обсерватория", - "observatorium", - "αστεροσκοπείο" - ], - "key::39": [ - "bureau", - "ufficio", - "bureau", - "офис", - "bureau", - "γραφείο" - ], - "key::40": [ - "company", - "impresa", - "compagnie", - "société", - "компания", - "bedrijf", - "εταιρία" - ], - "key::41": [ - "polytechnic", - "politecnico", - "polytechnique", - "политехника", - "polytechnisch", - "πολυτεχνείο", - "universita politecnica", - "polytechnic university", - "universidad politecnica", - "universitat politecnica", - "politechnika", - "politechniki", - "university technology", - "university science technology" - ], - "key::42": [ - "coalition", - "coalizione", - "coalition", - "коалиция", - "coalitie", - "συνασπισμός" - ], - "key::43": [ - "initiative", - "iniziativa", - "initiative", - "инициатива", - "initiatief", - "πρωτοβουλία" - ], - "key::44": [ - "academic", - "accademico", - "académique", - "universitaire", - "акадеческий academisch", - "ακαδημαϊκός", - "ακαδημαϊκή", - "ακαδημαϊκό", - "ακαδημαϊκές", - "ακαδημαϊκοί" - ], - "key::45": [ - "institution", - "istituzione", - "institution", - "институциональный", - "instelling", - "ινστιτούτο" - ], - "key::46": [ - "division", - "divisione", - "division", - "отделение", - "divisie", - "τμήμα" - ], - "key::47": [ - "committee", - "comitato", - "comité", - "комитет", - "commissie", - "επιτροπή" - ], - "key::48": [ - "promotion", - "promozione", - "продвижение", - "proothisis", - "forderung" - ], - "key::49": [ - "medical", - "medicine", - "clinical", - "medicina", - "clinici", - "médico", - "medicina", - "clínica", - "médico", - "medicina", - "clínica", - "medizinisch", - "Medizin", - "klinisch", - "medisch", - "geneeskunde", - "klinisch", - "ιατρικός", - "ιατρική", - "ιατρικό", - "ιατρικά", - "κλινικός", - "κλινική", - "κλινικό", - "κλινικά", - "tıbbi", - "tıp", - "klinik", - "orvosi", - "orvostudomány", - "klinikai", - "zdravniški", - "medicinski", - "klinični", - "meditsiini", - "kliinik", - "kliiniline" - ], - "key::50": [ - "technology", - "technological", - "tecnologia", - "tecnologie", - "tecnología", - "tecnológico", - "tecnologia", - "tecnológico", - "Technologie", - "technologisch", - "technologie", - "technologisch", - "τεχνολογία", - "τεχνολογικός", - "τεχνολογική", - "τεχνολογικό", - "teknoloji", - "teknolojik", - "technológia", - "technológiai", - "tehnologija", - "tehnološki", - "tehnoloogia", - "tehnoloogiline", - "technologii", - "technical", - "texniki", - "teknik" - ], - "key::51": [ - "science", - "scientific", - "scienza", - "scientifiche", - "scienze", - "ciencia", - "científico", - "ciência", - "científico", - "Wissenschaft", - "wissenschaftlich", - "wetenschap", - "wetenschappelijk", - "επιστήμη", - "επιστημονικός", - "επιστημονική", - "επιστημονικό", - "επιστημονικά", - "bilim", - "bilimsel", - "tudomány", - "tudományos", - "znanost", - "znanstveni", - "teadus", - "teaduslik", - "" - ], - "key::52": [ - "engineering", - "ingegneria", - "ingeniería", - "engenharia", - "Ingenieurwissenschaft", - "ingenieurswetenschappen", - "bouwkunde", - "μηχανικός", - "μηχανική", - "μηχανικό", - "mühendislik", - "mérnöki", - "Inženirstvo", - "inseneeria", - "inseneri", - "" - ], - "key::53": [ - "management", - "gestione", - "gestionale", - "gestionali", - "gestión", - "administración", - "gestão", - "administração", - "Verwaltung", - "management", - "διαχείριση", - "yönetim", - "menedzsment", - "vodstvo", - "upravljanje", - "management", - "juhtkond", - "juhtimine", - "haldus", - "" - ], - "key::54": [ - "energy", - "energia", - "energía", - "energia", - "Energie", - "energie", - "ενέργεια", - "enerji", - "energia", - "energija", - "energia", - "" - ], - "key::55": [ - "agricultural", - "agriculture", - "agricoltura", - "agricole", - "agrícola", - "agricultura", - "agrícola", - "agricultura", - "landwirtschaftlich", - "Landwirtschaft", - "landbouwkundig", - "landbouw", - "αγροτικός", - "αγροτική", - "αγροτικό", - "γεωργικός", - "γεωργική", - "γεωργικό", - "γεωργία", - "tarımsal", - "tarım", - "mezőgazdasági", - "mezőgazdaság", - "poljedelski", - "poljedelstvo", - "põllumajandus", - "põllumajanduslik", - "" - ], - "key::56": [ - "information", - "informazione", - "información", - "informação", - "Information", - "informatie", - "πληροφορία", - "bilgi", - "információ", - "informacija", - "informatsioon", - "informatycznych", - "" - ], - "key::57": [ - "social", - "sociali", - "social", - "social", - "Sozial", - "sociaal", - "maatschappelijk", - "κοινωνικός", - "κοινωνική", - "κοινωνικό", - "κοινωνικά", - "sosyal", - "szociális", - "družbeni", - "sotsiaal", - "sotsiaalne", - "" - ], - "key::58": [ - "environmental", - "ambiente", - "medioambiental", - "ambiente", - "medioambiente", - "meioambiente", - "Umwelt", - "milieu", - "milieuwetenschap", - "milieukunde", - "περιβαλλοντικός", - "περιβαλλοντική", - "περιβαλλοντικό", - "περιβαλλοντικά", - "çevre", - "környezeti", - "okoliški", - "keskonna", - "" - ], - "key::59": [ - "business", - "economia", - "economiche", - "economica", - "negocio", - "empresa", - "negócio", - "Unternehmen", - "bedrijf", - "bedrijfskunde", - "επιχείρηση", - "iş", - "üzleti", - "posel", - "ettevõte/äri", - "" - ], - "key::60": [ - "pharmaceuticals", - "pharmacy", - "farmacia", - "farmaceutica", - "farmacéutica", - "farmacia", - "farmacêutica", - "farmácia", - "Pharmazeutika", - "Arzneimittelkunde", - "farmaceutica", - "geneesmiddelen", - "apotheek", - "φαρμακευτικός", - "φαρμακευτική", - "φαρμακευτικό", - "φαρμακευτικά", - "φαρμακείο", - "ilaç", - "eczane", - "gyógyszerészeti", - "gyógyszertár", - "farmacevtika", - "lekarništvo", - "farmaatsia", - "farmatseutiline", - "" - ], - "key::61": [ - "healthcare", - "health services", - "salute", - "atenciónmédica", - "cuidadodelasalud", - "cuidadoscomasaúde", - "Gesundheitswesen", - "gezondheidszorg", - "ιατροφαρμακευτικήπερίθαλψη", - "sağlıkhizmeti", - "egészségügy", - "zdravstvo", - "tervishoid", - "tervishoiu", - "" - ], - "key::62": [ - "history", - "storia", - "historia", - "história", - "Geschichte", - "geschiedenis", - "geschiedkunde", - "ιστορία", - "tarih", - "történelem", - "zgodovina", - "ajalugu", - "" - ], - "key::63": [ - "materials", - "materiali", - "materia", - "materiales", - "materiais", - "materialen", - "υλικά", - "τεκμήρια", - "malzemeler", - "anyagok", - "materiali", - "materjalid", - "vahendid", - "" - ], - "key::64": [ - "economics", - "economia", - "economiche", - "economica", - "economía", - "economia", - "Wirtschaft", - "economie", - "οικονομικά", - "οικονομικέςεπιστήμες", - "ekonomi", - "közgazdaságtan", - "gospodarstvo", - "ekonomija", - "majanduslik", - "majandus", - "" - ], - "key::65": [ - "therapeutics", - "terapeutica", - "terapéutica", - "terapêutica", - "therapie", - "θεραπευτική", - "tedavibilimi", - "gyógykezelés", - "terapevtika", - "terapeutiline", - "ravi", - "" - ], - "key::66": [ - "oncology", - "oncologia", - "oncologico", - "oncología", - "oncologia", - "Onkologie", - "oncologie", - "ογκολογία", - "onkoloji", - "onkológia", - "onkologija", - "onkoloogia", - "" - ], - "key::67": [ - "natural", - "naturali", - "naturale", - "natural", - "natural", - "natürlich", - "natuurlijk", - "φυσικός", - "φυσική", - "φυσικό", - "φυσικά", - "doğal", - "természetes", - "naraven", - "loodus", - "" - ], - "key::68": [ - "educational", - "educazione", - "pedagogia", - "educacional", - "educativo", - "educacional", - "pädagogisch", - "educatief", - "εκπαιδευτικός", - "εκπαιδευτική", - "εκπαιδευτικό", - "εκπαιδευτικά", - "eğitimsel", - "oktatási", - "izobraževalen", - "haridus", - "hariduslik", - "" - ], - "key::69": [ - "biomedical", - "biomedica", - "biomédico", - "biomédico", - "biomedizinisch", - "biomedisch", - "βιοιατρικός", - "βιοιατρική", - "βιοιατρικό", - "βιοιατρικά", - "biyomedikal", - "orvosbiológiai", - "biomedicinski", - "biomeditsiiniline", - "" - ], - "key::70": [ - "veterinary", - "veterinaria", - "veterinarie", - "veterinaria", - "veterinária", - "tierärtzlich", - "veterinair", - "veeartsenijlkunde", - "κτηνιατρικός", - "κτηνιατρική", - "κτηνιατρικό", - "κτηνιατρικά", - "veteriner", - "állatorvosi", - "veterinar", - "veterinarski", - "veterinaaria", - "" - ], - "key::71": [ - "chemistry", - "chimica", - "química", - "química", - "Chemie", - "chemie", - "scheikunde", - "χημεία", - "kimya", - "kémia", - "kemija", - "keemia", - "" - ], - "key::72": [ - "security", - "sicurezza", - "seguridad", - "segurança", - "Sicherheit", - "veiligheid", - "ασφάλεια", - "güvenlik", - "biztonsági", - "varnost", - "turvalisus", - "julgeolek", - "" - ], - "key::73": [ - "biotechnology", - "biotecnologia", - "biotecnologie", - "biotecnología", - "biotecnologia", - "Biotechnologie", - "biotechnologie", - "βιοτεχνολογία", - "biyoteknoloji", - "biotechnológia", - "biotehnologija", - "biotehnoloogia", - "" - ], - "key::74": [ - "military", - "militare", - "militari", - "militar", - "militar", - "Militär", - "militair", - "leger", - "στρατιωτικός", - "στρατιωτική", - "στρατιωτικό", - "στρατιωτικά", - "askeri", - "katonai", - "vojaški", - "vojni", - "militaar", - "wojskowa", - "" - ], - "key::75": [ - "theological", - "teologia", - "teologico", - "teológico", - "tecnológica", - "theologisch", - "theologisch", - "θεολογικός", - "θεολογική", - "θεολογικό", - "θεολογικά", - "teolojik", - "technológiai", - "teološki", - "teoloogia", - "usuteadus", - "teoloogiline", - "" - ], - "key::76": [ - "electronics", - "elettronica", - "electrónica", - "eletrônicos", - "Elektronik", - "elektronica", - "ηλεκτρονική", - "elektronik", - "elektronika", - "elektronika", - "elektroonika", - "" - ], - "key::77": [ - "forestry", - "forestale", - "forestali", - "silvicultura", - "forestal", - "floresta", - "Forstwirtschaft", - "bosbouw", - "δασοκομία", - "δασολογία", - "ormancılık", - "erdészet", - "gozdarstvo", - "metsandus", - "" - ], - "key::78": [ - "maritime", - "marittima", - "marittime", - "marittimo", - "marítimo", - "marítimo", - "maritiem", - "ναυτικός", - "ναυτική", - "ναυτικό", - "ναυτικά", - "ναυτιλιακός", - "ναυτιλιακή", - "ναυτιλιακό", - "ναυτιλιακά", - "θαλάσσιος", - "θαλάσσια", - "θαλάσσιο", - "denizcilik", - "tengeri", - "morski", - "mere", - "merendus", - "" - ], - "key::79": [ - "sports", - "sport", - "deportes", - "esportes", - "Sport", - "sport", - "sportwetenschappen", - "άθληση", - "γυμναστικήδραστηριότητα", - "spor", - "sport", - "šport", - "sport", - "spordi", - "" - ], - "key::80": [ - "surgery", - "chirurgia", - "chirurgiche", - "cirugía", - "cirurgia", - "Chirurgie", - "chirurgie", - "heelkunde", - "εγχείρηση", - "επέμβαση", - "χειρουργικήεπέμβαση", - "cerrahi", - "sebészet", - "kirurgija", - "kirurgia", - "" - ], - "key::81": [ - "cultural", - "culturale", - "culturali", - "cultura", - "cultural", - "cultural", - "kulturell", - "cultureel", - "πολιτιστικός", - "πολιτιστική", - "πολιτιστικό", - "πολιτισμικός", - "πολιτισμική", - "πολιτισμικό", - "kültürel", - "kultúrális", - "kulturni", - "kultuuri", - "kultuuriline", - "" - ], - "key::82": [ - "computerscience", - "informatica", - "ordenador", - "computadora", - "informática", - "computación", - "cienciasdelacomputación", - "ciênciadacomputação", - "Computer", - "computer", - "υπολογιστής", - "ηλεκτρονικόςυπολογιστής", - "bilgisayar", - "számítógép", - "računalnik", - "arvuti", - "" - ], - "key::83": [ - "finance", - "financial", - "finanza", - "finanziarie", - "finanza", - "financiero", - "finanças", - "financeiro", - "Finanzen", - "finanziell", - "financiën", - "financieel", - "χρηματοοικονομικά", - "χρηματοδότηση", - "finanse", - "finansal", - "pénzügy", - "pénzügyi", - "finance", - "finančni", - "finants", - "finantsiline", - "" - ], - "key::84": [ - "communication", - "comunicazione", - "comuniciación", - "comunicação", - "Kommunikation", - "communication", - "επικοινωνία", - "iletişim", - "kommunikáció", - "komuniciranje", - "kommunikatsioon", - "" - ], - "key::85": [ - "justice", - "giustizia", - "justicia", - "justiça", - "Recht", - "Justiz", - "justitie", - "gerechtigheid", - "δικαιοσύνη", - "υπουργείοδικαιοσύνης", - "δίκαιο", - "adalet", - "igazságügy", - "pravo", - "õigus", - "" - ], - "key::86": [ - "aerospace", - "aerospaziale", - "aerospaziali", - "aeroespacio", - "aeroespaço", - "Luftfahrt", - "luchtvaart", - "ruimtevaart", - "αεροπορικός", - "αεροπορική", - "αεροπορικό", - "αεροναυπηγικός", - "αεροναυπηγική", - "αεροναυπηγικό", - "αεροναυπηγικά", - "havacılıkveuzay", - "légtér", - "zrakoplovstvo", - "atmosfäär", - "kosmos", - "" - ], - "key::87": [ - "dermatology", - "dermatologia", - "dermatología", - "dermatologia", - "Dermatologie", - "dermatologie", - "δρματολογία", - "dermatoloji", - "bőrgyógyászat", - "dermatológia", - "dermatologija", - "dermatoloogia", - "" - ], - "key::88": [ - "architecture", - "architettura", - "arquitectura", - "arquitetura", - "Architektur", - "architectuur", - "αρχιτεκτονική", - "mimarlık", - "építészet", - "arhitektura", - "arhitektuur", - "" - ], - "key::89": [ - "mathematics", - "matematica", - "matematiche", - "matemáticas", - "matemáticas", - "Mathematik", - "wiskunde", - "mathematica", - "μαθηματικά", - "matematik", - "matematika", - "matematika", - "matemaatika", - "" - ], - "key::90": [ - "language", - "lingue", - "linguistica", - "linguistiche", - "lenguaje", - "idioma", - "língua", - "idioma", - "Sprache", - "taal", - "taalkunde", - "γλώσσα", - "dil", - "nyelv", - "jezik", - "keel", - "" - ], - "key::91": [ - "neuroscience", - "neuroscienza", - "neurociencia", - "neurociência", - "Neurowissenschaft", - "neurowetenschappen", - "νευροεπιστήμη", - "nörobilim", - "idegtudomány", - "nevroznanost", - "neuroteadused", - "" - ], - "key::92": [ - "automation", - "automazione", - "automatización", - "automação", - "Automatisierung", - "automatisering", - "αυτοματοποίηση", - "otomasyon", - "automatizálás", - "avtomatizacija", - "automatiseeritud", - "" - ], - "key::93": [ - "pediatric", - "pediatria", - "pediatriche", - "pediatrico", - "pediátrico", - "pediatría", - "pediátrico", - "pediatria", - "pädiatrisch", - "pediatrische", - "παιδιατρική", - "pediatrik", - "gyermekgyógyászat", - "pediatrija", - "pediaatria", - "" - ], - "key::94": [ - "photonics", - "fotonica", - "fotoniche", - "fotónica", - "fotônica", - "Photonik", - "fotonica", - "φωτονική", - "fotonik", - "fotonika", - "fotonika", - "fotoonika", - "" - ], - "key::95": [ - "mechanics", - "meccanica", - "meccaniche", - "mecánica", - "mecânica", - "Mechanik", - "Maschinenbau", - "mechanica", - "werktuigkunde", - "μηχανικής", - "mekanik", - "gépészet", - "mehanika", - "mehaanika", - "" - ], - "key::96": [ - "psychiatrics", - "psichiatria", - "psichiatrica", - "psichiatriche", - "psiquiatría", - "psiquiatria", - "Psychiatrie", - "psychiatrie", - "ψυχιατρική", - "psikiyatrik", - "pszihiátria", - "psihiatrija", - "psühhaatria", - "" - ], - "key::97": [ - "psychology", - "fisiologia", - "psicología", - "psicologia", - "Psychologie", - "psychologie", - "ψυχολογία", - "psikoloji", - "pszihológia", - "psihologija", - "psühholoogia", - "" - ], - "key::98": [ - "automotive", - "industriaautomobilistica", - "industriadelautomóvil", - "automotriz", - "industriaautomotriz", - "automotivo", - "Automobilindustrie", - "autoindustrie", - "αυτοκίνητος", - "αυτοκίνητη", - "αυτοκίνητο", - "αυτοκινούμενος", - "αυτοκινούμενη", - "αυτοκινούμενο", - "αυτοκινητιστικός", - "αυτοκινητιστική", - "αυτοκινητιστικό", - "otomotiv", - "autóipari", - "samogiben", - "avtomobilskaindustrija", - "auto-", - "" - ], - "key::99": [ - "neurology", - "neurologia", - "neurologiche", - "neurología", - "neurologia", - "Neurologie", - "neurologie", - "zenuwleer", - "νευρολογία", - "nöroloji", - "neurológia", - "ideggyógyászat", - "nevrologija", - "neuroloogia", - "" - ], - "key::100": [ - "geology", - "geologia", - "geologiche", - "geología", - "geologia", - "Geologie", - "geologie", - "aardkunde", - "γεωλογία", - "jeoloji", - "geológia", - "földtudomány", - "geologija", - "geoloogia", - "" - ], - "key::101": [ - "microbiology", - "microbiologia", - "micro-biologia", - "microbiologiche", - "microbiología", - "microbiologia", - "Mikrobiologie", - "microbiologie", - "μικροβιολογία", - "mikrobiyoloji", - "mikrobiológia", - "mikrobiologija", - "mikrobioloogia", - "" - ], - "key::102": [ - "informatics", - "informatica", - "informática", - "informática", - "informatica", - "" - ], - "key::103": [ - "forschungsgemeinschaft", - "comunita ricerca", - "research community", - "research foundation", - "research association" - ], - "key::104": [ - "commerce", - "ticaret", - "ticarət", - "commercio", - "trade", - "handel", - "comercio" - ] - } - } -} \ No newline at end of file