From 97cd71da4d8fb80f49bbb406c88c02bacd03cb80 Mon Sep 17 00:00:00 2001 From: lopez Date: Sun, 25 Feb 2024 01:19:30 +0100 Subject: [PATCH 01/22] support HAL ID from consolidation service --- .../java/org/grobid/core/data/BiblioItem.java | 54 +++++++++++++++---- .../grobid/core/document/TEIFormatter.java | 4 ++ .../utilities/crossref/WorkDeserializer.java | 15 +++++- .../utilities/glutton/GluttonRequest.java | 6 +++ 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java b/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java index 7bd030f923..c6cf48a40c 100755 --- a/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java +++ b/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java @@ -107,6 +107,7 @@ public String toString() { ", PMID='" + PMID + '\'' + ", PMCID='" + PMCID + '\'' + ", PII='" + PII + '\'' + + ", HALId='" + halId + '\'' + ", ark='" + ark + '\'' + ", istexId='" + istexId + '\'' + ", inDOI='" + inDOI + '\'' + @@ -256,6 +257,7 @@ public String toString() { private String PMID = null; private String PMCID = null; private String PII = null; + private String halId = null; private String ark = null; private String istexId = null; private String abstract_ = null; @@ -526,6 +528,10 @@ public String getDOI() { return doi; } + public String getHalId() { + return halId; + } + public String getArk() { return ark; } @@ -1060,9 +1066,20 @@ public static String cleanDOI(String doi) { doi = doi.replaceAll("[\\p{M}]", ""); doi = doi.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); + // remove possible starting/trailing parenthesis + if (doi.startsWith("(") || doi.startsWith("[") || doi.startsWith("⟨")) + doi = doi.substring(1); + + if (doi.endsWith(")") || doi.endsWith("]") || doi.endsWith("⟩")) + doi = doi.substring(0,doi.length()-1); + return doi; } + public void setHalId(String halId) { + this.halId = halId; + } + public void setArXivId(String id) { if (id != null) { arXivId = StringUtils.normalizeSpace(id); @@ -1591,6 +1608,7 @@ public void reset() { type = null; book_type = null; doi = null; + halId = null; istexId = null; ark = null; inDOI = null; @@ -2101,6 +2119,9 @@ public String toBibTeX(String id, GrobidAnalysisConfig config) { * the corresponding field and reset the generic pubnum field. */ public void checkIdentifier() { + + System.out.println(pubnum); + // DOI if (!StringUtils.isEmpty(pubnum) && StringUtils.isEmpty(doi)) { Matcher doiMatcher = TextUtilities.DOIPattern.matcher(pubnum); @@ -2169,7 +2190,7 @@ else if (pubnum != null && pubnum.length() == 13) } } - // TODO: PII + // TODO: PII and HALId } @@ -2345,6 +2366,13 @@ else if (bookTitle == null) { tei.append("" + TextUtilities.HTMLEncode(doi) + "\n"); } + if (!StringUtils.isEmpty(halId)) { + for (int i = 0; i < indent + 2; i++) { + tei.append("\t"); + } + tei.append("" + TextUtilities.HTMLEncode(halId) + "\n"); + } + if (!StringUtils.isEmpty(arXivId)) { for (int i = 0; i < indent + 2; i++) { tei.append("\t"); @@ -2786,9 +2814,6 @@ else if (this.getYear().length() == 4) } } - /*for (int i = 0; i < indent + 2; i++) { - tei.append("\t"); - }*/ if ((volumeBlock != null) | (issue != null) || (pageRange != null) || (publication_date != null) || (publisher != null)) { for (int i = 0; i < indent + 2; i++) { @@ -2947,7 +2972,12 @@ else if (this.getYear().length() == 4) for (int i = 0; i < indent + 2; i++) { tei.append("\t"); } - if ((publication_date != null) || (pageRange != null) || (location != null) || (publisher != null) || (volumeBlock != null)) { + if (normalized_publication_date != null || + publication_date != null || + pageRange != null || + location != null || + publisher != null || + volumeBlock != null) { tei.append("\n"); } else { @@ -3177,12 +3207,13 @@ else if (this.getYear().length() == 4) } if (uri != null) { - if (uri.startsWith("http://hal.")) { + /*if (uri.startsWith("http://hal.") || ) { for (int i = 0; i < indent + 1; i++) { tei.append("\t"); } tei.append("" + TextUtilities.HTMLEncode(uri) + "\n"); - } else { + } else */ + { for (int i = 0; i < indent + 1; i++) { tei.append("\t"); } @@ -3191,7 +3222,7 @@ else if (this.getYear().length() == 4) } if (url != null) { - if (url.startsWith("http://hal.")) { + if (url.startsWith("http://hal.") || url.startsWith("https://hal.")) { for (int i = 0; i < indent + 1; i++) { tei.append("\t"); } @@ -4117,6 +4148,7 @@ public static void injectIdentifiers(BiblioItem destination, BiblioItem source) destination.setPII(source.getPII()); destination.setIstexId(source.getIstexId()); destination.setArk(source.getArk()); + destination.setHalId(source.getHalId()); } /** @@ -4140,6 +4172,8 @@ public static void correct(BiblioItem bib, BiblioItem bibo) { bib.setIstexId(bibo.getIstexId()); if (bibo.getArk() != null) bib.setArk(bibo.getArk()); + if (bibo.getHalId() != null) + bib.setHalId(bibo.getHalId()); if (bibo.getOAURL() != null) bib.setOAURL(bibo.getOAURL()); @@ -4243,6 +4277,8 @@ public static void correct(BiblioItem bib, BiblioItem bibo) { bib.setISBN10(bibo.getISBN10()); if (bibo.getISBN13() != null) bib.setISBN13(bibo.getISBN13()); + if (bibo.getHalId() != null) + bib.setHalId(bibo.getHalId()); if (bibo.getItem() != -1) { bib.setItem(bibo.getItem()); @@ -4361,7 +4397,7 @@ public boolean rejectAsReference() { if (fullAuthors == null && collaboration == null) authorSet = false; // normally properties authors and authorList are null in the current Grobid version - if (!titleSet && !authorSet && (url == null) && (doi == null)) + if (!titleSet && !authorSet && url == null && doi == null && halId ==null) return true; else return false; diff --git a/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java b/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java index f66baaa0c0..d5ea8a819e 100755 --- a/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java +++ b/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java @@ -747,6 +747,10 @@ else if (biblio.getE_Year().length() == 4) tei.append("\t\t\t\t\t" + TextUtilities.HTMLEncode(theDOI) + "\n"); } + if (!StringUtils.isEmpty(biblio.getHalId())) { + tei.append("\t\t\t\t\t" + TextUtilities.HTMLEncode(biblio.getHalId()) + "\n"); + } + if (!StringUtils.isEmpty(biblio.getArXivId())) { tei.append("\t\t\t\t\t" + TextUtilities.HTMLEncode(biblio.getArXivId()) + "\n"); } diff --git a/grobid-core/src/main/java/org/grobid/core/utilities/crossref/WorkDeserializer.java b/grobid-core/src/main/java/org/grobid/core/utilities/crossref/WorkDeserializer.java index ac496181d0..57c80dc1c3 100644 --- a/grobid-core/src/main/java/org/grobid/core/utilities/crossref/WorkDeserializer.java +++ b/grobid-core/src/main/java/org/grobid/core/utilities/crossref/WorkDeserializer.java @@ -26,7 +26,17 @@ protected BiblioItem deserializeOneItem(JsonNode item) { biblio = new BiblioItem(); //System.out.println(item.toString()); - biblio.setDOI(item.get("DOI").asText()); + JsonNode doiNode = item.get("DOI"); + if (doiNode != null && (!doiNode.isMissingNode()) ) { + String doi = doiNode.asText(); + biblio.setDOI(doi); + } + + JsonNode halNode = item.get("halId"); + if (halNode != null && (!halNode.isMissingNode()) ) { + String halId = halNode.asText(); + biblio.setHalId(halId); + } // the following are usually provided by biblio-glutton which index augmented/aggregated // metadata @@ -170,6 +180,9 @@ protected BiblioItem deserializeOneItem(JsonNode item) { if (publishPrintNode == null || publishPrintNode.isMissingNode()) { publishPrintNode = item.get("published-print"); } + if (publishPrintNode == null || publishPrintNode.isMissingNode()) { + publishPrintNode = item.get("published"); + } if (publishPrintNode != null && (!publishPrintNode.isMissingNode())) { JsonNode datePartNode = publishPrintNode.get("date-parts"); if (datePartNode != null && (!datePartNode.isMissingNode()) && diff --git a/grobid-core/src/main/java/org/grobid/core/utilities/glutton/GluttonRequest.java b/grobid-core/src/main/java/org/grobid/core/utilities/glutton/GluttonRequest.java index 0acf7ef1f7..3415e58f1f 100644 --- a/grobid-core/src/main/java/org/grobid/core/utilities/glutton/GluttonRequest.java +++ b/grobid-core/src/main/java/org/grobid/core/utilities/glutton/GluttonRequest.java @@ -117,6 +117,12 @@ public void execute() { doi = params.get("doi"); uriBuilder.setParameter("doi", doi); } + if (params.get("HALID") != null || params.get("halId") != null) { + String doi = params.get("HALID"); + if (doi == null) + doi = params.get("halId"); + uriBuilder.setParameter("halId", doi); + } if (params.get("PMID") != null || params.get("pmid") != null) { String pmid = params.get("PMID"); if (pmid == null) From a7227b55d3099211c349ab999e6607cbf8541d6b Mon Sep 17 00:00:00 2001 From: lopez Date: Sun, 25 Feb 2024 15:13:43 +0100 Subject: [PATCH 02/22] query by hal id only --- .../java/org/grobid/core/data/BiblioItem.java | 3 --- .../grobid/core/utilities/Consolidation.java | 23 +++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java b/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java index c6cf48a40c..365e5bee56 100755 --- a/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java +++ b/grobid-core/src/main/java/org/grobid/core/data/BiblioItem.java @@ -2119,9 +2119,6 @@ public String toBibTeX(String id, GrobidAnalysisConfig config) { * the corresponding field and reset the generic pubnum field. */ public void checkIdentifier() { - - System.out.println(pubnum); - // DOI if (!StringUtils.isEmpty(pubnum) && StringUtils.isEmpty(doi)) { Matcher doiMatcher = TextUtilities.DOIPattern.matcher(pubnum); diff --git a/grobid-core/src/main/java/org/grobid/core/utilities/Consolidation.java b/grobid-core/src/main/java/org/grobid/core/utilities/Consolidation.java index c07ba1f46f..e0538b586b 100755 --- a/grobid-core/src/main/java/org/grobid/core/utilities/Consolidation.java +++ b/grobid-core/src/main/java/org/grobid/core/utilities/Consolidation.java @@ -115,7 +115,7 @@ public void close() { /** * Try to consolidate one bibliographical object with crossref metadata lookup web services based on - * core metadata + * core metadata. In practice, this method is used for consolidating header metadata. */ public BiblioItem consolidate(BiblioItem bib, String rawCitation, int consolidateMode) throws Exception { final List results = new ArrayList<>(); @@ -125,6 +125,7 @@ public BiblioItem consolidate(BiblioItem bib, String rawCitation, int consolidat theDOI = cleanDOI(theDOI); } final String doi = theDOI; + String halId = bib.getHalId(); String aut = bib.getFirstAuthorSurname(); String title = bib.getTitle(); String journalTitle = bib.getJournal(); @@ -171,6 +172,13 @@ public BiblioItem consolidate(BiblioItem bib, String rawCitation, int consolidat arguments.put("query.bibliographic", rawCitation); } } + if (StringUtils.isNotBlank(halId)) { + // call based on the identified HAL ID + if (arguments == null) + arguments = new HashMap(); + if (GrobidProperties.getInstance().getConsolidationService() != GrobidConsolidationService.CROSSREF) + arguments.put("halid", halId); + } if (StringUtils.isNotBlank(aut)) { // call based on partial metadata if (GrobidProperties.getInstance().getConsolidationService() != GrobidConsolidationService.CROSSREF) { @@ -309,7 +317,9 @@ public void onError(int status, String message, Exception exception) { /** - * Try tp consolidate a list of bibliographical objects in one operation with consolidation services + * Try tp consolidate a list of bibliographical objects in one operation with consolidation services. + * In practice this method is used for consolidating the metadata of all the extracted bibliographical + * references. */ public Map consolidate(List biblios) { if (CollectionUtils.isEmpty(biblios)) @@ -333,6 +343,8 @@ public Map consolidate(List biblios) { if (StringUtils.isNotBlank(doi)) { doi = BiblioItem.cleanDOI(doi); } + // first we get the exploitable metadata + String halId = theBiblio.getHalId(); String aut = theBiblio.getFirstAuthorSurname(); String title = theBiblio.getTitle(); String journalTitle = theBiblio.getJournal(); @@ -381,6 +393,13 @@ public Map consolidate(List biblios) { arguments = new HashMap(); arguments.put("doi", doi); } + if (StringUtils.isNotBlank(halId)) { + // call based on the identified HAL ID + if (arguments == null) + arguments = new HashMap(); + if (GrobidProperties.getInstance().getConsolidationService() != GrobidConsolidationService.CROSSREF) + arguments.put("halid", halId); + } if (StringUtils.isNotBlank(rawCitation)) { // call with full raw string if (arguments == null) From 22d602e22be56e700d2441d56dbd6ee40048f9fa Mon Sep 17 00:00:00 2001 From: lopez Date: Thu, 9 May 2024 23:33:46 +0200 Subject: [PATCH 03/22] quick fix for #1113 --- .../src/main/java/org/grobid/core/document/TEIFormatter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java b/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java index d5ea8a819e..caf5f3e07e 100755 --- a/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java +++ b/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java @@ -1615,6 +1615,9 @@ public StringBuilder toTEITextPiece(StringBuilder buffer, Note note = labels2Notes.get(matching.getLeft()); OffsetPosition matchingPosition = matching.getRight(); + if (pos >= matchingPosition.start) + break; + List before = clusterTokens.subList(pos, matchingPosition.start); String clusterContentBefore = LayoutTokensUtil.normalizeDehyphenizeText(before); From 0a95872a43bc1203e5e832f6d3ead0757ae94e36 Mon Sep 17 00:00:00 2001 From: Luca Foppiano Date: Mon, 10 Jun 2024 07:43:43 +0900 Subject: [PATCH 04/22] update readme and changelog --- CHANGELOG.md | 23 +++++++++++++++++++++++ Readme.md | 1 - 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bd8938507..49522646a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [0.8.1] - 2024-06-10 + +### Added + - Identified URLs are now added in the TEI output #1099 + - Added DL models for patent processing #1082 + - Copyright and licence identification models #1078 + - Add research infrastructure recognition for funding processing #1085 + +### Changed + - Improved the recognition of URLs using (when available) PDF annotations, such as clickable links + - Updated TEI schema #1084 + - Review patent process #1082 + - Add Kotlin language to support development and testing #1096 + +### Fixed + - Sentence segmentation avoids to split sentences with an URL in the middle #1097 + - Sentence segmentation is now applied to funding and acknowledgement #1106 + - Docker image was optimized to reduce the needed space #1088 + - Fixed OOBE when processing large quantities of notes #1075 + - Corrected `` coordinate attribute name #1070 + - Fix missing coordinates in paragraph continuation #1076 + - Fixed JSON log output + ## [0.8.0] - 2023-11-19 ### Added diff --git a/Readme.md b/Readme.md index 0547371813..0b35d65896 100644 --- a/Readme.md +++ b/Readme.md @@ -105,7 +105,6 @@ Detailed end-to-end [benchmarking](https://grobid.readthedocs.io/en/latest/Bench A series of additional modules have been developed for performing __structure aware__ text mining directly on scholar PDF, reusing GROBID's PDF processing and sequence labelling weaponry: - [software-mention](https://github.com/ourresearch/software-mentions): recognition of software mentions and associated attributes in scientific literature -- [datastet](https://github.com/kermitt2/datastet): identification of named and implicit research datasets and associated attributes in scientific articles - [grobid-quantities](https://github.com/kermitt2/grobid-quantities): recognition and normalization of physical quantities/measurements - [grobid-superconductors](https://github.com/lfoppiano/grobid-superconductors): recognition of superconductor material and properties in scientific literature - [entity-fishing](https://github.com/kermitt2/entity-fishing), a tool for extracting Wikidata entities from text and document, which can also use Grobid to pre-process scientific articles in PDF, leading to more precise and relevant entity extraction and the capacity to annotate the PDF with interactive layout From b6a2a20600fe2f5360d6e780e575dea3d465e022 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Mon, 10 Jun 2024 07:56:27 +0900 Subject: [PATCH 05/22] update documentation --- doc/Configuration.md | 5 +++-- doc/Notes-grobid-developers.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/Configuration.md b/doc/Configuration.md index 8ea092594b..342b7778b2 100644 --- a/doc/Configuration.md +++ b/doc/Configuration.md @@ -85,7 +85,7 @@ CORS for the GROBID web API service can be configurated by the following yaml pa GROBID uses external implementation for recognizing the language used in a publication and for performing sentence disambiguation. -There is currently only one possible language recognition implementation possible (Cybozu Language Detector) and two possible sentence segmenters (OpenNLP, default and the Pragmatic Segmenter). +There is currently only one possible language recognition implementation possible (Cybozu Language Detector) and two possible sentence segmenters (OpenNLP (default) and the Pragmatic Segmenter). ```yml # the actual implementation for language recognition to be used @@ -95,6 +95,7 @@ There is currently only one possible language recognition implementation possibl #sentenceDetectorFactory: "org.grobid.core.lang.impl.PragmaticSentenceDetectorFactory" sentenceDetectorFactory: "org.grobid.core.lang.impl.OpenNLPSentenceDetectorFactory" ``` +**NOTE**: While OpenNLP is 60 time faster than the Pragmatic Segmenter, it performs "slightly" worst. The pragmatic segmenter runs with the JRuby Interpreter. ### Service configuration @@ -121,7 +122,7 @@ When executing the service, models can be loaded in a lazy manner (if you plan t modelPreload: true ``` -Finally the following part specifies the port to be used by the GROBID web service: +Finally, the following part specifies the port to be used by the GROBID web service: ```yml server: diff --git a/doc/Notes-grobid-developers.md b/doc/Notes-grobid-developers.md index 151d17ffd5..36ef6ba613 100644 --- a/doc/Notes-grobid-developers.md +++ b/doc/Notes-grobid-developers.md @@ -18,7 +18,7 @@ In order to make a new release: + create a github release: the easiest is to use the GitHub web interface -+ do something to publish the Java artefacts... currrently just uploading them on AWS S3 ++ do something to publish the Java artefacts... currently just uploading them on AWS S3 + you're not done, you need to update the documentation, `Readme.md`, `CHANGELOG.md` and end-to-end benchmarking (PMC and bioRxiv sets). From 4675511d2a8c5abb64f7a6531798295c2e1d6a2e Mon Sep 17 00:00:00 2001 From: Patrice Lopez <patrice.lopez@science-miner.com> Date: Sun, 16 Jun 2024 16:25:08 +0200 Subject: [PATCH 06/22] update doc, cleaning, support python env>3.9 --- Readme.md | 2 +- doc/Deep-Learning-models.md | 2 +- doc/Frequently-asked-questions.md | 2 +- doc/Grobid-batch.md | 30 ++++++------- doc/Grobid-docker.md | 28 ++++++------ doc/Grobid-java-library.md | 14 +++--- doc/Grobid-service.md | 10 +++-- doc/Install-Grobid.md | 8 ++-- doc/Notes-grobid-developers.md | 10 ++--- doc/References.md | 4 +- doc/Run-Grobid.md | 4 +- gradle.properties | 2 +- .../doc/Annotations/ActivityDiagram.png | Bin 141500 -> 0 bytes .../ArgoUMLFiles/ActivityDiagram.zargo | Bin 12848 -> 0 bytes .../ArgoUMLFiles/ClassDiagram.zargo | Bin 10473 -> 0 bytes grobid-core/doc/Annotations/ClassDiagram.png | Bin 35245 -> 0 bytes grobid-core/doc/licenseAgreemet.txt | 41 ------------------ .../core/jni/PythonEnvironmentConfig.java | 4 +- 18 files changed, 61 insertions(+), 100 deletions(-) delete mode 100644 grobid-core/doc/Annotations/ActivityDiagram.png delete mode 100644 grobid-core/doc/Annotations/ArgoUMLFiles/ActivityDiagram.zargo delete mode 100644 grobid-core/doc/Annotations/ArgoUMLFiles/ClassDiagram.zargo delete mode 100644 grobid-core/doc/Annotations/ClassDiagram.png delete mode 100755 grobid-core/doc/licenseAgreemet.txt diff --git a/Readme.md b/Readme.md index 0b35d65896..66b4dd6791 100644 --- a/Readme.md +++ b/Readme.md @@ -105,10 +105,10 @@ Detailed end-to-end [benchmarking](https://grobid.readthedocs.io/en/latest/Bench A series of additional modules have been developed for performing __structure aware__ text mining directly on scholar PDF, reusing GROBID's PDF processing and sequence labelling weaponry: - [software-mention](https://github.com/ourresearch/software-mentions): recognition of software mentions and associated attributes in scientific literature +- [datastet](https://github.com/kermitt2/datastet): identification of sections and sentences introducing datasets in a scientific article, identification of dataset names and attributes (implict and named datasets) and classification of the type of datasets - [grobid-quantities](https://github.com/kermitt2/grobid-quantities): recognition and normalization of physical quantities/measurements - [grobid-superconductors](https://github.com/lfoppiano/grobid-superconductors): recognition of superconductor material and properties in scientific literature - [entity-fishing](https://github.com/kermitt2/entity-fishing), a tool for extracting Wikidata entities from text and document, which can also use Grobid to pre-process scientific articles in PDF, leading to more precise and relevant entity extraction and the capacity to annotate the PDF with interactive layout -- [datastet](https://github.com/kermitt2/datastet): identification of sections and sentences introducing datasets in a scientific article, identification of dataset names (implict and named datasets) and classification of the type of these datasets - [grobid-ner](https://github.com/kermitt2/grobid-ner): named entity recognition - [grobid-astro](https://github.com/kermitt2/grobid-astro): recognition of astronomical entities in scientific papers - [grobid-bio](https://github.com/kermitt2/grobid-bio): a toy bio-entity tagger using BioNLP/NLPBA 2004 dataset diff --git a/doc/Deep-Learning-models.md b/doc/Deep-Learning-models.md index 335e3d3d4f..904a5ea367 100644 --- a/doc/Deep-Learning-models.md +++ b/doc/Deep-Learning-models.md @@ -20,7 +20,7 @@ Current neural models can be up to 50 times slower than CRF, depending on the ar By default, only CRF models are used by Grobid. You need to select the Deep Learning models you would like to use in the GROBID configuration yaml file (`grobid/grobid-home/config/grobid.yaml`). See [here](https://grobid.readthedocs.io/en/latest/Configuration/#configuring-the-models) for more details on how to select these models. The most convenient way to use the Deep Learning models is to use the full GROBID Docker image and pass a configuration file at launch of the container describing the selected models to be used instead of the default CRF ones. Note that the full GROBID Docker image is already configured to use Deep Learning models for bibliographical reference and affiliation-address parsing. -For current GROBID version 0.8.0, we recommend considering the usage of the following Deep Learning models: +For current GROBID version 0.8.1, we recommend considering the usage of the following Deep Learning models: - `citation` model: for bibliographical parsing, the `BidLSTM_CRF_FEATURES` architecture provides currently the best accuracy, significantly better than CRF (+3 to +5 points in F1-Score). With a GPU, there is normally no runtime impact by selecting this model. SciBERT fine-tuned model performs currently at lower accuracy. diff --git a/doc/Frequently-asked-questions.md b/doc/Frequently-asked-questions.md index 809d98dff0..6fdc5850d9 100644 --- a/doc/Frequently-asked-questions.md +++ b/doc/Frequently-asked-questions.md @@ -56,7 +56,7 @@ In addition, consider more RAM memory when running Deep Learning model on CPU, e You will get the embedded images converted into `.png` by using the normal batch command. For instance: ```console -java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn ~/test/in/ -dOut ~/test/out -exe processFullText +java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn ~/test/in/ -dOut ~/test/out -exe processFullText ``` There is a web service doing the same, returning everything in a big zip file, `processFulltextAssetDocument`, still usable but deprecated. diff --git a/doc/Grobid-batch.md b/doc/Grobid-batch.md index bd936935ea..d856126eab 100644 --- a/doc/Grobid-batch.md +++ b/doc/Grobid-batch.md @@ -20,7 +20,7 @@ The following command display some help for the batch commands: Be sure to replace `<current version>` with the current version of GROBID that you have installed and built. For example: ```bash -> java -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -h +> java -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -h ``` The available batch commands are listed bellow. For those commands, at least `-Xmx1G` is used to set the JVM memory to avoid *OutOfMemoryException* given the current size of the Grobid models and the crazyness of some PDF. For complete fulltext processing, which involve all the GROBID models, `-Xmx4G` is recommended (although allocating less memory is usually fine). @@ -42,7 +42,7 @@ The needed parameters for that command are: Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -r -exe processHeader +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -r -exe processHeader ``` WARNING: the expected extension of the PDF files to be processed is .pdf @@ -68,7 +68,7 @@ WARNING: the expected extension of the PDF files to be processed is .pdf Example: ```bash -> java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processFullText +> java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processFullText ``` WARNING: the expected extension of the PDF files to be processed is .pdf @@ -82,7 +82,7 @@ WARNING: the expected extension of the PDF files to be processed is .pdf Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -exe processDate -s "some date to extract and format" +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -exe processDate -s "some date to extract and format" ``` ### processAuthorsHeader @@ -94,7 +94,7 @@ Example: Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -exe processAuthorsHeader -s "some authors" +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -exe processAuthorsHeader -s "some authors" ``` ### processAuthorsCitation @@ -106,7 +106,7 @@ Example: Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -exe processAuthorsCitation -s "some authors" +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -exe processAuthorsCitation -s "some authors" ``` ### processAffiliation @@ -118,7 +118,7 @@ Example: Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -exe processAffiliation -s "some affiliation" +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -exe processAffiliation -s "some affiliation" ``` ### processRawReference @@ -130,7 +130,7 @@ Example: Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -exe processRawReference -s "a reference string" +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -exe processRawReference -s "a reference string" ``` ### processReferences @@ -146,7 +146,7 @@ Example: Example: ```bash -> java -Xmx2G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processReferences +> java -Xmx2G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processReferences ``` WARNING: the expected extension of the PDF files to be processed is `.pdf` @@ -162,7 +162,7 @@ WARNING: the expected extension of the PDF files to be processed is `.pdf` Example: ```bash -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processCitationPatentST36 +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processCitationPatentST36 ``` WARNING: extension of the ST.36 files to be processed must be `.xml` @@ -178,7 +178,7 @@ WARNING: extension of the ST.36 files to be processed must be `.xml` Example: ``` -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processCitationPatentTXT +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processCitationPatentTXT ``` WARNING: extension of the text files to be processed must be `.txt`, and expected encoding is `UTF-8` @@ -194,7 +194,7 @@ WARNING: extension of the text files to be processed must be `.txt`, and expecte Example: ``` -> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processCitationPatentPDF +> java -Xmx1G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe processCitationPatentPDF ``` WARNING: extension of the text files to be processed must be `.pdf` @@ -210,7 +210,7 @@ WARNING: extension of the text files to be processed must be `.pdf` Example: ```bash -> java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe createTraining +> java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe createTraining ``` WARNING: the expected extension of the PDF files to be processed is `.pdf` @@ -226,7 +226,7 @@ WARNING: the expected extension of the PDF files to be processed is `.pdf` Example: ```bash -> java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe createTrainingBlank +> java -Xmx4G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -exe createTrainingBlank ``` WARNING: the expected extension of the PDF files to be processed is `.pdf` @@ -244,7 +244,7 @@ The needed parameters for that command are: Example: ```bash -> java -Xmx2G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.0-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -r -exe processPDFAnnotation +> java -Xmx2G -Djava.library.path=grobid-home/lib/lin-64:grobid-home/lib/lin-64/jep -jar grobid-core/build/libs/grobid-core-0.8.1-onejar.jar -gH grobid-home -dIn /path/to/input/directory -dOut /path/to/output/directory -r -exe processPDFAnnotation ``` WARNING: extension of the text files to be processed must be `.pdf` diff --git a/doc/Grobid-docker.md b/doc/Grobid-docker.md index fd839dc6fb..7b447a0cec 100644 --- a/doc/Grobid-docker.md +++ b/doc/Grobid-docker.md @@ -26,13 +26,13 @@ The process for retrieving and running the image is as follow: Current latest version: ```bash -> docker pull grobid/grobid:0.8.0 +> docker pull grobid/grobid:0.8.1 ``` - Run the container: ```bash -> docker run --rm --gpus all --init --ulimit core=0 -p 8070:8070 grobid/grobid:0.8.0 +> docker run --rm --gpus all --init --ulimit core=0 -p 8070:8070 grobid/grobid:0.8.1 ``` The image will automatically uses the GPU and CUDA version available on your host machine, but only on Linux. GPU usage via a container on Windows and MacOS machine is currently not supported by Docker. If no GPU are available, CPU will be used. @@ -88,7 +88,7 @@ The process for retrieving and running the image is as follow: Latest version: ```bash -> docker pull lfoppiano/grobid:0.8.0 +> docker pull lfoppiano/grobid:0.8.1 ``` - Run the container: @@ -100,7 +100,7 @@ Latest version: Latest version: ```bash -> docker run --rm --init --ulimit core=0 -p 8070:8070 lfoppiano/grobid:0.8.0 +> docker run --rm --init --ulimit core=0 -p 8070:8070 lfoppiano/grobid:0.8.1 ``` Note the default version is running on port `8070`, however it can be mapped on the more traditional port `8080` of your host with the following command: @@ -121,7 +121,7 @@ Grobid web services are then available as described in the [service documentatio The simplest way to pass a modified configuration to the docker image is to mount the yaml GROBID config file `grobid.yaml` when running the image. Modify the config file `grobid/grobid-home/config/grobid.yaml` according to your requirements on the host machine and mount it when running the image as follow: ```bash -docker run --rm --gpus all --init --ulimit core=0 -p 8080:8070 -p 8081:8071 -v /home/lopez/grobid/grobid-home/config/grobid.yaml:/opt/grobid/grobid-home/config/grobid.yaml:ro grobid/grobid:0.8.0 +docker run --rm --gpus all --init --ulimit core=0 -p 8080:8070 -p 8081:8071 -v /home/lopez/grobid/grobid-home/config/grobid.yaml:/opt/grobid/grobid-home/config/grobid.yaml:ro grobid/grobid:0.8.1 ``` You need to use an absolute path to specify your modified `grobid.yaml` file. @@ -222,25 +222,25 @@ Without this requirement, the image might default to CPU, even if GPU are availa For being able to use both CRF and Deep Learningmodels, use the dockerfile `./Dockerfile.delft`. The only important information then is the version which will be checked out from the tags. ```bash -> docker build -t grobid/grobid:0.8.0 --build-arg GROBID_VERSION=0.8.0 --file Dockerfile.delft . +> docker build -t grobid/grobid:0.8.1 --build-arg GROBID_VERSION=0.8.1 --file Dockerfile.delft . ``` Similarly, if you want to create a docker image from the current master, development version: ```bash -docker build -t grobid/grobid:0.8.1-SNAPSHOT --build-arg GROBID_VERSION=0.8.1-SNAPSHOT --file Dockerfile.delft . +docker build -t grobid/grobid:0.8.2-SNAPSHOT --build-arg GROBID_VERSION=0.8.2-SNAPSHOT --file Dockerfile.delft . ``` -In order to run the container of the newly created image, for example for the development version `0.8.1-SNAPSHOT`, using all GPU available: +In order to run the container of the newly created image, for example for the development version `0.8.2-SNAPSHOT`, using all GPU available: ```bash -> docker run --rm --gpus all --init --ulimit core=0 -p 8080:8070 -p 8081:8071 grobid/grobid:0.8.1-SNAPSHOT +> docker run --rm --gpus all --init --ulimit core=0 -p 8080:8070 -p 8081:8071 grobid/grobid:0.8.2-SNAPSHOT ``` In practice, you need to indicate which models should use a Deep Learning model implementation and which ones can remain with a faster CRF model implementation, which is done currently in the `grobid.yaml` file. Modify the config file `grobid/grobid-home/config/grobid.yaml` accordingly on the host machine and mount it when running the image as follow: ```bash -docker run --rm --gpus all --init --ulimit core=0 -p 8080:8070 -p 8081:8071 -v /home/lopez/grobid/grobid-home/config/grobid.yaml:/opt/grobid/grobid-home/config/grobid.yaml:ro grobid/grobid:0.8.1-SNAPSHOT +docker run --rm --gpus all --init --ulimit core=0 -p 8080:8070 -p 8081:8071 -v /home/lopez/grobid/grobid-home/config/grobid.yaml:/opt/grobid/grobid-home/config/grobid.yaml:ro grobid/grobid:0.8.2-SNAPSHOT ``` You need to use an absolute path to specify your modified `grobid.yaml` file. @@ -262,19 +262,19 @@ The container name is given by the command: For building a CRF-only image, the dockerfile to be used is `./Dockerfile.crf`. The only important information then is the version which will be checked out from the tags. ```bash -> docker build -t grobid/grobid:0.8.0 --build-arg GROBID_VERSION=0.8.0 --file Dockerfile.crf . +> docker build -t grobid/grobid:0.8.1 --build-arg GROBID_VERSION=0.8.1 --file Dockerfile.crf . ``` Similarly, if you want to create a docker image from the current master, development version: ```bash -> docker build -t grobid/grobid:0.8.1-SNAPSHOT --build-arg GROBID_VERSION=0.8.1-SNAPSHOT --file Dockerfile.crf . +> docker build -t grobid/grobid:0.8.2-SNAPSHOT --build-arg GROBID_VERSION=0.8.2-SNAPSHOT --file Dockerfile.crf . ``` -In order to run the container of the newly created image, for example for version `0.8.1`: +In order to run the container of the newly created image, for example for version `0.8.2-SNAPSHOT`: ```bash -> docker run --rm --init --ulimit core=0 -p 8080:8070 -p 8081:8071 grobid/grobid:0.8.1 +> docker run --rm --init --ulimit core=0 -p 8080:8070 -p 8081:8071 grobid/grobid:0.8.2-SNAPSHOT ``` For testing or debugging purposes, you can connect to the container with a bash shell (logs are under `/opt/grobid/logs/`): diff --git a/doc/Grobid-java-library.md b/doc/Grobid-java-library.md index 7c2e99f535..1e3ea74c52 100644 --- a/doc/Grobid-java-library.md +++ b/doc/Grobid-java-library.md @@ -9,7 +9,7 @@ The second option is of course to build yourself Grobid and to use the generated ## Using maven -The Java artefacts of the latest GROBID release (0.8.0) are uploaded on a DIY repository. +The Java artefacts of the latest GROBID release (0.8.1) are uploaded on a DIY repository. You need to add the following snippet in your `pom.xml` in order to configure it: @@ -29,19 +29,19 @@ Here an example of `grobid-core` dependency: <dependency> <groupId>org.grobid</groupId> <artifactId>grobid-core</artifactId> - <version>0.8.0</version> + <version>0.8.1</version> </dependency> ``` -If you want to work on a SNAPSHOT development version, you need to download and build the current master yourself, and include in your pom file the path to the local snapshot Grobid jar file, for instance as follow (if necessary replace `0.8.1-SNAPSHOT` by the valid `<current version>`): +If you want to work on a SNAPSHOT development version, you need to download and build the current master yourself, and include in your pom file the path to the local snapshot Grobid jar file, for instance as follow (if necessary replace `0.8.2-SNAPSHOT` by the valid `<current version>`): ```xml <dependency> <groupId>org.grobid</groupId> <artifactId>grobid-core</artifactId> - <version>0.8.1-SNAPSHOT</version> + <version>0.8.2-SNAPSHOT</version> <scope>system</scope> - <systemPath>${project.basedir}/lib/grobid-core-0.8.1-SNAPSHOT.jar</systemPath> + <systemPath>${project.basedir}/lib/grobid-core-0.8.2-SNAPSHOT.jar</systemPath> </dependency> ``` @@ -59,8 +59,8 @@ Add the following snippet in your gradle.build file: and add the Grobid dependency as well: ``` - implement 'org.grobid:grobid-core:0.8.0' - implement 'org.grobid:grobid-trainer:0.8.0' + implement 'org.grobid:grobid-core:0.8.1' + implement 'org.grobid:grobid-trainer:0.8.1' ``` ## API call diff --git a/doc/Grobid-service.md b/doc/Grobid-service.md index 10913e7534..4b3f4129cc 100644 --- a/doc/Grobid-service.md +++ b/doc/Grobid-service.md @@ -27,9 +27,9 @@ From a development installation, you can also build and install the service as a cd .. mkdir grobid-installation cd grobid-installation -unzip ../grobid/grobid-service/build/distributions/grobid-service-0.8.0.zip -mv grobid-service-0.8.0 grobid-service -unzip ../grobid/grobid-home/build/distributions/grobid-home-0.8.0.zip +unzip ../grobid/grobid-service/build/distributions/grobid-service-0.8.1.zip +mv grobid-service-0.8.1 grobid-service +unzip ../grobid/grobid-home/build/distributions/grobid-home-0.8.1.zip ./grobid-service/bin/grobid-service ``` @@ -125,13 +125,15 @@ The consolidation parameters (`consolidateHeader`, `consolidateCitations`, `cons * `1`, means consolidation against CrossRef/biblio-glutton and update of metadata: when we have a DOI match, the publisher metadata are combined with the metadata extracted from the PDF, possibly correcting them * `2`, means consolidation against CrossRef/biblio-glutton and, if matching, addition of the DOI only +The consolidation for header can use a fourth value (`3`), restricting the consolidation to the usage of DOI only, if a DOI has been extracted in the header section. + ### PDF to TEI conversion services #### /api/processHeaderDocument Extract the header of the input PDF document, normalize it and convert it into a TEI XML or [BibTeX] format. -`consolidateHeader` is a string of value `0` (no consolidation), `1` (consolidate and inject all extra metadata, default value), or `2` (consolidate the header metadata and inject DOI only). +`consolidateHeader` is a string of value `0` (no consolidation), `1` (consolidate and inject all extra metadata, default value), `2` (consolidate the header metadata and inject DOI only) or `3` (consolidate using only extracted DOI, if extracted, and do not try to consolidate using any other metadata). | method | request type | response type | parameters | requirement | description | |------------|-----------------------|---------------------|--------------------------|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/doc/Install-Grobid.md b/doc/Install-Grobid.md index 01d2da98ef..1f85aff34e 100644 --- a/doc/Install-Grobid.md +++ b/doc/Install-Grobid.md @@ -8,17 +8,17 @@ Note: Java/JDK 8 is not supported anymore from Grobid version `0.8.0` and the mi ### Latest stable release -The [latest stable release](https://github.com/kermitt2/grobid#latest-version) of GROBID is version ```0.8.0``` which can be downloaded as follow: +The [latest stable release](https://github.com/kermitt2/grobid#latest-version) of GROBID is version ```0.8.1``` which can be downloaded as follow: ```bash -> wget https://github.com/kermitt2/grobid/archive/0.8.0.zip -> unzip 0.8.0.zip +> wget https://github.com/kermitt2/grobid/archive/0.8.1.zip +> unzip 0.8.1.zip ``` or using the [docker](Grobid-docker.md) container. ### Current development version -The current development version is ```0.8.1-SNAPSHOT```, which can be downloaded from GitHub and built as follow: +The current development version is ```0.8.2-SNAPSHOT```, which can be downloaded from GitHub and built as follow: Clone source code from github: ```bash diff --git a/doc/Notes-grobid-developers.md b/doc/Notes-grobid-developers.md index 36ef6ba613..c5b642c1cb 100644 --- a/doc/Notes-grobid-developers.md +++ b/doc/Notes-grobid-developers.md @@ -9,11 +9,11 @@ The idea anyway is that people will use Grobid with the Docker image, the servic In order to make a new release: -+ tag the project branch to be releases, for instance a version `0.8.0`: ++ tag the project branch to be releases, for instance a version `0.8.1`: ``` -> git tag 0.8.0 -> git push origin 0.8.0 +> git tag 0.8.1 +> git push origin 0.8.1 ``` + create a github release: the easiest is to use the GitHub web interface @@ -35,7 +35,7 @@ In order to make a new release: ``` dependencies { - implementation 'org.grobid:grobid-core:0.7.3' + implementation 'org.grobid:grobid-core:0.8.1' } ``` @@ -55,7 +55,7 @@ for maven projects: <dependency> <groupId>org.grobid</groupId> <artifactId>grobid-core</artifactId> - <version>0.8.0</version> + <version>0.8.1</version> </dependency> ``` diff --git a/doc/References.md b/doc/References.md index 26887cd3f2..dfee440ee1 100644 --- a/doc/References.md +++ b/doc/References.md @@ -3,7 +3,7 @@ If you want to cite this work, please simply refer to the github project: ``` -GROBID (2008-2022) <https://github.com/kermitt2/grobid> +GROBID (2008-2024) <https://github.com/kermitt2/grobid> ``` Please do not include a particular person name to emphasize the project and the tool ! @@ -17,7 +17,7 @@ Here's a BibTeX entry using the [Software Heritage](https://www.softwareheritage title = {GROBID}, howpublished = {\url{https://github.com/kermitt2/grobid}}, publisher = {GitHub}, - year = {2008--2023}, + year = {2008--2024}, archivePrefix = {swh}, eprint = {1:dir:dab86b296e3c3216e2241968f0d63b68e8209d3c} } diff --git a/doc/Run-Grobid.md b/doc/Run-Grobid.md index 673a2c20c5..2f095fedcb 100644 --- a/doc/Run-Grobid.md +++ b/doc/Run-Grobid.md @@ -9,13 +9,13 @@ For convenience, we provide two docker images: - the **full** image provides the best accuracy, because it includes all the required python and TensorFlow libraries, GPU support and all Deep Learning model resources. However it requires more resources, ideally a GPU (it will be automatically detected on Linux). If you have a limited amount of PDF, a good machine, and prioritize accuracy, use this Grobid flavor. To run this version of Grobid, the command is: ```console -docker run --rm --gpus all --init --ulimit core=0 -p 8070:8070 grobid/grobid:0.8.0 +docker run --rm --gpus all --init --ulimit core=0 -p 8070:8070 grobid/grobid:0.8.1 ``` - the **lightweight** image offers best runtime performance, memory usage and Docker image size. However, it does not use some of the best performing models in term of accuracy. If you have a lot of PDF to process, a low resource system, and accuracy is not so important, use this flavor: ```console -docker run --rm --init --ulimit core=0 -p 8070:8070 lfoppiano/grobid:0.8.0 +docker run --rm --init --ulimit core=0 -p 8070:8070 lfoppiano/grobid:0.8.1 ``` More documentation on the Docker images can be found [here](Grobid-docker.md). diff --git a/gradle.properties b/gradle.properties index 35b314eaff..7b3c318651 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=0.8.1-SNAPSHOT +version=0.8.1 # Set workers to 1 that even for parallel builds it works. (I guess the shadow plugin makes some trouble) org.gradle.workers.max=1 org.gradle.caching = true diff --git a/grobid-core/doc/Annotations/ActivityDiagram.png b/grobid-core/doc/Annotations/ActivityDiagram.png deleted file mode 100644 index 346b80e56546e3b191a2655d3a57725bbf6be7ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141500 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%0Ae!0h{uQD13z}mlLx;5Ze7Fn}nE%~Hc7><IPJi#O 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 R%K-T{T1!u}<id?V{tFHWM6mz> diff --git a/grobid-core/doc/Annotations/ArgoUMLFiles/ActivityDiagram.zargo b/grobid-core/doc/Annotations/ArgoUMLFiles/ActivityDiagram.zargo deleted file mode 100644 index 5a9f0edb40bbc58f763990bf2f8c6364d724dc38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12848 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 JWc>T@{{S~w7{34j diff --git a/grobid-core/doc/Annotations/ArgoUMLFiles/ClassDiagram.zargo b/grobid-core/doc/Annotations/ArgoUMLFiles/ClassDiagram.zargo deleted file mode 100644 index 60c5e2b6aa39953e7b54e23598eed52ceaaf0331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10473 zcmb7~Wo#W=ldjE>m?4H3W42>vW~OaBW@ct)#%*S1W@cuJA&!}u8Fx&Rj6Ug{IdkVo zw_2_4Ug}l-_Pa{!$D;yBLqcJI!Tmm}Rj7o({uZde?}e@O9UVo?^-Uf0t?Bd~Ol_;a z$pTjyP`a>w5e6aia(!;TQyc-*7d4*!sCSwctRsK$v%>KvU4Q!(O}m_QBe-G>Nu0(m zZ);MRM%7x4xf;k;+OGUSN2A+gP>E9RK<kvO86X}eaA8&8G@?lf6g48XG2<LxzN`{} zQy9;9d9bcat=z)UqmJ^%h^gDsz<Y+{9IIi_qjhOYgW}%rig#_=WlfYvezZzc+C!J; z(8qONqNWPTmucJmAy6mL*Xsmh5vnLuaW*N_Cz0^EfErKO1G7RKz-KQy@?d5ML_2rP zlnxSGTaW~H4W5K$ZJ`o!H;(RSOT#kq_mTM2C?l^Jc+jKb+Mhe-{5(1j)B9=$Ac+2H zz+p01z%}Ol?F0EQEI3Eqa}G|KfnY8?z*4am625Z)j87m$GbKQnwetgozAU3qr}Rdt zrfYe_uG(712WZnAmP;u7tm`n-D~iMk%}czfg33dhWfHvcjLq<pXmbdvGG4g7rUPsD zLtjlj2sN^@`Q8~Vay)+7v7;Fxdu>+U7DP*yGnM6*ks4jT>K@w*K7JFcZAscjP24T2 zdiLem8R~-OrMw_3T*G%93ti(=;+WWFa+KR+0Tlj)=h+?QDlZ~!j?KlY&g@AqZHRv3 zeN&_m;Afl)nPV=(Po<W|d|rX<>;nO1Y$55z^>V@&3?=vIBiuEow_J}7?=>7YK@E+9 zldUc~I;7_vh~ctByf|tJ_lx`X1B0J8Xm0t&Pd3Y)vqWhGc__ghtlTtwCsI_oB!i^* zp>C0-WSR66kTiA5r>XO*AAgOeliQ=le5s;0O!6TZrpmk%!S$k!e0zZaNW;R-cvR(? zL4bi>!-9bU{?9Tc{YRPV{-<26jg5>A|CFz>Bb}Y8wbi+{rR^%mr&qq-7g$?91SWxW zseA&J45t}#b9Mnj!GyG|K7(4o*Ol3yagFh7jlkDyX{lz>a8+{SiMj>@Kb}g}QBSuq zPdDVU1l{g+d01Whco+pYk6c1aSV+9+FZ^&6C9pjko!)Fb*e^FHBZP8qE^o(Y2Qd{u zK^|gPt#^BG$7_8%0e-yaG+zPwvFRrcd@{kz{b^wQSY3)tK2BSN&$B<fWaslP%Wb{h zT@8!0Nr6@J)~>qU%W3GNsS>^HG|=*`!g6|s`Ft7RX#!fh<{9wJD~K~Oj}FD#h33pN zr)PPvG}DCTe`6T!5xOMEA(+f@j*+Z`A^GK$8859fTOmg-$pSpY>P94Ax!Jfs6(C4h z+|Fq?CqN7lhb)XEEH-(=@myZF6~tYWyFOmZD1I_d--Z%je#CzNv=yp!Zj7-zSn$rQ zttCMarR$-d4As(rpo*MQ)FpkDD$o+r7P2oq+~*`kpvcP*QLNzLab<^P)XF1lf#=<q z1Oy7-PS}=g97+3JDBJf*W<u$9A<*;j)%au+%3e|4_K#sO$Ks{rdXc=(u%r<7<Panl z`NF-NUEKL$d%7PX!6tN^-T5u~xL4|o3{&5*T9t0;U3n>#A^1)##h=c{Yg&zIcki*O zIt-L!Y9-LOlG8ou2}mPkV~gu2KTolwe?^8#V@DJ#fpy>2Cg_SP_Ibtjw!wV~T|uTr zeq)tx(8G)D>@S<LlSqGmIji`Lr)65>+jA3-K|wKn4Ef2Viu<@up_xlkoc86$<Jjhy z`<Kj4{=#f;5uF7gVk7_Zh|7)wk5xr1WS?dfA?TNsXOJGQ(dNXe4(-(9TC{6t@F^>2 zj{W4PqJ>CHL>#MeV?z_d!3^VIWuk)0+OZ$_Ifsa**YK4D<sN25wu0oB`Cf<li#!-- z8s*ShC6?P>y;^gyI`pCO4M%(r@n_ks`rB}$>7D^L*z!|Y?UpyiwPPgG&EL_b`5Y=> zLx>Y_!q}=~pC#_q8QEAP<z#o!d4yOa71k*431S-dmsJbY<JYvb4hj-|aiR<QfZ*H? z`y<o^SYe^Wy#q{`1d494nrOC(qVRp&%mfMBym;HdAwfnI39z6*3=~BHD1DxZ>INv! zN2rL2n*?k~B|m>lN`yj&FcX}Q{S*fU*wE5`0oA7;V5qQ}@H*3?By~j?h!&9h$N13{ zWy3c{Kk56is3Ra$EMl+ePmhe9GDOzDyr4xuq*3=IZowC^x@YHVl7V?jU@R@nhERHG z$cfsE2)1N$DlvSm7?J7w!~|_X<sRexHAPzx(~4NxOran<29l8sDwH4C?yWfr<20f| zp2Fmg0<(PBd74t!LHV?(EehN}dlP`noVYSU1!<WYb#g@B>VjsZeRO3Q@dZikP*EX- zRqxz*wWcn3#v|?H35M@36aAD368yvl(GUvZZarqSg5LCHd{9J2<=stD?O_HK@7#Gs z_&kwA89|MENN8ppUs&*l^2rKHNO8AWj6;!j2zAHk14b?hHx7NJh?p>lccdIGg5g99 z&$1T!2Qat%S&oD9`vZ6Ebre0)a#gX&TO#uyauLC9odPRggWEWiP^~zhDN=8EsS1FU zZ1tE!$;|CoBOG_jYXKNwU#g=*erR<ZDy{zBA91K;7}12|sJZ*JK^<(WlXo)srG$t; zYROS{2gI8Jrw7INrvq6~Y}Zfz6V}&)KBLb^c$hh!dN)NMQ}jm?#lH!hutFF1P2wNk zrh6^3R-f_C3*1PdO=)xg6vSmID445^u5d06GV(qxqak({fH(i9NIVaN$ad_#Aaue? zYgCoPh`6B&@-boOl<Tr&G`c_}PxlO5SBSVpUC--KnFbQKsn`lBb?a5MxMpwv1ZUiX z!93x_N)>@uR_P?^p%W(b)%*_WB=9u4yb)qjk#r886vv*oobf1_{>t)Q=ac=re8O1~ zb`TfVt^l@B!cQVN-a~^)fN-sz$&SW{$h-93Qi458fx=Gy0^5-f1z$cD0S|7rTbRRV z6YzZ9!%+#HEoOqO13NDI;3h32*~%2BL;ayj)HtBaA-|Ap9E7lVDzJ^H0~>)zW>Idp z88ZltOulnaM^Wq`2?Q_f>G#<0KTiF6!(azOObRfuW9iq#b+5_wev*muU<*rJ6!n6s zl&o*hrc5xdvJOqcLda=Hit}xX&0=`wVVAc52!kA-!LUz;w8-Y{zCpu99&zO)hsuT- zGy0r(@`03qOjzOU9?(82j-Q)g87QwEGq`Ig)o_`;s{{oh1IsQS7;%$FMCYuH76U|t zAHtyPZ6unSGLaMlQ=38{c<US#LV%`F*r~H4ic9T>&_HFBx)BWW7lHsM7G~EPn%PIW zy4HY$198PqvpwMXOGZ`Iq?QNQp~Sle6^?mMn@$EM9%$KikF@qHegdyG+M}s3GsrB3 z6h)tBOhW?c&xqE-2zi#7c}#FT>rkghrss!`8O`if3{W8=h<$B!A~DIECHe31G12*Y zlJ2uGdQV>rS?P;L#W5qNQX>acXGM`L4Ci7a1MibEnluD~vAz0N*DB&bS@)bI88O+h zZ>PFiHq#QNzRR+7^G6zEiJpO{Q(c1W_Y{Z7>#UwS<Abc8Sh-1d4U04lEZk#-xPHmz z3Apzeq)^>^2*Kc^sV62aPJZ|_4eS!5bg#CwR=O01ndhjzz~5E0TEcLQCJdO)aX?W6 z!&gBOpbDWxJh~QLp@?Pl<ux2n+XSy)9Dkvi)IIAUGJf&+l*ruu(WoNndb=#wz?bc8 zf_#P&>>kP#A51glfQ~l@Xm~WFi~(3d;_ye<ERRsF@R|@?lY4v~Y~fm{R_r#;Sjn_? zZgSX@{6VYJHtt>yZ}d%He*JYE6>_G^29THi_*!6&vBQH7IgJu<fK^Ags%WG-_42gI ze3LlfX71IleRZxo7**8t6^6)SAI!ec+-^E_hnv2O8~D;srh?d4QLjDeyUMd_Ox*6Y z$rKHfY;tz~4Ae4tefBZw0I;qa=Z%jO7}+n=8Q9Qqt;~Lo{5>`_Rk>$;Sg)PDaC-k7 z^|ALPdPTb%s3)|Jp}>A_weK@jk?qm_@fuWpf}vkU6&U57bE{pNep&v=fRu6>;E}q1 zMgP;jyW$FFB+FA+^^(y;#`mat*%3t7y)4Wm)w+Dy2aH6?xm+m~do2cgD|aTY5cVB3 z?R6s}@-BtQ=Y&+DdqFAbL&<^J1!Ev~FNFZxDCr^UJM;M<ZSr+P5&Rm5kpNMGsC>rE zZ2*^>mY9=2=&2JMIRJWZ2m@}WT<&tav%YD_d2Yf{fXE6J1u2#!(EkY32?!%JE6nIo zq#a0Du%#24Uz3UYTuZ(wY%^nRLw*R8Ts++-sJa@#BWu%3X39ZGmK^^$n`LT>l9RPu zD8_sF1`JMe7oqM+exdY%6|E0wk_($Yz3Rmg(2xaRgv&gucVJ}t60c7z+OjBQvYs>^ zw%HW~JEZut1CcVPE0hdxf72QT6%~0xLCcGlJ?*lU2;4u+L9P1BmII0rs(nEIv2@Lf z_{%T}9z=8XQp;Beb`CS+=e*GeiFCWiwFmUf?@h6x*Tx~2H2v7>99pP&H^;--1G6p_ zyiitz{TZ9!E&_@NwkP37*_eaGFDkr>-ms_yP^xv;pNPC7>+kJQ;w;5g_cV|~SJfHr zC;IwK8!({p#6i-^G#bBlW=gJ8?+l0HRF1;oS`8)8ud=5L=ls3FmsUyJbs^OKE7aq@ z()1faR3V9^4qurGxZ>3vZIF1j?}k~PKXWHero$w-59nVAPso3Sg<w<NoDCr{kqsDo z;-=-Q={<Y=oOnPpE&?IbAPio-jfPbO^q#3@el5E9y*nU9pV3tjtFqwMX*M#D*TY!l z2NkI&=&EpI`Lv*xIxfqG%%5p^OKSVuuo*Z%trU*j1z)7|)O1y{yPFvzS;}vw8$pau z+@H=l;tGD@*!iklg~KaknlWg=j6S2YkT;XJE{^dD&`wNT_lVJ;*9mVk-8I=UoQ8+( z95U<=ZY>TGIO`a)FhBA89}dd6h)&s1m@lWp*6I$zqet7Vr$YCtAKpFE4Vh}(cf969 zevsOYv^~G}$OzmvN=E(S#gMUka6JQYP*LsaYss`FOXnLOUdRZ{4+=5|#S47E)k}Qv z=Hi+IqrxQflM!h8*3y|L2qH9gpSk&Y63Vzf-II=lIRIFsvS+{sz)1AX#JW@Zwf2E0 z*iar;r@)6%;=vZq;m$55Jk6fDM8p_4)H`_DGr~I+>CPKLa8V#Bn7yM1Q}V2!keU<Z z`#IB=`NJP&b4cX!DqxTz+S00XjhXJ?(9BTbNk__QqYvdlTF2&(5;uOWg!nGYf>kQ` zsvY<|N`8gS-I9hXJ7<QmCrW==b47#2>uAG^jQEPWugcZkgfJk8(&J&>O-mRr)?gGQ z$t(QhiIUusXZi<q(m0zJZc3dde|SsjrgEauU?eAmvA((bGBZNc)a92@J~2L+3xnxI z*Q`l!FTuG|@cR>c2CBH4nX+GtVJ1dEOI4O&nj5_pZLK(uL+WQtdD3^yi@ZWB_Cn%A z_!7)%Ac0V((~pDJnoOCwH>rwPvudceDdNjYwGHap_PQ38cZLiTL7DbuqUUbb0nLi9 zT<knQXsHHT>bX}mJD9tUMUPS<y-KiCHT`<mG~ozJj%!Zru)L$|pgS}@Egwg0f1zO? zm9oOzFE67<K%pDss}7%9q$WWpkV?c*xOw3zLEEXN`lTOIrzd}}Yf2Y2u;{iDx*Hl+ z7uj_|uSL}!=Bs3BGe?=KS&SNoIod)T<QpXFH%oM%n#xybX37#NkSkKm5Gz0kUJ+v{ zZ#Zv6i%Q<5AdFJE{9{SgMd6u_c!3{elCEZ?*!hNdLG;p<W|){YW>oV)?z7p?3vU*# z#3RS{n7@X6q-INPEWFN-lRcYfF=E)(^xIwL@NsvZbARE-6I-#atSZ2HZrH<l&YHtb z$UWK+2Z>tkRtMD@*A9f%&UY*^?`v0hvXyKSpS2Cz)d!<29DBog60^O05>gWnu03Zs z;tO*2AnYF}wQon($H(mdBLro^U5dCexEG|bY7rqW8~&MeKp{l$>?@wJa+`Kgfs1lu ztv-iE!);eg`X>GNALKo{8%^ygxDQ--O{$1dnh4^d-pJzT%7(iS{j+%=#8>rayg9he zJUJ{TjDCMbJd_&GI#lp+`{;@)xBwC4O>G)Fpx`2_KZh8<O<4f9q0KQaGwXsDtzvj4 zJD@NuvI-|I+ngsw@l@ejm9XXdj2|tv$I*fs-QI;PPR3-V2`8?N8U07M-OqDxjuWXn z&h^lO>i>NAgs;f%r*rR^TwxmGw%HtFGBKR^Sl`%d;>$JvA9zsnz~_C63<d_Z_iymv z>%YMReMci_Cvz)vM|~%ATbuue2(og#mIDkZ>yRMih!88qDaPuk&lJM(a`3c+1WZW- zTtP(5kw&3Nuh&UyNW2`aBhRfZ++NPe52S}t=QP<8TamvOsOL^2*zYqaIk?YKfa@oB zK9!e*rff%Bt?Rb;pm8@S#i$7Ju}R9CD&_%>L-i6eF6)xqhzbOY(5y@z@8%;(IWe|H z>D^=Ond6jKIe|h55%4cci6l04GCw{sjWT|3F(v|&dg33F9!~klCLe>Z{6b$*00;|K zm8r6?eRIbBKHwI4A3)N)F}Sk*1pddVVp~YbncqHq1phauDF5k{vyGFvla;ZNtgVr; zmA;{qxr@1zJL7*`>MQSOK<WJWCOpY&Z#kQ6kTjws{|WlEZ}&$KiWz!%StqPdr=+r- zo_=UrR@VNn8p|>5_KfD@LU>rILi5TQv7|e#OEtMM4^{$Nii`nUZ%&&r<zV34{x@41 zA(HL>kGQmfU-qi(f1QN#oMMQVSP^R32Z`<1?k>4`FTUkGrsq_=PG{KY+>n4LGwE^G zw#DM?AOK0N^^kCimn-2Q1i&{(u|9GU#DT+btN++=JJ+P5rZJM{LzYCdsyk&#Mw~$Z z<4iayXUE|0{|5h8XZ{x_b+R?GZK$gm{jNYMO-nsBIjvNy3}E`n3{aH#E<GhbHYp7Y z9~9DhtU*b&w0iBZOxga#9V!CTN}ae@vPT0Y4inn?i<;7(!-I;9O6mg<D-l8D)Yw-# z@VfgrPSLU<5T|h&)tG1+S=!i;p1YL+An-RGgN4&p(s#4@EjIu6`G3<gynimEorA53 zxs@^9f3E)@x_>Ljz}PP_J}89X%*<qi<}5l+bJt@tEv<<O$jgRT(;}3F5RLQn@sScx zFmRAGaj;<YDVhRNm0gs%mx+dx38dteK{IV%{E-U_xA{af>ik<=|G&yd`G<TuH*52A zZEMF23ADFv<!8duHI+_H*Z7%^J)<tNF~uoW`*_FB7EpvfsUr<IED87Xr7g@|z#xJi z<0vGHE?NP2vFR^&Gmm!9jrRxdrf=D?r)kYaFXdV+rzgPyU)R}WECuCXeE2I6=@K`q zeO|U-TUI~sKaW=uHri^(I!aG;yu3b;@EUdi+q*P=nhQ&75>L-MeWT#lp<E*MHL%{F zaq%S*2Bnx#odC?sQ`R4hEpugxAEl(No9RdAFoOAN-ojWQ+f*a!L94a*_aD^N1`1(S z`6<UQu<q9Dv}IPJ*MeoaZ*Nx$guH~Fz|E6OW-i{h(+kJs48B~@Uw(#FZLk65<bskk zY+ZdWUh`Xz#_lBE$MAjH7Z}<LyHqSK8Wyams}_u<yR2LidlDSWZ*HrsUxkSe%W4~! z>Br^Ax0zd79trVZ22tiNXFtSUHy}2CYu<f6{ru%L<Er!JSF!qKr@0oi>k7h_jezrN z|K9K$yhDVRmwQJ?p7~Qk`N9fo6C1!%8}gpDsz{q{wS7hTS)*gKos_@yqzIP}rt4xT zCL^vOE8kUJb7@f8=*hJQAahv}=;UZ~(k;_Cq^0Q*_U2%^`m{ADUikfyqS=+LYc?=c zTNatMd*$s&`o_G(?x7(#@))h^q5eW6%E^i^?WqR2`hdqIvBR~l2c+|WZC}%W{(9j> z)(~mK`a0VPVBp=n7Ni+wX*2WrCBusJJR>n5Zl+pyUfa%Dry6~ZnhJ_yMzVe1xq^Qt zCYO&<Ef2Rowp=8;?cvX&1m(#H20}V>E)<O^-gZU`A*FIT#Z1<?-JJsuJVv_!aJ#9< z2l01-Z%37c$;EGI-+~G45g5qpk0hx%Bj&Vqy>8t077ir_EV1go83ff?@>Mch4#ZX< zIu&1*u)pcyurI9nT>If~rlEyBE4SdkzZHw>XeG;uiTeJmg#Pj1x{<9GPgr+AhZ3#h z?CkZ3n7-B|H!Pz$6;M}EvmkB7RamgM5og)Vf?|<i&m%q?%}A)^S{63h9J%1yXg{1C zMRHrmoBY7+?mxGxLuom({MOT#To|X3Xf}6L$SRl0IwiB)gJ(h?&AIQCPgn~ROaW2A z{rP59h+SSwzO|LymUvvsB@s;fHvGy357Gg}>!p+l{FjD?fIRq28aOX4LawQnKt^)I zaAAjpCU~I|g0XHA=8so$0WRi3Q&E4Xo}u8zu3;}33ZIg1C_k*tiPym;OoQ(Lv<QVA zUWXr;MovL57(K$!*J}x%rWGESAHaA@h8*?z3Z5b9vI9l^;*6L3A|TvG6cG*q8fr0M z3u*f6<M<0XV^^>Y<1DKKY*-6O&aQ_K5o}$)HF3|XM?&5mh565>ymvjU^|fWRy0u{~ zJ)V;W8+{znvjq=ED|sLyhXmB#3}e}0GTmlGCM4cff(@h|poDE@YuwvhV<bR2d$=ft z!K`Pll4m~J7C${X{PKle>SwT_VWFXs->+~$k52G>OwY};j3I|j<?}iFxT=BbmJ$nN zl|q6fdO<{r!MQS*Y-D<J0IPzXZvoBF_8ZsdB*}{!^C4{ij;WioByDL%wuwq~%TY3y z!&3FQB_fOKn<c%QQiZR?i;z-!C;60Nbty;tML|bj99w&k=0DfCCEDSAZ}Jp7rrPFW zC6l2gVGo5x>5J`Zq^Cy}!73Seb@sBR!bQ9*mx3f=Wkp;wpB8|em4@oG7({}NO@<Mh zg+90Q#m{FmE%diUw0ta#x@jf$7mv)E5EFL9dhlqfT)oH_JX>sQ6VVCGG;_g)Nw+*D zs|NYbIstp;VX`zDbSs=an{2A)E}Yv}a=n+WTs*pLN{kUatZbQRDn~EXj@w9v8%|cZ zZg}3g?Gr@7)=;}dFg`gxHhj3SjfcP9JC&Y|4D&G#_q#mZKmlj`;1A<a;=lH~Zt%<< zy^;-E4#@&wz}>3hv@+Ymb#J%iY6}5?AxApsTF0uvf;eqfRTW~<AgNO;KGX|amFER0 zOuy;av_BxDQh<)NU#Laf?xQbf7x7@#hY!Do!}NNW9TK~Sc6V}dM0+p_!s-gbj$Ci3 zgZQ8e2!iZ<vm^n|&^+Vy-hwbaL&<e;tnfL!Z##SnjxeE-1LbdVUAdz9Rf)|I5+pIG zsZ8QqNZ(P(cv$uqz$m9tCR2s&&=bDCQbX(A#Cn%98BgEk(?(xe-J#dXTB2gm(9~U3 zVQ<TS=l>dUwQC>e_I{O>_B6iMgqFC%cAy%jzH~8xua7yYh%c@A*#x0UpNW1Y@}rW3 zK|k_R|H>EKMnpg~lD?7(rTkLP`5hQ#3I2eKel8y3>ax)CXe~fPRK&GNl!co-kihS# z(Qq`PG?r=6tDl~D`wMd4IN>guAi<ub*SJBMsy6w{9iQ$w(b>UQ+*D7ooI%`CR|cq4 zpU0JePbshvlk%_m6Yl}@@>aez31||{xRBC54zwV6ljzb%i<)|xXLxYOy(zrwW9%D7 zah6NUHC?^vTtj2iXv=PjZ@wbGa@cP<I<O+t!$b<V_LRfxIn_2q-f;}J$lM5a(804% zh~OkY(Ki*>Lwi-DD_NF)``A7ZpW}EsP3Lt?sQcxENdUSPsgPRUkqz$qia(RFsA1dS zUKRd?tal2Uoz@+i0v-iNp!63nOyF*>Y%^ix2j8=sgb$Fgo}-PMWYS=q1iD`$@Eqlt zF=W2L6EI8ETyv{<plzFm(V=8Rb-eo2YM%}>&A4vG9FgTe3EM?b64jT6MXnwzxV}b6 zf{ik(EngRfN#S=eMtu~9#^=dF8a@<A(S$9~uP2^>+F6{+_dQ#`klMP|he3IsrtI)$ z+=nGaPa0e*`b79OA?KrhfMMdkpjw?*c>`3=i4Qzxax`{NN}<DOsy54xlTr&q+ie1y z(oIZp=qBBDN3LJ*Dzp!U_>C8x@Qf*v;3w$@hB<yi`S(C;`ZyJnHg1_VX3R4B=qv5w zE5=ptB=I`}r8@-HF(3(7#zFVG&l<*Jvf|ZeAmyIc9P`1(6pYNauHcbYvCC+p4HhxU z$QnVqSNNyR>ZDwZXB>X!A6}qh6U@oVoG9b(l{s~bTgM9ilOD?|r-ff@8G-7T#k%gp z@SAR!g??p?7`<{@1+V}x02pToHNWH}H>*Ov2Oh&WW7;&<Z+S*4d^U!h+jtH8x#wvZ zB^iaty-qu7E`>uZ+-Ly=e#ec5YKala!bybBbwhVl+_9>tv)<;Y-=|UwVTszk!VV6v z(>6xyttvspWPV43ad?tIGnXc253u|Ok?*77W<K66fU*_(X7jB2-Tvz;cT^)|h~~=u zy-@1J1p5984H>_qS{x-2b8}6AOO$<hD&?SlL#Jp$$Pm0R20}?Gy90NQNY+>*cy@kD zSih22ykp$;x5A?nefDmLF!Trjm5SSa?SMzs$4uC8_oy6_r&9MA^i?ovfBSGs6ZA|R zO62_1kotE75X$`u{70wS{?}!ShzZ;gDuDxXZWq;dj@QK~M?5yrJ#kb)dd^mcB;KTd zWp^4mw|^|bRtA-Jt#ATiXD7UFkXmS?FqI|tZ7sb1B+5W)?w1z^6Vqo}#LvFPI1=h4 zX`$bx#F>DgWGmSSh$EHB{D~E3=0ZDV<T+Y%k_1hZw9IL#_{`J;aq^CpTTW`VB>0~{ zLdaW)SU8zWL#y&d#2cTIT>;Lk?_i-fPKRnx=J3^N8IIr2^|^ic<(7cQnU+7!-S+MI z@Sf&!KeTJn*ak>u={j-}IWI|_dR1;rbzRkOy$xR`ebAJ{j6_(OC6YnH>8+-2a}@Ma zmpg9FMW5ELt&p0j`=JE4d5aDh&3ZuCi{o}5wDqPTbSFL2#!<oDic!23|5-H3D5y6# z(J4u)5kbU*Z@dv;xO5PTVvtd*0Kmk}@4QvwgLh2|!Rl9dZXk-&<pW=R9ECy<qel%E zgm>kIK_F=2{|EzmKBq(BYnlNEW4wR*xS@~b=QcdwEZ1+biYQi*4;lrgzEDv%mJP^T zw9GJj!$DCOV-Gb~GRopNpGFd3hM9ZFs!a16sK;{t+<q?A+UrBgGWDoYS>l}!ca)Ed zF=#i=NHSFxtR3Ut%H`6#9QVO<MZ^1+W97w!w{0Ek@u^o8+U^e1|FXhEEkhczQ@KqT zwNv>pD1T|}lsw3O{S0f17(=-KSQ@S{k2~`MyH<~Hq;tX$K07?fdj43(D|?#vTPxVH z&^#5orIr(DHp+?EY9f+(QD<NK?X%2V^%jx1Iaspim|ov)Z}mVEz5R#FjGGigD}3D7 z)v<RokEe6Ao>hh2-`hb-I669inofg&;bA)GhcqD=pkikI0Np4EwA~{?Z!bG_kxKPo zVn|3i)`mm&mP{2bw)-p3NHtv{(IqF5?kpjGdE*GPxKlnxw_e(@u8bbFm-9P=lx9^0 z?0kFufcrOWj@vF=vE&~+m?DjhMeQDda+(HBlOOa_K^pXIdha<B%&{5UAECVx%P1fg zga+WK7YsD`^UTyy7L-_eOfEi~jdgg<0n7Bvuz#vbCNS!0at;69N*Ny8gV8K?Wy)9w z;C}cCTstUs`t(Uv+@seIlN;R-IaUH}bNG7N(+Shy5Mt@`Kd1nzasXPhHQr#TZuQ<Q z2xt(L(}alNN+~WU@c|UpmNxP7-Mvi;r7ahJ%Emey;bEJdE1-yV)wGWSiYxGu$lo1D z1^PRa*4Lt<lE@Z5M#b}v9Y8-io^Zx8h%^uCVaViPf6fx#P7Syw?y-Q{9_ZqA6yJyv zhyp1UY~7&V2vq7d`@HagO<+duKP5@tK}K}6$RmWoMo9Bw0rCrb7j!Wsw#Oh%zlow% zw4XJmTN@<dEt9#EF5HFG1^8aiiIqA7E)wfEC|$6J4<L(v*1)BBV#ClLFknBdAfqRv zL6J;1I42l>LtJfo3oLGe4Ur4B%@4Jyn73^RBD7aL)%mgo|7o%g!P$UcUE**-b-g7s zK1Gh)A4ge2hi@PU?v>sQgOeAy&Z_;@6;UKg&cnnS<V#F)Lup-SH*4T3yspF9Y`T+b zcDID>(yZ>rp#`z?Q<tUNl(y$rezs($`%OHR;rF^-3h}gPlWi}^c~3|iJ*^YEy7WV& z=Oc)-)4q-RDkkD?8rmH)x>hah!I%+K0k1;v)h}Tz6W{4h9?DIyM6)1j#A8?aCkEq5 z%+=$yjY0`};}z?S2x?=v9Qx?cf}X+~!(tBXY+~?tlm)yxS4)>G3bhC6gq00CDAQ>n zUE&0id2EZ~vF;=BZRC+_frSQRJbHw(ao`;iC_6>>C?#dG7|lQnFi<0ziL@>DJr^c( zB(|~d_(W`NcYGn@teW&p$mD`jOMLgEPLIVm4KfO?w%&wLHj&rsT*RR#l<zV{ee^kS zyYA7&1zb@A?8VZJLLF09eArfyw6DyUpEqr6j~wl0hTk(@o_+sd1DL>~9MEsf$6^cq z8zX>2V1WJA%=Y*Gp+Au3f5!i6ZTsi+zZ1kiO-6r3$?vA5zfb?aT8{pi@$aPV4|)76 z_R#(%<Nt$0{xkF6N!1@x_g5fc{3G+faJzqI{X0_np9WH5{?Dv*f0)-lr~e)4{NYZ2 v#r!{}>;8j6{WH_wSNRVD`YRGY{X@uaAOw(xhWYab?C%5a_fk!e|9Sc^PwXjZ diff --git a/grobid-core/doc/Annotations/ClassDiagram.png b/grobid-core/doc/Annotations/ClassDiagram.png deleted file mode 100644 index f863ce24af93d5b05ca200e66a43ed0b76f10908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35245 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 diff --git a/grobid-core/doc/licenseAgreemet.txt b/grobid-core/doc/licenseAgreemet.txt deleted file mode 100755 index f23f82aab2..0000000000 --- a/grobid-core/doc/licenseAgreemet.txt +++ /dev/null @@ -1,41 +0,0 @@ -This document has been created to keep track about the exchange between grobid team and pdf2xml team about license agreement. - ------------------------------------------------- -Request sent to pdf2xml team on 22nd of August : -Hello, - - I am part of a project named grobid (hosted on source forge) under Apache license. Pdf2xml is under gpl license. For license compatibility, the tool pdf2xml is not distributed with grobid and has to be installed manually by the user/developer. - We thought that a good idea would be to deploy pdf2xml on a public maven repository, so that is will be disponible to use it. To respect the license with pdf2xml, it is possible to add a specific profile for the maven build of grobid (if you specify that specific profile it will download it else not). So if you add that profile in your build it means you accept the license agreement. - For information the archive would be a simple zip of that structure : -pdf2xml - |_win-32 - |_pdftoxml.exe - |_zlib1.dll - |_mac-64 - |_pdf2xml (build on and for mac-64 platfom) - |_lin-32 - |_pdf2xml (build on and for lin-32 platfom) - |_lin-64 - |_pdf2xml (build on and for mac-32 platfom) - -We would like to know your opinion on the subject. - -Thank you in advance for the answer to your request. - -Regards, - - -Damien ridereau ------------------------------------------------- - - ------------------------------------ -Answer recieved on 29th of August : -Hello, - -It shouldn't be a problem. Pdf2xml is under gpl since it's -based on xpdf, but I don't care much about the licence. - -Hervé ------------------------------------ - diff --git a/grobid-core/src/main/java/org/grobid/core/jni/PythonEnvironmentConfig.java b/grobid-core/src/main/java/org/grobid/core/jni/PythonEnvironmentConfig.java index c1a3781366..7254d81d98 100644 --- a/grobid-core/src/main/java/org/grobid/core/jni/PythonEnvironmentConfig.java +++ b/grobid-core/src/main/java/org/grobid/core/jni/PythonEnvironmentConfig.java @@ -100,14 +100,14 @@ public static PythonEnvironmentConfig getInstanceForVirtualEnv(String virtualEnv .stream() .map(path -> FilenameUtils.getName(path.getFileName().toString()) .replace("libpython", "").replace("python", "")) - .filter(version -> version.contains("3.7") || version.contains("3.8") || version.contains("3.9")) + .filter(version -> version.contains("3.7") || version.contains("3.8") || version.contains("3.9") || version.contains("3.10") || version.contains("3.11") || version.contains("3.12")) .distinct() .sorted() .collect(Collectors.toList()); if (CollectionUtils.isEmpty(pythonVersions)) { throw new GrobidException( - "Cannot find a suitable version (3.7, 3.8 or 3.9) of python in your virtual environment: " + + "Cannot find a suitable version (3.7 to 3.12) of python in your virtual environment: " + virtualEnv ); } From f1d703c8dc60285787c73049e7f6f30cd96505e2 Mon Sep 17 00:00:00 2001 From: Patrice Lopez <patrice.lopez@science-miner.com> Date: Mon, 17 Jun 2024 10:18:40 +0200 Subject: [PATCH 07/22] use crossref by default for consolidation --- grobid-home/config/grobid.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grobid-home/config/grobid.yaml b/grobid-home/config/grobid.yaml index 647110ecdd..9c5e4bccc4 100644 --- a/grobid-home/config/grobid.yaml +++ b/grobid-home/config/grobid.yaml @@ -25,8 +25,8 @@ grobid: consolidation: # define the bibliographical data consolidation service to be used, either "crossref" for CrossRef REST API or # "glutton" for https://github.com/kermitt2/biblio-glutton - #service: "crossref" - service: "glutton" + service: "crossref" + #service: "glutton" glutton: #url: "https://cloud.science-miner.com/glutton" url: "http://localhost:8080" From c408076ef5b1291fdfdfb20d120bef92b35fa758 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Mon, 17 Jun 2024 17:28:47 +0900 Subject: [PATCH 08/22] fix delft command --- doc/Deep-Learning-models.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Deep-Learning-models.md b/doc/Deep-Learning-models.md index 904a5ea367..c3db143110 100644 --- a/doc/Deep-Learning-models.md +++ b/doc/Deep-Learning-models.md @@ -57,7 +57,7 @@ DeLFT version `0.3.2` has been tested successfully with Python 3.7 and 3.8. For ```shell cd deflt/ -python3 grobidTagger.py delft/applications/citation tag --architecture BidLSTM_CRF +python -m delft.applications.grobidTagger citation tag --architecture BidLSTM_CRF ``` If it works (you see some annotations in JSON format), you are sure to have a working DeLFT environment for **all** GROBID models. The next steps address the native bridge between DeLFT and the JVM running GROBID. @@ -98,7 +98,7 @@ If you are using a Python environment for the DeLFT installation, you can set th ```yaml delft: - python_virtualEnv: /where/my/damned/python/virtualenv/is/ + python_virtualEnv: /where/my/damned/python/virtualenv/is/ ``` Normally by setting the Python environment path in the config file (e.g. `pythonVirtualEnv: "../delft/env"`), you will not need to launch GROBID in the same activated environment. From 8210d6995fa9a7a103a1c308a37c819a1f83003e Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Wed, 3 Jul 2024 16:55:32 +0900 Subject: [PATCH 09/22] remove jdk 17 only constructs --- build.gradle | 4 ++-- .../engines/FundingAcknowledgementParser.java | 20 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 89546fb8ac..8c716c69c0 100644 --- a/build.gradle +++ b/build.gradle @@ -64,12 +64,12 @@ subprojects { // targetCompatibility = 1.11 kotlin { - jvmToolchain(17) + jvmToolchain(11) } java { toolchain { - languageVersion.set(JavaLanguageVersion.of(17)) + languageVersion.set(JavaLanguageVersion.of(11)) } } diff --git a/grobid-core/src/main/java/org/grobid/core/engines/FundingAcknowledgementParser.java b/grobid-core/src/main/java/org/grobid/core/engines/FundingAcknowledgementParser.java index cfeef3637f..fca9efacb9 100644 --- a/grobid-core/src/main/java/org/grobid/core/engines/FundingAcknowledgementParser.java +++ b/grobid-core/src/main/java/org/grobid/core/engines/FundingAcknowledgementParser.java @@ -190,7 +190,10 @@ public MutablePair<Element, MutableTriple<List<Funding>,List<Person>,List<Affili List<AnnotatedXMLElement> annotations = localResult.left; FundingAcknowledgmentParse localEntities = localResult.right; - List<OffsetPosition> annotationsPositionTokens = annotations.stream().map(AnnotatedXMLElement::getOffsetPosition).toList(); + List<OffsetPosition> annotationsPositionTokens = annotations.stream() + .map(AnnotatedXMLElement::getOffsetPosition) + .collect(Collectors.toList()); + List<OffsetPosition> annotationsPositionText = TextUtilities.matchTokenAndString(tokenizationFunding, paragraphText, annotationsPositionTokens); List<AnnotatedXMLElement> annotationsWithPosRefToText = new ArrayList<>(); for (int i = 0; i < annotationsPositionText.size(); i++) { @@ -250,20 +253,21 @@ private static Nodes mergeSentencesFallingOnAnnotations(Nodes sentences, List<An // We obtain the corrected coordinates that don't fall over the annotations List<OffsetPosition> correctedOffsetPositions = SentenceUtilities.correctSentencePositions(sentencePositions, annotations .stream() - .map(AnnotatedXMLElement::getOffsetPosition).toList()); + .map(AnnotatedXMLElement::getOffsetPosition) + .collect(Collectors.toList())); List<Integer> toRemove = new ArrayList<>(); for (OffsetPosition correctedOffsetPosition : correctedOffsetPositions) { List<OffsetPosition> originalSentences = sentencePositions.stream() .filter(a -> a.start >= correctedOffsetPosition.start && a.end <= correctedOffsetPosition.end) - .toList(); + .collect(Collectors.toList()); // if for each "corrected sentences offset" there are more than one original sentence that // falls into it, it means we need to merge if (originalSentences.size() > 1) { List<Integer> toMerge = originalSentences.stream() .map(sentencePositions::indexOf) - .toList(); + .collect(Collectors.toList()); Element destination = (Element) sentences.get(toMerge.get(0)); boolean needToMergeCoordinates = config.isGenerateTeiCoordinates("s"); @@ -291,7 +295,7 @@ private static Nodes mergeSentencesFallingOnAnnotations(Nodes sentences, List<An boundingBoxes.addAll(Arrays.stream(coordinates.split(";")) .filter(StringUtils::isNotBlank) .map(BoundingBox::fromString) - .toList()); + .collect(Collectors.toList())); // Group by page, then merge List<BoundingBox> postMergeBoxes = new ArrayList<>(); @@ -301,7 +305,7 @@ private static Nodes mergeSentencesFallingOnAnnotations(Nodes sentences, List<An postMergeBoxes.addAll(mergedBoundingBoxes); } - String coordsAsString = String.join(";", postMergeBoxes.stream().map(BoundingBox::toString).toList()); + String coordsAsString = String.join(";", postMergeBoxes.stream().map(BoundingBox::toString).collect(Collectors.toList())); Attribute newCoords = new Attribute("coords", coordsAsString); destination.addAttribute(newCoords); } @@ -369,7 +373,7 @@ private static void updateParagraphNodeWithAnnotations(Node paragraph, List<Anno int finalPos = pos; List<AnnotatedXMLElement> annotationsInThisChunk = annotations.stream() .filter(a -> a.getOffsetPosition().start >= finalPos && a.getOffsetPosition().end <= finalPos + text.length()) - .toList(); + .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(annotationsInThisChunk)) { List<Node> nodes = getNodesAnnotationsInTextNode(currentNode, annotationsInThisChunk, pos); @@ -407,7 +411,7 @@ private static void updateSentencesNodesWithAnnotations(Nodes sentences, List<An int finalPos = pos; List<AnnotatedXMLElement> annotationsInThisChunk = annotations.stream() .filter(a -> a.getOffsetPosition().start >= finalPos && a.getOffsetPosition().end <= finalPos + text.length()) - .toList(); + .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(annotationsInThisChunk)) { List<Node> nodes = getNodesAnnotationsInTextNode(currentNode, annotationsInThisChunk, pos); From 56d351cce9e30d301a2531c534deb42cb53eaa38 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Wed, 3 Jul 2024 17:05:47 +0900 Subject: [PATCH 10/22] downgrade to jdk 11 --- .github/workflows/ci-build-unstable.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-build-unstable.yml b/.github/workflows/ci-build-unstable.yml index 8f0b2eed66..808931f3d7 100644 --- a/.github/workflows/ci-build-unstable.yml +++ b/.github/workflows/ci-build-unstable.yml @@ -13,11 +13,11 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 11 uses: actions/setup-java@v4 with: - java-version: '17.0.10+7' - distribution: 'temurin' + java-version: '11' + distribution: 'adopt' cache: 'gradle' - name: Build with Gradle run: ./gradlew clean assemble --info --stacktrace --no-daemon From 8d3a0dea5c923e76a10ae78a4c86032420b1678a Mon Sep 17 00:00:00 2001 From: lopezp <patrice.lopez@science-miner.com> Date: Fri, 9 Aug 2024 17:12:26 +0200 Subject: [PATCH 11/22] update benchmarks --- ...M-CRF-FEATURES_citations_header-09.08.2024 | 404 +++++++++++++++++ ...tion_reference_segmenter-header-09.08.2024 | 413 +++++++++++++++++ ...IONS_reference_segmenter_header-09.08.2024 | 428 ++++++++++++++++++ ...S_citations_reference_segmenter-09.08.2024 | 402 ++++++++++++++++ 4 files changed, 1647 insertions(+) create mode 100644 grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024 create mode 100644 grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024 create mode 100644 grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024 create mode 100644 grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024 diff --git a/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024 b/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024 new file mode 100644 index 0000000000..ccea8d63aa --- /dev/null +++ b/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024 @@ -0,0 +1,404 @@ +-------------> GROBID failed on 0 PDF + +1000 PDF files processed in 999.823 seconds, 0.999823 seconds per PDF file + +Evaluation metrics produced in 385.495 seconds + +======= Header metadata ======= + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 78.96 13.58 13.65 13.61 960 +authors 99.67 98.87 98.97 98.92 969 +first_author 99.75 99.18 99.28 99.23 969 +keywords 98.44 0 0 0 0 +title 98.64 95.75 94.6 95.17 1000 + +all (micro avg.) 94.25 77.01 76.91 76.96 3898 +all (macro avg.) 94.25 76.84 76.62 76.73 3898 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 87.94 50.57 50.83 50.7 960 +authors 99.67 98.87 98.97 98.92 969 +first_author 99.75 99.18 99.28 99.23 969 +keywords 98.44 0 0 0 0 +title 99.55 99.39 98.2 98.79 1000 + +all (micro avg.) 96.73 87.11 86.99 87.05 3898 +all (macro avg.) 96.73 87 86.82 86.91 3898 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 94.29 76.68 77.08 76.88 960 +authors 99.77 99.28 99.38 99.33 969 +first_author 99.77 99.28 99.38 99.33 969 +keywords 98.44 0 0 0 0 +title 99.62 99.7 98.5 99.09 1000 + +all (micro avg.) 98.36 93.78 93.66 93.72 3898 +all (macro avg.) 98.36 93.73 93.59 93.66 3898 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 91.92 66.94 67.29 67.12 960 +authors 99.75 99.18 99.28 99.23 969 +first_author 99.75 99.18 99.28 99.23 969 +keywords 98.44 0 0 0 0 +title 99.57 99.49 98.3 98.89 1000 + +all (micro avg.) 97.75 91.27 91.15 91.21 3898 +all (macro avg.) 97.75 91.2 91.04 91.12 3898 + +===== Instance-level results ===== + +Total expected instances: 1000 +Total correct instances: 139 (strict) +Total correct instances: 487 (soft) +Total correct instances: 726 (Levenshtein) +Total correct instances: 642 (ObservedRatcliffObershelp) + +Instance-level recall: 13.9 (strict) +Instance-level recall: 48.7 (soft) +Instance-level recall: 72.6 (Levenshtein) +Instance-level recall: 64.2 (RatcliffObershelp) + +======= Citation metadata ======= + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 97.41 81.17 78.43 79.78 44770 +date 97.88 84.61 81.24 82.89 45457 +first_author 98.81 91.47 88.34 89.88 44770 +inTitle 97.48 81.67 83.58 82.61 42795 +issue 99.51 93.62 92.68 93.15 18983 +page 97.17 93.7 77.57 84.87 40844 +title 94.52 59.97 60.47 60.22 43101 +volume 99.41 95.89 96.11 96 40458 + +all (micro avg.) 97.77 84.23 81.45 82.81 321178 +all (macro avg.) 97.77 85.26 82.3 83.67 321178 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 97.46 81.49 78.73 80.09 44770 +date 97.88 84.61 81.24 82.89 45457 +first_author 98.84 91.69 88.55 90.09 44770 +inTitle 98.01 85.51 87.5 86.49 42795 +issue 99.51 93.62 92.68 93.15 18983 +page 97.17 93.7 77.57 84.87 40844 +title 98.89 91.95 92.74 92.34 43101 +volume 99.41 95.89 96.11 96 40458 + +all (micro avg.) 98.4 89.32 86.37 87.82 321178 +all (macro avg.) 98.4 89.81 86.89 88.24 321178 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98.7 90.64 87.57 89.08 44770 +date 97.88 84.61 81.24 82.89 45457 +first_author 98.91 92.23 89.08 90.62 44770 +inTitle 98.14 86.45 88.47 87.45 42795 +issue 99.51 93.62 92.68 93.15 18983 +page 97.17 93.7 77.57 84.87 40844 +title 99.25 94.56 95.37 94.96 43101 +volume 99.41 95.89 96.11 96 40458 + +all (micro avg.) 98.62 91.17 88.16 89.64 321178 +all (macro avg.) 98.62 91.46 88.51 89.88 321178 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 97.93 84.94 82.06 83.48 44770 +date 97.88 84.61 81.24 82.89 45457 +first_author 98.81 91.47 88.34 89.88 44770 +inTitle 97.96 85.16 87.15 86.14 42795 +issue 99.51 93.62 92.68 93.15 18983 +page 97.17 93.7 77.57 84.87 40844 +title 99.16 93.95 94.74 94.34 43101 +volume 99.41 95.89 96.11 96 40458 + +all (micro avg.) 98.48 90 87.03 88.49 321178 +all (macro avg.) 98.48 90.42 87.49 88.84 321178 + +===== Instance-level results ===== + +Total expected instances: 48449 +Total extracted instances: 48250 +Total correct instances: 13496 (strict) +Total correct instances: 22269 (soft) +Total correct instances: 24916 (Levenshtein) +Total correct instances: 23272 (RatcliffObershelp) + +Instance-level precision: 27.97 (strict) +Instance-level precision: 46.15 (soft) +Instance-level precision: 51.64 (Levenshtein) +Instance-level precision: 48.23 (RatcliffObershelp) + +Instance-level recall: 27.86 (strict) +Instance-level recall: 45.96 (soft) +Instance-level recall: 51.43 (Levenshtein) +Instance-level recall: 48.03 (RatcliffObershelp) + +Instance-level f-score: 27.91 (strict) +Instance-level f-score: 46.06 (soft) +Instance-level f-score: 51.53 (Levenshtein) +Instance-level f-score: 48.13 (RatcliffObershelp) + +Matching 1 : 35369 + +Matching 2 : 1260 + +Matching 3 : 3266 + +Matching 4 : 1800 + +Total matches : 41695 + +======= Citation context resolution ======= + +Total expected references: 48449 - 48.45 references per article +Total predicted references: 48250 - 48.25 references per article + +Total expected citation contexts: 69755 - 69.75 citation contexts per article +Total predicted citation contexts: 73696 - 73.7 citation contexts per article + +Total correct predicted citation contexts: 56772 - 56.77 citation contexts per article +Total wrong predicted citation contexts: 16924 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 77.04 +Recall citation contexts: 81.39 +fscore citation contexts: 79.15 + +======= Fulltext structures ======= + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +availability_stmt 99.53 54.06 52.12 53.07 779 +figure_title 91.69 2.11 0.92 1.28 8943 +funding_stmt 94.29 5.27 28.14 8.88 1507 +reference_citation 90.9 86.69 94.65 90.49 69741 +reference_figure 95.17 72.06 54.06 61.77 11010 +reference_table 99.15 84.28 92.07 88 5159 +section_title 93.83 77.18 65.8 71.03 17540 +table_title 93.95 1.13 0.59 0.77 6092 + +all (micro avg.) 94.81 73.79 73.86 73.82 120771 +all (macro avg.) 94.81 47.85 48.54 46.91 120771 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +availability_stmt 99.77 79.36 76.51 77.91 779 +figure_title 95.76 81.17 35.33 49.24 8943 +funding_stmt 94.29 6.89 36.76 11.6 1507 +reference_citation 90.64 86.7 94.66 90.51 69741 +reference_figure 95.07 72.52 54.41 62.17 11010 +reference_table 99.14 84.46 92.27 88.19 5159 +section_title 93.89 78.17 66.65 71.95 17540 +table_title 94.48 15.97 8.39 11 6092 + +all (micro avg.) 95.38 77.16 77.24 77.2 120771 +all (macro avg.) 95.38 63.16 58.12 57.82 120771 + +===== Document-level ratio results ===== + +label accuracy precision recall f1 support + +availability_stmt 95.43 99.47 96.41 97.91 779 + +all (micro avg.) 95.43 99.47 96.41 97.91 779 +all (macro avg.) 95.43 99.47 96.41 97.91 779 + + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.TableRejectionCounters +************************************************************************************ +------------------------------------------------------------------------------------ + CANNOT_PARSE_LABEL_TO_INT: 8 + CONTENT_SIZE_TOO_SMALL: 95 + CONTENT_WIDTH_TOO_SMALL: 9 + EMPTY_LABEL_OR_HEADER_OR_CONTENT: 749 + HEADER_NOT_STARTS_WITH_TABLE_WORD: 179 + HEADER_NOT_CONSECUTIVE: 849 + HEADER_AND_CONTENT_DIFFERENT_PAGES: 7 + HEADER_AND_CONTENT_INTERSECT: 740 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.ReferenceMarkerMatcherCounters +************************************************************************************ +------------------------------------------------------------------------------------ + UNMATCHED_REF_MARKERS: 2067 + MATCHED_REF_MARKERS_AFTER_POST_FILTERING: 21 + STYLE_AUTHORS: 776 + STYLE_NUMBERED: 48379 + MANY_CANDIDATES: 148 + MANY_CANDIDATES_AFTER_POST_FILTERING: 10 + NO_CANDIDATES: 2535 + INPUT_REF_STRINGS_CNT: 49923 + MATCHED_REF_MARKERS: 73696 + NO_CANDIDATES_AFTER_POST_FILTERING: 2 + STYLE_OTHER: 768 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + SKIPPED_BAD_STANDALONE_FIGURES: 203 + SKIPPED_SMALL_STANDALONE_FIGURES: 28 + SKIPPED_BIG_STANDALONE_FIGURES: 175 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.label.TaggingLabelImpl +************************************************************************************ +------------------------------------------------------------------------------------ + HEADER_DOCTYPE: 1612 + CITATION_TITLE: 46696 + HEADER_DATE: 993 + HEADER_KEYWORD: 79 + NAME-HEADER_MIDDLENAME: 2135 + TABLE_FIGDESC: 1300 + NAME-HEADER_SURNAME: 7879 + NAME-CITATION_OTHER: 153160 + HEADER_FUNDING: 1045 + CITATION_BOOKTITLE: 3197 + HEADER_ADDRESS: 4675 + HEADER_AFFILIATION: 4741 + CITATION_NOTE: 3052 + FULLTEXT_CITATION_MARKER: 98167 + TABLE_NOTE: 2983 + HEADER_EMAIL: 1146 + FULLTEXT_TABLE_MARKER: 11601 + FUNDING-ACKNOWLEDGEMENT_AFFILIATION: 302 + CITATION_WEB: 29518 + HEADER_GROUP: 7 + FULLTEXT_SECTION: 33218 + TABLE_LABEL: 2996 + FUNDING-ACKNOWLEDGEMENT_PROGRAMNAME: 111 + NAME-HEADER_FORENAME: 7970 + TABLE_CONTENT: 3458 + DATE_YEAR: 52907 + CITATION_COLLABORATION: 106 + CITATION_ISSUE: 19263 + HEADER_MEETING: 2 + HEADER_EDITOR: 954 + CITATION_SERIES: 88 + CITATION_JOURNAL: 42557 + NAME-CITATION_SURNAME: 177100 + TABLE_FIGURE_HEAD: 6152 + FULLTEXT_EQUATION_MARKER: 550 + CITATION_OTHER: 291192 + FULLTEXT_FIGURE_MARKER: 16972 + HEADER_TITLE: 984 + CITATION_TECH: 323 + FIGURE_CONTENT: 266 + FIGURE_LABEL: 4371 + FULLTEXT_EQUATION_LABEL: 2751 + HEADER_OTHER: 10617 + FULLTEXT_EQUATION: 3886 + CITATION_DATE: 52097 + FULLTEXT_FIGURE: 9928 + CITATION_AUTHOR: 46797 + FULLTEXT_TABLE: 6040 + CITATION_EDITOR: 602 + FULLTEXT_OTHER: 177 + HEADER_SUBMISSION: 969 + NAME-HEADER_OTHER: 8958 + FUNDING-ACKNOWLEDGEMENT_PROJECTNAME: 91 + FIGURE_FIGDESC: 5206 + HEADER_AVAILABILITY: 770 + NAME-HEADER_SUFFIX: 10 + CITATION_VOLUME: 41079 + CITATION_LOCATION: 2881 + NAME-CITATION_SUFFIX: 141 + FUNDING-ACKNOWLEDGEMENT_INFRASTRUCTURE: 23 + FUNDING-ACKNOWLEDGEMENT_INSTITUTION: 561 + NAME-HEADER_TITLE: 137 + DATE_MONTH: 6956 + HEADER_WEB: 2 + FUNDING-ACKNOWLEDGEMENT_PERSON: 2064 + HEADER_ABSTRACT: 1314 + CITATION_INSTITUTION: 804 + HEADER_REFERENCE: 2005 + FUNDING-ACKNOWLEDGEMENT_GRANTNAME: 138 + CITATION_PAGES: 42003 + HEADER_AUTHOR: 1023 + NAME-HEADER_MARKER: 5693 + DATE_OTHER: 10473 + FUNDING-ACKNOWLEDGEMENT_OTHER: 7949 + FUNDING-ACKNOWLEDGEMENT_FUNDERNAME: 1904 + NAME-CITATION_FORENAME: 179792 + CITATION_PUBLISHER: 4109 + FUNDING-ACKNOWLEDGEMENT_GRANTNUMBER: 1223 + HEADER_PUBNUM: 1354 + NAME-CITATION_MIDDLENAME: 5392 + CITATION_PUBNUM: 11422 + HEADER_COPYRIGHT: 1030 + FULLTEXT_PARAGRAPH: 217237 + FIGURE_FIGURE_HEAD: 8637 + DATE_DAY: 6542 +==================================================================================== + +************************************************************************************ +COUNTER: FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + STANDALONE_FIGURES: 198 + ASSIGNED_GRAPHICS_TO_FIGURES: 3417 +==================================================================================== +==================================================================================== diff --git a/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024 b/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024 new file mode 100644 index 0000000000..6254d36c32 --- /dev/null +++ b/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024 @@ -0,0 +1,413 @@ +PDF processing 100% │████████████████│ 1943/1943 (0:24:14 / 0:00:00) + +-------------> GROBID failed on 0 PDF + +1943 PDF files processed in 1466.622 seconds, 0.7548234688625837 seconds per PDF file + +Evaluation metrics produced in 622.52 seconds + +======= Header metadata ======= + +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 82.45 16.78 16.48 16.63 1911 +authors 98.28 92.01 91.91 91.96 1941 +first_author 99.28 96.7 96.6 96.65 1941 +keywords 94.22 64.99 63.62 64.3 1380 +title 96.69 84.67 84.41 84.54 1943 + +all (micro avg.) 94.19 71.79 71.22 71.5 9116 +all (macro avg.) 94.19 71.03 70.6 70.81 9116 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 92.1 63.83 62.69 63.25 1911 +authors 98.69 93.91 93.82 93.87 1941 +first_author 99.36 97.06 96.96 97.01 1941 +keywords 95.51 73.72 72.17 72.94 1380 +title 98.27 92.15 91.87 92.01 1943 + +all (micro avg.) 96.79 84.95 84.27 84.61 9116 +all (macro avg.) 96.79 84.14 83.5 83.82 9116 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 97.68 91.05 89.43 90.23 1911 +authors 99.15 96.08 95.98 96.03 1941 +first_author 99.41 97.32 97.22 97.27 1941 +keywords 97.05 84.16 82.39 83.27 1380 +title 99.58 98.35 98.04 98.2 1943 + +all (micro avg.) 98.58 94.01 93.25 93.63 9116 +all (macro avg.) 98.58 93.39 92.61 93 9116 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 96.88 87.11 85.56 86.33 1911 +authors 98.91 94.95 94.85 94.9 1941 +first_author 99.28 96.7 96.6 96.65 1941 +keywords 96.36 79.5 77.83 78.65 1380 +title 99.16 96.33 96.04 96.19 1943 + +all (micro avg.) 98.12 91.68 90.95 91.32 9116 +all (macro avg.) 98.12 90.92 90.17 90.54 9116 + +===== Instance-level results ===== + +Total expected instances: 1943 +Total correct instances: 219 (strict) +Total correct instances: 904 (soft) +Total correct instances: 1434 (Levenshtein) +Total correct instances: 1294 (ObservedRatcliffObershelp) + +Instance-level recall: 11.27 (strict) +Instance-level recall: 46.53 (soft) +Instance-level recall: 73.8 (Levenshtein) +Instance-level recall: 66.6 (RatcliffObershelp) + +======= Citation metadata ======= + +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 97.58 83.03 76.31 79.53 85778 +date 99.23 94.6 84.25 89.13 87067 +first_author 98.53 89.78 82.49 85.98 85778 +inTitle 96.19 73.23 71.88 72.55 81007 +issue 99.67 91.09 87.74 89.38 16635 +page 98.61 94.57 83.7 88.81 80501 +title 97.21 79.67 75.3 77.42 80736 +volume 99.44 96.01 89.82 92.81 80067 + +all (micro avg.) 98.31 87.22 80.74 83.86 597569 +all (macro avg.) 98.31 87.75 81.44 84.45 597569 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 97.65 83.5 76.75 79.98 85778 +date 99.23 94.6 84.25 89.13 87067 +first_author 98.55 89.95 82.65 86.14 85778 +inTitle 97.85 84.92 83.36 84.13 81007 +issue 99.67 91.09 87.74 89.38 16635 +page 98.61 94.57 83.7 88.81 80501 +title 98.81 91.43 86.42 88.86 80736 +volume 99.44 96.01 89.82 92.81 80067 + +all (micro avg.) 98.73 90.61 83.89 87.12 597569 +all (macro avg.) 98.73 90.76 84.34 87.41 597569 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98.45 89.21 81.99 85.45 85778 +date 99.23 94.6 84.25 89.13 87067 +first_author 98.58 90.15 82.84 86.34 85778 +inTitle 98.03 86.18 84.59 85.38 81007 +issue 99.67 91.09 87.74 89.38 16635 +page 98.61 94.57 83.7 88.81 80501 +title 99.14 93.8 88.66 91.15 80736 +volume 99.44 96.01 89.82 92.81 80067 + +all (micro avg.) 98.9 91.96 85.14 88.42 597569 +all (macro avg.) 98.9 91.95 85.45 88.56 597569 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98 85.98 79.02 82.35 85778 +date 99.23 94.6 84.25 89.13 87067 +first_author 98.53 89.8 82.51 86 85778 +inTitle 97.65 83.49 81.95 82.72 81007 +issue 99.67 91.09 87.74 89.38 16635 +page 98.61 94.57 83.7 88.81 80501 +title 99.08 93.39 88.27 90.76 80736 +volume 99.44 96.01 89.82 92.81 80067 + +all (micro avg.) 98.78 91.01 84.25 87.5 597569 +all (macro avg.) 98.78 91.12 84.66 87.74 597569 + +===== Instance-level results ===== + +Total expected instances: 90125 +Total extracted instances: 85902 +Total correct instances: 38762 (strict) +Total correct instances: 50900 (soft) +Total correct instances: 55783 (Levenshtein) +Total correct instances: 52319 (RatcliffObershelp) + +Instance-level precision: 45.12 (strict) +Instance-level precision: 59.25 (soft) +Instance-level precision: 64.94 (Levenshtein) +Instance-level precision: 60.91 (RatcliffObershelp) + +Instance-level recall: 43.01 (strict) +Instance-level recall: 56.48 (soft) +Instance-level recall: 61.9 (Levenshtein) +Instance-level recall: 58.05 (RatcliffObershelp) + +Instance-level f-score: 44.04 (strict) +Instance-level f-score: 57.83 (soft) +Instance-level f-score: 63.38 (Levenshtein) +Instance-level f-score: 59.44 (RatcliffObershelp) + +Matching 1 : 68328 + +Matching 2 : 4154 + +Matching 3 : 1863 + +Matching 4 : 662 + +Total matches : 75007 + +======= Citation context resolution ======= + +Total expected references: 90125 - 46.38 references per article +Total predicted references: 85902 - 44.21 references per article + +Total expected citation contexts: 139835 - 71.97 citation contexts per article +Total predicted citation contexts: 115373 - 59.38 citation contexts per article + +Total correct predicted citation contexts: 97277 - 50.07 citation contexts per article +Total wrong predicted citation contexts: 18096 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 84.32 +Recall citation contexts: 69.57 +fscore citation contexts: 76.23 + +======= Fulltext structures ======= + +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +figure_title 96.63 31.44 24.61 27.61 7281 +reference_citation 59.15 57.43 58.68 58.05 134196 +reference_figure 94.74 61.21 65.9 63.47 19330 +reference_table 99.22 83.01 88.39 85.62 7327 +section_title 94.73 76.39 67.77 71.82 27619 +table_title 98.76 57.3 50.29 53.57 3971 + +all (micro avg.) 90.54 60.41 60.32 60.36 199724 +all (macro avg.) 90.54 61.13 59.27 60.02 199724 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +figure_title 98.52 78.68 61.58 69.09 7281 +reference_citation 61.86 61.68 63.03 62.35 134196 +reference_figure 94.6 61.69 66.41 63.97 19330 +reference_table 99.2 83.19 88.58 85.8 7327 +section_title 95.43 81.25 72.08 76.39 27619 +table_title 99.35 81.89 71.87 76.56 3971 + +all (micro avg.) 91.49 65.77 65.67 65.72 199724 +all (macro avg.) 91.49 74.73 70.59 72.36 199724 + +===== Document-level ratio results ===== + +label accuracy precision recall f1 support + + +all (micro avg.) 0 0 0 0 0 +all (macro avg.) 0 0 0 0 0 + + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.TableRejectionCounters +************************************************************************************ +------------------------------------------------------------------------------------ + CANNOT_PARSE_LABEL_TO_INT: 128 + CONTENT_SIZE_TOO_SMALL: 78 + CONTENT_WIDTH_TOO_SMALL: 18 + EMPTY_LABEL_OR_HEADER_OR_CONTENT: 1613 + HEADER_NOT_STARTS_WITH_TABLE_WORD: 152 + HEADER_NOT_CONSECUTIVE: 934 + HEADER_AND_CONTENT_DIFFERENT_PAGES: 14 + HEADER_AND_CONTENT_INTERSECT: 557 + FEW_TOKENS_IN_HEADER: 1 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.ReferenceMarkerMatcherCounters +************************************************************************************ +------------------------------------------------------------------------------------ + UNMATCHED_REF_MARKERS: 10272 + MATCHED_REF_MARKERS_AFTER_POST_FILTERING: 3160 + STYLE_AUTHORS: 37131 + STYLE_NUMBERED: 52105 + MANY_CANDIDATES: 4770 + MANY_CANDIDATES_AFTER_POST_FILTERING: 709 + NO_CANDIDATES: 19507 + INPUT_REF_STRINGS_CNT: 91315 + MATCHED_REF_MARKERS: 115373 + NO_CANDIDATES_AFTER_POST_FILTERING: 475 + STYLE_OTHER: 2079 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + SKIPPED_BAD_STANDALONE_FIGURES: 613 + SKIPPED_DUE_TO_MISMATCH_OF_CAPTIONS_AND_VECTOR_AND_BITMAP_GRAPHICS: 3 + SKIPPED_SMALL_STANDALONE_FIGURES: 498 + SKIPPED_BIG_STANDALONE_FIGURES: 115 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.label.TaggingLabelImpl +************************************************************************************ +------------------------------------------------------------------------------------ + HEADER_DOCTYPE: 3266 + AFFILIATION-ADDRESS_POSTCODE: 1 + CITATION_TITLE: 82283 + HEADER_DATE: 1073 + HEADER_KEYWORD: 1456 + NAME-HEADER_MIDDLENAME: 5932 + TABLE_FIGDESC: 4066 + NAME-HEADER_SURNAME: 14114 + NAME-CITATION_OTHER: 432612 + HEADER_FUNDING: 150 + CITATION_BOOKTITLE: 5933 + HEADER_ADDRESS: 6112 + HEADER_AFFILIATION: 6269 + CITATION_NOTE: 3133 + FULLTEXT_CITATION_MARKER: 181528 + TABLE_NOTE: 2609 + HEADER_EMAIL: 2244 + FULLTEXT_TABLE_MARKER: 14682 + FUNDING-ACKNOWLEDGEMENT_AFFILIATION: 552 + CITATION_WEB: 1381 + HEADER_GROUP: 5 + FULLTEXT_SECTION: 52100 + TABLE_LABEL: 3291 + FUNDING-ACKNOWLEDGEMENT_PROGRAMNAME: 158 + NAME-HEADER_FORENAME: 14294 + DATE_YEAR: 87269 + TABLE_CONTENT: 4786 + CITATION_COLLABORATION: 141 + HEADER_MEETING: 33 + CITATION_ISSUE: 16589 + HEADER_EDITOR: 137 + AFFILIATION-ADDRESS_SETTLEMENT: 2 + CITATION_SERIES: 183 + CITATION_JOURNAL: 78696 + NAME-CITATION_SURNAME: 328073 + TABLE_FIGURE_HEAD: 4695 + FULLTEXT_EQUATION_MARKER: 1665 + CITATION_OTHER: 451548 + FULLTEXT_FIGURE_MARKER: 37808 + HEADER_TITLE: 1972 + CITATION_TECH: 307 + FIGURE_CONTENT: 2856 + FIGURE_LABEL: 5958 + FULLTEXT_EQUATION_LABEL: 1922 + HEADER_OTHER: 10388 + AFFILIATION-ADDRESS_OTHER: 10 + FULLTEXT_EQUATION: 4342 + TABLE_OTHER: 1 + CITATION_DATE: 86567 + CITATION_AUTHOR: 86348 + FULLTEXT_FIGURE: 13959 + FULLTEXT_TABLE: 9311 + CITATION_EDITOR: 2522 + FULLTEXT_OTHER: 197 + HEADER_SUBMISSION: 1233 + NAME-HEADER_OTHER: 17663 + FUNDING-ACKNOWLEDGEMENT_PROJECTNAME: 201 + FIGURE_FIGDESC: 6971 + NAME-HEADER_SUFFIX: 20 + HEADER_AVAILABILITY: 5 + CITATION_VOLUME: 76288 + CITATION_LOCATION: 7629 + NAME-CITATION_SUFFIX: 392 + FUNDING-ACKNOWLEDGEMENT_INFRASTRUCTURE: 34 + AFFILIATION-ADDRESS_DEPARTMENT: 2 + NAME-HEADER_TITLE: 757 + FUNDING-ACKNOWLEDGEMENT_INSTITUTION: 742 + DATE_MONTH: 3247 + HEADER_WEB: 334 + AFFILIATION-ADDRESS_ADDRLINE: 1 + FUNDING-ACKNOWLEDGEMENT_PERSON: 4867 + HEADER_ABSTRACT: 2267 + CITATION_INSTITUTION: 1041 + HEADER_REFERENCE: 3174 + AFFILIATION-ADDRESS_INSTITUTION: 4 + FUNDING-ACKNOWLEDGEMENT_GRANTNAME: 299 + CITATION_PAGES: 80775 + HEADER_AUTHOR: 4317 + NAME-HEADER_MARKER: 8177 + AFFILIATION-ADDRESS_COUNTRY: 2 + DATE_OTHER: 5079 + FUNDING-ACKNOWLEDGEMENT_OTHER: 14046 + FUNDING-ACKNOWLEDGEMENT_FUNDERNAME: 3200 + NAME-CITATION_FORENAME: 318969 + CITATION_PUBLISHER: 7043 + FUNDING-ACKNOWLEDGEMENT_GRANTNUMBER: 2124 + HEADER_PUBNUM: 1858 + NAME-CITATION_MIDDLENAME: 65932 + CITATION_PUBNUM: 10306 + HEADER_COPYRIGHT: 2436 + FULLTEXT_PARAGRAPH: 379716 + FIGURE_FIGURE_HEAD: 9774 + DATE_DAY: 3060 +==================================================================================== + +************************************************************************************ +COUNTER: FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + STANDALONE_FIGURES: 409 + ASSIGNED_GRAPHICS_TO_FIGURES: 3885 +==================================================================================== +==================================================================================== + + diff --git a/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024 b/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024 new file mode 100644 index 0000000000..172556ea33 --- /dev/null +++ b/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024 @@ -0,0 +1,428 @@ + +-------------> GROBID failed on 0 PDF + +2000 PDF files processed in 1713.514 seconds, 0.856757 seconds per PDF file + +Evaluation metrics produced in 785.488 seconds + +======= Header metadata ======= + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 78 2.2 2.16 2.18 1990 +authors 96.05 83.2 82.49 82.84 1999 +first_author 99.15 97.02 96.29 96.66 1997 +keywords 95.82 58.71 59.83 59.27 839 +title 94.77 77.67 76.85 77.26 2000 + +all (micro avg.) 92.76 64.62 64.07 64.35 8825 +all (macro avg.) 92.76 63.76 63.53 63.64 8825 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 90.67 59.71 58.54 59.12 1990 +authors 96.16 83.7 82.99 83.35 1999 +first_author 99.2 97.23 96.49 96.86 1997 +keywords 96.32 63.86 65.08 64.46 839 +title 95.27 79.89 79.05 79.47 2000 + +all (micro avg.) 95.52 78.61 77.94 78.27 8825 +all (macro avg.) 95.52 76.88 76.43 76.65 8825 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 95.18 80.22 78.64 79.42 1990 +authors 98.06 92.18 91.4 91.79 1999 +first_author 99.26 97.48 96.75 97.11 1997 +keywords 97.82 79.42 80.93 80.17 839 +title 97.98 92.02 91.05 91.53 2000 + +all (micro avg.) 97.66 89.43 88.66 89.04 8825 +all (macro avg.) 97.66 88.26 87.75 88 8825 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 94.45 76.88 75.38 76.12 1990 +authors 97.08 87.79 87.04 87.42 1999 +first_author 99.15 97.02 96.29 96.66 1997 +keywords 97.04 71.35 72.71 72.02 839 +title 97.05 87.87 86.95 87.41 2000 + +all (micro avg.) 96.96 85.86 85.12 85.49 8825 +all (macro avg.) 96.96 84.18 83.67 83.92 8825 + +===== Instance-level results ===== + +Total expected instances: 2000 +Total correct instances: 35 (strict) +Total correct instances: 708 (soft) +Total correct instances: 1222 (Levenshtein) +Total correct instances: 1046 (ObservedRatcliffObershelp) + +Instance-level recall: 1.75 (strict) +Instance-level recall: 35.4 (soft) +Instance-level recall: 61.1 (Levenshtein) +Instance-level recall: 52.3 (RatcliffObershelp) + +======= Citation metadata ======= + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98.4 88.16 83.24 85.63 97183 +date 98.87 91.69 86.31 88.92 97630 +doi 99.13 70.84 83.79 76.78 16894 +first_author 99.31 95.06 89.68 92.29 97183 +inTitle 97.69 82.83 79.4 81.08 96430 +issue 99.61 94.34 92.04 93.18 30312 +page 97.52 94.97 78.34 85.86 88597 +pmcid 99.95 66.38 86.12 74.97 807 +pmid 99.87 70.08 84.95 76.8 2093 +title 97.98 84.88 83.58 84.23 92463 +volume 99.46 96.23 95.23 95.73 87709 + +all (micro avg.) 98.89 89.85 85.34 87.54 707301 +all (macro avg.) 98.89 85.04 85.7 85.04 707301 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98.55 89.31 84.33 86.75 97183 +date 98.87 91.69 86.31 88.92 97630 +doi 99.26 75.34 89.11 81.65 16894 +first_author 99.37 95.48 90.08 92.7 97183 +inTitle 98.97 92.32 88.51 90.38 96430 +issue 99.61 94.34 92.04 93.18 30312 +page 97.52 94.97 78.34 85.86 88597 +pmcid 99.96 75.64 98.14 85.44 807 +pmid 99.89 74.5 90.3 81.64 2093 +title 99.08 93.23 91.8 92.51 92463 +volume 99.46 96.23 95.23 95.73 87709 + +all (micro avg.) 99.14 92.66 88.02 90.28 707301 +all (macro avg.) 99.14 88.46 89.47 88.61 707301 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 99.25 94.58 89.3 91.87 97183 +date 98.87 91.69 86.31 88.92 97630 +doi 99.32 77.6 91.79 84.1 16894 +first_author 99.39 95.63 90.22 92.85 97183 +inTitle 99.1 93.3 89.45 91.33 96430 +issue 99.61 94.34 92.04 93.18 30312 +page 97.52 94.97 78.34 85.86 88597 +pmcid 99.96 75.64 98.14 85.44 807 +pmid 99.89 74.5 90.3 81.64 2093 +title 99.46 96.05 94.58 95.31 92463 +volume 99.46 96.23 95.23 95.73 87709 + +all (micro avg.) 99.26 93.99 89.28 91.57 707301 +all (macro avg.) 99.26 89.51 90.52 89.66 707301 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98.85 91.54 86.43 88.91 97183 +date 98.87 91.69 86.31 88.92 97630 +doi 99.28 76.04 89.94 82.41 16894 +first_author 99.32 95.1 89.72 92.33 97183 +inTitle 98.8 91.06 87.29 89.13 96430 +issue 99.61 94.34 92.04 93.18 30312 +page 97.52 94.97 78.34 85.86 88597 +pmcid 99.95 66.38 86.12 74.97 807 +pmid 99.87 70.08 84.95 76.8 2093 +title 99.37 95.35 93.89 94.62 92463 +volume 99.46 96.23 95.23 95.73 87709 + +all (micro avg.) 99.17 93.02 88.36 90.63 707301 +all (macro avg.) 99.17 87.53 88.21 87.53 707301 + +===== Instance-level results ===== + +Total expected instances: 98799 +Total extracted instances: 98068 +Total correct instances: 43771 (strict) +Total correct instances: 54778 (soft) +Total correct instances: 58972 (Levenshtein) +Total correct instances: 55693 (RatcliffObershelp) + +Instance-level precision: 44.63 (strict) +Instance-level precision: 55.86 (soft) +Instance-level precision: 60.13 (Levenshtein) +Instance-level precision: 56.79 (RatcliffObershelp) + +Instance-level recall: 44.3 (strict) +Instance-level recall: 55.44 (soft) +Instance-level recall: 59.69 (Levenshtein) +Instance-level recall: 56.37 (RatcliffObershelp) + +Instance-level f-score: 44.47 (strict) +Instance-level f-score: 55.65 (soft) +Instance-level f-score: 59.91 (Levenshtein) +Instance-level f-score: 56.58 (RatcliffObershelp) + +Matching 1 : 79296 + +Matching 2 : 4442 + +Matching 3 : 4371 + +Matching 4 : 2084 + +Total matches : 90193 + +======= Citation context resolution ======= + +Total expected references: 98797 - 49.4 references per article +Total predicted references: 98068 - 49.03 references per article + +Total expected citation contexts: 142862 - 71.43 citation contexts per article +Total predicted citation contexts: 135692 - 67.85 citation contexts per article + +Total correct predicted citation contexts: 116736 - 58.37 citation contexts per article +Total wrong predicted citation contexts: 18956 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 86.03 +Recall citation contexts: 81.71 +fscore citation contexts: 83.82 + +======= Fulltext structures ======= + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +availability_stmt 99.83 29.95 25.78 27.71 446 +figure_title 90.58 4.23 2.01 2.72 22978 +funding_stmt 98.64 4.16 24.43 7.11 745 +reference_citation 75.64 71.05 71.33 71.19 147470 +reference_figure 91.7 70.59 67.74 69.14 47984 +reference_table 98.18 48.11 83.03 60.92 5957 +section_title 94.75 72.59 69.6 71.06 32398 +table_title 98.2 4.31 2.85 3.43 3925 + +all (micro avg.) 93.44 65.46 63.41 64.42 261903 +all (macro avg.) 93.44 38.12 43.35 39.16 261903 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +availability_stmt 99.86 50.52 43.5 46.75 446 +figure_title 94.27 69.47 32.91 44.67 22978 +funding_stmt 98.53 4.37 25.64 7.46 745 +reference_citation 84.56 83.04 83.37 83.21 147470 +reference_figure 91.15 71.22 68.34 69.75 47984 +reference_table 98.05 48.56 83.8 61.49 5957 +section_title 95.04 76.47 73.32 74.86 32398 +table_title 98.81 51.44 34.06 40.99 3925 + +all (micro avg.) 95.03 76.38 73.99 75.17 261903 +all (macro avg.) 95.03 56.89 55.62 53.65 261903 + +===== Document-level ratio results ===== + +label accuracy precision recall f1 support + +availability_stmt 65.75 84.77 86.1 85.43 446 + +all (micro avg.) 65.75 84.77 86.1 85.43 446 +all (macro avg.) 65.75 84.77 86.1 85.43 446 + + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.ReferenceMarkerMatcherCounters +************************************************************************************ +------------------------------------------------------------------------------------ + MATCHED_REF_MARKERS_AFTER_POST_FILTERING: 3131 + UNMATCHED_REF_MARKERS: 6386 + STYLE_AUTHORS: 40708 + STYLE_NUMBERED: 55611 + MANY_CANDIDATES: 5922 + MANY_CANDIDATES_AFTER_POST_FILTERING: 686 + NO_CANDIDATES: 8881 + INPUT_REF_STRINGS_CNT: 98118 + MATCHED_REF_MARKERS: 135692 + NO_CANDIDATES_AFTER_POST_FILTERING: 954 + STYLE_OTHER: 1799 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.TableRejectionCounters +************************************************************************************ +------------------------------------------------------------------------------------ + CANNOT_PARSE_LABEL_TO_INT: 177 + CONTENT_SIZE_TOO_SMALL: 56 + CONTENT_WIDTH_TOO_SMALL: 2 + EMPTY_LABEL_OR_HEADER_OR_CONTENT: 4588 + HEADER_NOT_STARTS_WITH_TABLE_WORD: 184 + HEADER_AND_CONTENT_DIFFERENT_PAGES: 97 + HEADER_NOT_CONSECUTIVE: 363 + HEADER_AND_CONTENT_INTERSECT: 203 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + SKIPPED_BAD_STANDALONE_FIGURES: 5344 + SKIPPED_DUE_TO_MISMATCH_OF_CAPTIONS_AND_VECTOR_AND_BITMAP_GRAPHICS: 17 + SKIPPED_SMALL_STANDALONE_FIGURES: 2706 + SKIPPED_BIG_STANDALONE_FIGURES: 2638 + TOO_MANY_FIGURES_PER_PAGE: 5 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.label.TaggingLabelImpl +************************************************************************************ +------------------------------------------------------------------------------------ + HEADER_DOCTYPE: 77 + AFFILIATION-ADDRESS_POSTCODE: 2 + CITATION_TITLE: 95289 + HEADER_DATE: 128 + HEADER_KEYWORD: 943 + NAME-HEADER_MIDDLENAME: 5296 + TABLE_FIGDESC: 3075 + NAME-HEADER_SURNAME: 13980 + NAME-CITATION_OTHER: 626355 + CITATION_BOOKTITLE: 4119 + HEADER_FUNDING: 86 + HEADER_ADDRESS: 7437 + HEADER_AFFILIATION: 7861 + CITATION_NOTE: 2905 + FULLTEXT_CITATION_MARKER: 192257 + TABLE_NOTE: 3805 + HEADER_EMAIL: 2628 + FULLTEXT_TABLE_MARKER: 19422 + FUNDING-ACKNOWLEDGEMENT_AFFILIATION: 572 + CITATION_WEB: 7080 + HEADER_GROUP: 7 + FULLTEXT_SECTION: 68305 + TABLE_LABEL: 2256 + FUNDING-ACKNOWLEDGEMENT_PROGRAMNAME: 264 + DATE_YEAR: 100147 + NAME-HEADER_FORENAME: 14297 + TABLE_CONTENT: 4627 + CITATION_COLLABORATION: 277 + CITATION_ISSUE: 30124 + HEADER_MEETING: 4 + HEADER_EDITOR: 4 + AFFILIATION-ADDRESS_SETTLEMENT: 2 + CITATION_SERIES: 126 + CITATION_JOURNAL: 91336 + NAME-CITATION_SURNAME: 403488 + TABLE_FIGURE_HEAD: 4627 + FULLTEXT_EQUATION_MARKER: 3844 + CITATION_OTHER: 547124 + FULLTEXT_FIGURE_MARKER: 85170 + HEADER_TITLE: 2058 + CITATION_TECH: 337 + FIGURE_CONTENT: 4811 + FIGURE_LABEL: 11937 + FULLTEXT_EQUATION_LABEL: 6859 + HEADER_OTHER: 7878 + AFFILIATION-ADDRESS_OTHER: 11 + AFFILIATION-ADDRESS_LABORATORY: 1 + FULLTEXT_EQUATION: 16851 + CITATION_DATE: 100647 + CITATION_AUTHOR: 97282 + FULLTEXT_FIGURE: 31693 + FULLTEXT_TABLE: 13122 + AFFILIATION-ADDRESS_MARKER: 3 + CITATION_EDITOR: 904 + FULLTEXT_OTHER: 925 + HEADER_SUBMISSION: 59 + NAME-HEADER_OTHER: 16488 + FUNDING-ACKNOWLEDGEMENT_PROJECTNAME: 198 + AFFILIATION-ADDRESS_POSTBOX: 1 + FIGURE_FIGDESC: 15413 + HEADER_AVAILABILITY: 81 + NAME-HEADER_SUFFIX: 11 + CITATION_VOLUME: 88118 + CITATION_LOCATION: 3307 + FUNDING-ACKNOWLEDGEMENT_INFRASTRUCTURE: 131 + NAME-CITATION_SUFFIX: 153 + AFFILIATION-ADDRESS_DEPARTMENT: 2 + FUNDING-ACKNOWLEDGEMENT_INSTITUTION: 1120 + NAME-HEADER_TITLE: 524 + DATE_MONTH: 5633 + HEADER_WEB: 26 + FUNDING-ACKNOWLEDGEMENT_PERSON: 5527 + HEADER_ABSTRACT: 2360 + CITATION_INSTITUTION: 600 + HEADER_REFERENCE: 244 + AFFILIATION-ADDRESS_INSTITUTION: 4 + FUNDING-ACKNOWLEDGEMENT_GRANTNAME: 515 + CITATION_PAGES: 89019 + HEADER_AUTHOR: 2964 + NAME-HEADER_MARKER: 11983 + AFFILIATION-ADDRESS_COUNTRY: 2 + DATE_OTHER: 7346 + FUNDING-ACKNOWLEDGEMENT_OTHER: 17956 + FUNDING-ACKNOWLEDGEMENT_FUNDERNAME: 4648 + NAME-CITATION_FORENAME: 403393 + CITATION_PUBLISHER: 4379 + FUNDING-ACKNOWLEDGEMENT_GRANTNUMBER: 3396 + HEADER_PUBNUM: 125 + CITATION_PUBNUM: 21585 + NAME-CITATION_MIDDLENAME: 90431 + FULLTEXT_PARAGRAPH: 505587 + HEADER_COPYRIGHT: 55 + FIGURE_FIGURE_HEAD: 22976 + DATE_DAY: 3754 +==================================================================================== + +************************************************************************************ +COUNTER: FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + STANDALONE_FIGURES: 1802 + ASSIGNED_GRAPHICS_TO_FIGURES: 4018 +==================================================================================== +==================================================================================== diff --git a/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024 b/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024 new file mode 100644 index 0000000000..9027d5b255 --- /dev/null +++ b/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024 @@ -0,0 +1,402 @@ +-------------> GROBID failed on 1 PDF + +984 PDF files processed in 1130.986 seconds, 1.1493760162601627 seconds per PDF file + +Evaluation metrics produced in 634.047 seconds + +======= Header metadata ======= + +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 77.29 9.44 9.16 9.3 983 +authors 93.36 74.28 73.52 73.9 982 +first_author 97.84 92.39 91.54 91.96 981 +title 96.26 86.81 85.05 85.92 983 + +all (micro avg.) 91.19 65.96 64.8 65.37 3929 +all (macro avg.) 91.19 65.73 64.82 65.27 3929 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 80.44 22.46 21.77 22.11 983 +authors 93.44 74.59 73.83 74.21 982 +first_author 97.84 92.39 91.54 91.96 981 +title 98.22 94.81 92.88 93.83 983 + +all (micro avg.) 92.48 71.24 69.99 70.61 3929 +all (macro avg.) 92.48 71.06 70 70.53 3929 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 86.52 47.53 46.08 46.8 983 +authors 96.8 88.17 87.27 87.72 982 +first_author 97.91 92.7 91.85 92.27 981 +title 98.58 96.26 94.3 95.27 983 + +all (micro avg.) 94.95 81.3 79.87 80.58 3929 +all (macro avg.) 94.95 81.16 79.88 80.51 3929 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +abstract 85.78 44.49 43.13 43.8 983 +authors 94.76 79.94 79.12 79.53 982 +first_author 97.84 92.39 91.54 91.96 981 +title 98.58 96.26 94.3 95.27 983 + +all (micro avg.) 94.24 78.39 77.02 77.7 3929 +all (macro avg.) 94.24 78.27 77.02 77.64 3929 + +===== Instance-level results ===== + +Total expected instances: 983 +Total correct instances: 73 (strict) +Total correct instances: 198 (soft) +Total correct instances: 377 (Levenshtein) +Total correct instances: 335 (ObservedRatcliffObershelp) + +Instance-level recall: 7.43 (strict) +Instance-level recall: 20.14 (soft) +Instance-level recall: 38.35 (Levenshtein) +Instance-level recall: 34.08 (RatcliffObershelp) + +======= Citation metadata ======= + +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 96.99 79.4 78.19 78.79 63170 +date 99.39 95.86 93.99 94.91 63567 +first_author 99.22 94.76 93.28 94.02 63170 +inTitle 99.38 95.77 94.68 95.22 63118 +issue 99.86 1.99 75 3.88 16 +page 99.36 96.26 95.2 95.72 53303 +title 98.57 90.25 90.68 90.47 61950 +volume 99.65 97.85 98.17 98.01 60955 + +all (micro avg.) 99.05 92.66 91.93 92.29 429249 +all (macro avg.) 99.05 81.52 89.9 81.38 429249 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 97.01 79.54 78.33 78.93 63170 +date 99.39 95.86 93.99 94.91 63567 +first_author 99.23 94.84 93.36 94.1 63170 +inTitle 99.45 96.25 95.15 95.7 63118 +issue 99.86 1.99 75 3.88 16 +page 99.36 96.26 95.2 95.72 53303 +title 99.4 95.92 96.38 96.15 61950 +volume 99.65 97.85 98.17 98.01 60955 + +all (micro avg.) 99.17 93.59 92.85 93.22 429249 +all (macro avg.) 99.17 82.31 90.7 82.17 429249 + + +==== Levenshtein Matching ===== (Minimum Levenshtein distance at 0.8) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 99.01 93.29 91.87 92.58 63170 +date 99.39 95.86 93.99 94.91 63567 +first_author 99.3 95.29 93.8 94.54 63170 +inTitle 99.5 96.58 95.47 96.02 63118 +issue 99.86 1.99 75 3.88 16 +page 99.36 96.26 95.2 95.72 53303 +title 99.65 97.66 98.12 97.89 61950 +volume 99.65 97.85 98.17 98.01 60955 + +all (micro avg.) 99.47 95.97 95.21 95.59 429249 +all (macro avg.) 99.47 84.35 92.7 84.19 429249 + + += Ratcliff/Obershelp Matching = (Minimum Ratcliff/Obershelp similarity at 0.95) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +authors 98.05 86.71 85.39 86.05 63170 +date 99.39 95.86 93.99 94.91 63567 +first_author 99.22 94.78 93.3 94.03 63170 +inTitle 99.45 96.25 95.16 95.7 63118 +issue 99.86 1.99 75 3.88 16 +page 99.36 96.26 95.2 95.72 53303 +title 99.63 97.5 97.97 97.74 61950 +volume 99.65 97.85 98.17 98.01 60955 + +all (micro avg.) 99.33 94.87 94.11 94.49 429249 +all (macro avg.) 99.33 83.4 91.77 83.26 429249 + +===== Instance-level results ===== + +Total expected instances: 63569 +Total extracted instances: 66388 +Total correct instances: 42246 (strict) +Total correct instances: 45085 (soft) +Total correct instances: 52715 (Levenshtein) +Total correct instances: 49331 (RatcliffObershelp) + +Instance-level precision: 63.63 (strict) +Instance-level precision: 67.91 (soft) +Instance-level precision: 79.4 (Levenshtein) +Instance-level precision: 74.31 (RatcliffObershelp) + +Instance-level recall: 66.46 (strict) +Instance-level recall: 70.92 (soft) +Instance-level recall: 82.93 (Levenshtein) +Instance-level recall: 77.6 (RatcliffObershelp) + +Instance-level f-score: 65.02 (strict) +Instance-level f-score: 69.38 (soft) +Instance-level f-score: 81.13 (Levenshtein) +Instance-level f-score: 75.92 (RatcliffObershelp) + +Matching 1 : 58505 + +Matching 2 : 1012 + +Matching 3 : 1242 + +Matching 4 : 371 + +Total matches : 61130 + +======= Citation context resolution ======= + +Total expected references: 63569 - 64.67 references per article +Total predicted references: 66388 - 67.54 references per article + +Total expected citation contexts: 108880 - 110.76 citation contexts per article +Total predicted citation contexts: 99284 - 101 citation contexts per article + +Total correct predicted citation contexts: 95494 - 97.15 citation contexts per article +Total wrong predicted citation contexts: 3790 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 96.18 +Recall citation contexts: 87.71 +fscore citation contexts: 91.75 + +======= Fulltext structures ======= + +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). + +======= Strict Matching ======= (exact matches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +availability_stmt 99.76 29.94 26.71 28.24 584 +figure_title 87.45 0.02 0.01 0.01 31671 +funding_stmt 98.47 4.77 23.8 7.95 920 +reference_citation 70.68 55.46 55.67 55.56 108807 +reference_figure 81.67 56.78 49.91 53.12 68786 +reference_table 99.56 68.24 73.46 70.75 2381 +section_title 97.44 85.17 74.17 79.29 21808 +table_title 99.22 0.45 0.16 0.23 1924 + +all (micro avg.) 91.78 54.74 47.79 51.03 236881 +all (macro avg.) 91.78 37.6 37.99 36.89 236881 + + +======== Soft Matching ======== (ignoring punctuation, case and space characters mismatches) + +===== Field-level results ===== + +label accuracy precision recall f1 support + +availability_stmt 99.75 38.96 34.76 36.74 584 +figure_title 89.05 48.86 15.12 23.09 31671 +funding_stmt 98.22 4.77 23.8 7.95 920 +reference_citation 93.28 91.04 91.38 91.21 108807 +reference_figure 78.87 57.06 50.16 53.39 68786 +reference_table 99.49 68.32 73.54 70.83 2381 +section_title 97.16 86.05 74.93 80.1 21808 +table_title 99.48 80.63 27.91 41.47 1924 + +all (micro avg.) 94.41 76.29 66.6 71.12 236881 +all (macro avg.) 94.41 59.46 48.95 50.6 236881 + +===== Document-level ratio results ===== + +label accuracy precision recall f1 support + +availability_stmt 83.49 96.3 89.21 92.62 584 + +all (micro avg.) 83.49 96.3 89.21 92.62 584 +all (macro avg.) 83.49 96.3 89.21 92.62 584 + + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.TableRejectionCounters +************************************************************************************ +------------------------------------------------------------------------------------ + CANNOT_PARSE_LABEL_TO_INT: 7 + CONTENT_SIZE_TOO_SMALL: 31 + CONTENT_WIDTH_TOO_SMALL: 1 + EMPTY_LABEL_OR_HEADER_OR_CONTENT: 1704 + HEADER_NOT_STARTS_WITH_TABLE_WORD: 52 + HEADER_NOT_CONSECUTIVE: 164 + HEADER_AND_CONTENT_DIFFERENT_PAGES: 5 + HEADER_AND_CONTENT_INTERSECT: 71 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.ReferenceMarkerMatcherCounters +************************************************************************************ +------------------------------------------------------------------------------------ + MATCHED_REF_MARKERS_AFTER_POST_FILTERING: 6448 + UNMATCHED_REF_MARKERS: 3770 + STYLE_AUTHORS: 64039 + STYLE_NUMBERED: 1241 + MANY_CANDIDATES: 7611 + MANY_CANDIDATES_AFTER_POST_FILTERING: 866 + NO_CANDIDATES: 8187 + INPUT_REF_STRINGS_CNT: 66598 + MATCHED_REF_MARKERS: 99284 + NO_CANDIDATES_AFTER_POST_FILTERING: 294 + STYLE_OTHER: 1318 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.counters.FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + SKIPPED_BAD_STANDALONE_FIGURES: 1632 + SKIPPED_DUE_TO_MISMATCH_OF_CAPTIONS_AND_VECTOR_AND_BITMAP_GRAPHICS: 1 + SKIPPED_SMALL_STANDALONE_FIGURES: 1326 + SKIPPED_BIG_STANDALONE_FIGURES: 306 + TOO_MANY_FIGURES_PER_PAGE: 2 +==================================================================================== + +************************************************************************************ +COUNTER: org.grobid.core.engines.label.TaggingLabelImpl +************************************************************************************ +------------------------------------------------------------------------------------ + HEADER_DOCTYPE: 1258 + CITATION_TITLE: 63651 + HEADER_DATE: 929 + NAME-HEADER_MIDDLENAME: 4489 + HEADER_KEYWORD: 288 + TABLE_FIGDESC: 1106 + NAME-HEADER_SURNAME: 12149 + NAME-CITATION_OTHER: 313974 + HEADER_FUNDING: 315 + CITATION_BOOKTITLE: 1821 + HEADER_ADDRESS: 5313 + HEADER_AFFILIATION: 5919 + CITATION_NOTE: 651 + FULLTEXT_CITATION_MARKER: 131273 + TABLE_NOTE: 1175 + HEADER_EMAIL: 1384 + FULLTEXT_TABLE_MARKER: 4585 + FUNDING-ACKNOWLEDGEMENT_AFFILIATION: 636 + CITATION_WEB: 45809 + HEADER_GROUP: 1 + FULLTEXT_SECTION: 43257 + TABLE_LABEL: 618 + FUNDING-ACKNOWLEDGEMENT_PROGRAMNAME: 235 + DATE_YEAR: 65916 + NAME-HEADER_FORENAME: 12801 + TABLE_CONTENT: 1779 + CITATION_COLLABORATION: 141 + CITATION_ISSUE: 807 + HEADER_MEETING: 1 + HEADER_EDITOR: 926 + CITATION_SERIES: 47 + CITATION_JOURNAL: 62533 + NAME-CITATION_SURNAME: 370790 + TABLE_FIGURE_HEAD: 1251 + FULLTEXT_EQUATION_MARKER: 1190 + CITATION_OTHER: 375507 + FULLTEXT_FIGURE_MARKER: 110783 + HEADER_TITLE: 1014 + CITATION_TECH: 115 + FIGURE_CONTENT: 2846 + FIGURE_LABEL: 10277 + FULLTEXT_EQUATION_LABEL: 1638 + HEADER_OTHER: 7768 + FULLTEXT_EQUATION: 4937 + CITATION_DATE: 65096 + CITATION_AUTHOR: 66578 + FULLTEXT_FIGURE: 25071 + FULLTEXT_TABLE: 5440 + CITATION_EDITOR: 423 + FULLTEXT_OTHER: 63 + HEADER_SUBMISSION: 1664 + NAME-HEADER_OTHER: 8631 + FUNDING-ACKNOWLEDGEMENT_PROJECTNAME: 180 + FIGURE_FIGDESC: 12559 + HEADER_AVAILABILITY: 5 + NAME-HEADER_SUFFIX: 7 + CITATION_VOLUME: 61605 + CITATION_LOCATION: 3972 + NAME-CITATION_SUFFIX: 15 + FUNDING-ACKNOWLEDGEMENT_INFRASTRUCTURE: 171 + FUNDING-ACKNOWLEDGEMENT_INSTITUTION: 819 + NAME-HEADER_TITLE: 166 + DATE_MONTH: 1279 + HEADER_WEB: 169 + FUNDING-ACKNOWLEDGEMENT_PERSON: 5219 + HEADER_ABSTRACT: 1148 + CITATION_INSTITUTION: 2564 + HEADER_REFERENCE: 2046 + FUNDING-ACKNOWLEDGEMENT_GRANTNAME: 389 + CITATION_PAGES: 61658 + HEADER_AUTHOR: 3380 + NAME-HEADER_MARKER: 7440 + DATE_OTHER: 1691 + FUNDING-ACKNOWLEDGEMENT_OTHER: 14918 + FUNDING-ACKNOWLEDGEMENT_FUNDERNAME: 3245 + NAME-CITATION_FORENAME: 375540 + CITATION_PUBLISHER: 2026 + FUNDING-ACKNOWLEDGEMENT_GRANTNUMBER: 3063 + HEADER_PUBNUM: 6026 + CITATION_PUBNUM: 60525 + NAME-CITATION_MIDDLENAME: 3224 + HEADER_COPYRIGHT: 1012 + FULLTEXT_PARAGRAPH: 362605 + FIGURE_FIGURE_HEAD: 19715 + DATE_DAY: 1341 +==================================================================================== + +************************************************************************************ +COUNTER: FigureCounters +************************************************************************************ +------------------------------------------------------------------------------------ + STANDALONE_FIGURES: 411 + ASSIGNED_GRAPHICS_TO_FIGURES: 3488 +==================================================================================== +==================================================================================== From ef9123fd617f36101e12c7ae5cf3325c6e6cefe6 Mon Sep 17 00:00:00 2001 From: lopezp <patrice.lopez@science-miner.com> Date: Fri, 9 Aug 2024 18:05:38 +0200 Subject: [PATCH 12/22] update benchmark markdown --- ...RF-FEATURES_citations_header-09.08.2024.md | 282 +++++++++++++++++ ...n_reference_segmenter-header-09.08.2024.md | 277 +++++++++++++++++ ...S_reference_segmenter_header-09.08.2024.md | 294 ++++++++++++++++++ ...itations_reference_segmenter-09.08.2024.md | 278 +++++++++++++++++ 4 files changed, 1131 insertions(+) create mode 100644 grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md create mode 100644 grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md create mode 100644 grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md create mode 100644 grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md diff --git a/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md b/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md new file mode 100644 index 0000000000..ace5c995a2 --- /dev/null +++ b/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md @@ -0,0 +1,282 @@ + +## Header metadata + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 13.58 | 13.65 | 13.61 | 960 | +| authors | 98.87 | 98.97 | 98.92 | 969 | +| first_author | 99.18 | 99.28 | 99.23 | 969 | +| keywords | 0 | 0 | 0 | 0 | +| title | 95.75 | 94.6 | 95.17 | 1000 | +| | | | | | +| **all fields (micro avg.)** | **77.01** | **76.91** | **76.96** | 3898 | +| all fields (macro avg.) | 76.84 | 76.62 | 76.73 | 3898 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 50.57 | 50.83 | 50.7 | 960 | +| authors | 98.87 | 98.97 | 98.92 | 969 | +| first_author | 99.18 | 99.28 | 99.23 | 969 | +| keywords | 0 | 0 | 0 | 0 | +| title | 99.39 | 98.2 | 98.79 | 1000 | +| | | | | | +| **all fields (micro avg.)** | **87.11** | **86.99** | **87.05** | 3898 | +| all fields (macro avg.) | 87 | 86.82 | 86.91 | 3898 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 76.68 | 77.08 | 76.88 | 960 | +| authors | 99.28 | 99.38 | 99.33 | 969 | +| first_author | 99.28 | 99.38 | 99.33 | 969 | +| keywords | 0 | 0 | 0 | 0 | +| title | 99.7 | 98.5 | 99.09 | 1000 | +| | | | | | +| **all fields (micro avg.)** | **93.78** | **93.66** | **93.72** | 3898 | +| all fields (macro avg.) | 93.73 | 93.59 | 93.66 | 3898 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 66.94 | 67.29 | 67.12 | 960 | +| authors | 99.18 | 99.28 | 99.23 | 969 | +| first_author | 99.18 | 99.28 | 99.23 | 969 | +| keywords | 0 | 0 | 0 | 0 | +| title | 99.49 | 98.3 | 98.89 | 1000 | +| | | | | | +| **all fields (micro avg.)** | **91.27** | **91.15** | **91.21** | 3898 | +| all fields (macro avg.) | 91.2 | 91.04 | 91.12 | 3898 | + + +#### Instance-level results + +``` +Total expected instances: 1000 +Total correct instances: 139 (strict) +Total correct instances: 487 (soft) +Total correct instances: 726 (Levenshtein) +Total correct instances: 642 (ObservedRatcliffObershelp) + +Instance-level recall: 13.9 (strict) +Instance-level recall: 48.7 (soft) +Instance-level recall: 72.6 (Levenshtein) +Instance-level recall: 64.2 (RatcliffObershelp) +``` + + +## Citation metadata + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 81.17 | 78.43 | 79.78 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 91.47 | 88.34 | 89.88 | 44770 | +| inTitle | 81.67 | 83.58 | 82.61 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 59.97 | 60.47 | 60.22 | 43101 | +| volume | 95.89 | 96.11 | 96 | 40458 | +| | | | | | +| **all fields (micro avg.)** | **84.23** | **81.45** | **82.81** | 321178 | +| all fields (macro avg.) | 85.26 | 82.3 | 83.67 | 321178 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 81.49 | 78.73 | 80.09 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 91.69 | 88.55 | 90.09 | 44770 | +| inTitle | 85.51 | 87.5 | 86.49 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 91.95 | 92.74 | 92.34 | 43101 | +| volume | 95.89 | 96.11 | 96 | 40458 | +| | | | | | +| **all fields (micro avg.)** | **89.32** | **86.37** | **87.82** | 321178 | +| all fields (macro avg.) | 89.81 | 86.89 | 88.24 | 321178 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 90.64 | 87.57 | 89.08 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 92.23 | 89.08 | 90.62 | 44770 | +| inTitle | 86.45 | 88.47 | 87.45 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 94.56 | 95.37 | 94.96 | 43101 | +| volume | 95.89 | 96.11 | 96 | 40458 | +| | | | | | +| **all fields (micro avg.)** | **91.17** | **88.16** | **89.64** | 321178 | +| all fields (macro avg.) | 91.46 | 88.51 | 89.88 | 321178 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 84.94 | 82.06 | 83.48 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 91.47 | 88.34 | 89.88 | 44770 | +| inTitle | 85.16 | 87.15 | 86.14 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 93.95 | 94.74 | 94.34 | 43101 | +| volume | 95.89 | 96.11 | 96 | 40458 | +| | | | | | +| **all fields (micro avg.)** | **90** | **87.03** | **88.49** | 321178 | +| all fields (macro avg.) | 90.42 | 87.49 | 88.84 | 321178 | + + +#### Instance-level results + +``` +Total expected instances: 48449 +Total extracted instances: 48250 +Total correct instances: 13496 (strict) +Total correct instances: 22269 (soft) +Total correct instances: 24916 (Levenshtein) +Total correct instances: 23272 (RatcliffObershelp) + +Instance-level precision: 27.97 (strict) +Instance-level precision: 46.15 (soft) +Instance-level precision: 51.64 (Levenshtein) +Instance-level precision: 48.23 (RatcliffObershelp) + +Instance-level recall: 27.86 (strict) +Instance-level recall: 45.96 (soft) +Instance-level recall: 51.43 (Levenshtein) +Instance-level recall: 48.03 (RatcliffObershelp) + +Instance-level f-score: 27.91 (strict) +Instance-level f-score: 46.06 (soft) +Instance-level f-score: 51.53 (Levenshtein) +Instance-level f-score: 48.13 (RatcliffObershelp) + +Matching 1 : 35369 + +Matching 2 : 1260 + +Matching 3 : 3266 + +Matching 4 : 1800 + +Total matches : 41695 +``` + + +#### Citation context resolution +``` + +Total expected references: 48449 - 48.45 references per article +Total predicted references: 48250 - 48.25 references per article + +Total expected citation contexts: 69755 - 69.75 citation contexts per article +Total predicted citation contexts: 73696 - 73.7 citation contexts per article + +Total correct predicted citation contexts: 56772 - 56.77 citation contexts per article +Total wrong predicted citation contexts: 16924 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 77.04 +Recall citation contexts: 81.39 +fscore citation contexts: 79.15 +``` + + +## Fulltext structures + +Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. + + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 54.06 | 52.12 | 53.07 | 779 | +| figure_title | 2.11 | 0.92 | 1.28 | 8943 | +| funding_stmt | 5.27 | 28.14 | 8.88 | 1507 | +| reference_citation | 86.69 | 94.65 | 90.49 | 69741 | +| reference_figure | 72.06 | 54.06 | 61.77 | 11010 | +| reference_table | 84.28 | 92.07 | 88 | 5159 | +| section_title | 77.18 | 65.8 | 71.03 | 17540 | +| table_title | 1.13 | 0.59 | 0.77 | 6092 | +| | | | | | +| **all fields (micro avg.)** | **73.79** | **73.86** | **73.82** | 120771 | +| all fields (macro avg.) | 47.85 | 48.54 | 46.91 | 120771 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 79.36 | 76.51 | 77.91 | 779 | +| figure_title | 81.17 | 35.33 | 49.24 | 8943 | +| funding_stmt | 6.89 | 36.76 | 11.6 | 1507 | +| reference_citation | 86.7 | 94.66 | 90.51 | 69741 | +| reference_figure | 72.52 | 54.41 | 62.17 | 11010 | +| reference_table | 84.46 | 92.27 | 88.19 | 5159 | +| section_title | 78.17 | 66.65 | 71.95 | 17540 | +| table_title | 15.97 | 8.39 | 11 | 6092 | +| | | | | | +| **all fields (micro avg.)** | **77.16** | **77.24** | **77.2** | 120771 | +| all fields (macro avg.) | 63.16 | 58.12 | 57.82 | 120771 | + + +**Document-level ratio results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 99.47 | 96.41 | 97.91 | 779 | +| | | | | | +| **all fields (micro avg.)** | **99.47** | **96.41** | **97.91** | 779 | +| all fields (macro avg.) | 99.47 | 96.41 | 97.91 | 779 | + +Evaluation metrics produced in 396.908 seconds diff --git a/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md b/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md new file mode 100644 index 0000000000..7bc732a83e --- /dev/null +++ b/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md @@ -0,0 +1,277 @@ + +## Header metadata + +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 16.78 | 16.48 | 16.63 | 1911 | +| authors | 92.01 | 91.91 | 91.96 | 1941 | +| first_author | 96.7 | 96.6 | 96.65 | 1941 | +| keywords | 64.99 | 63.62 | 64.3 | 1380 | +| title | 84.67 | 84.41 | 84.54 | 1943 | +| | | | | | +| **all fields (micro avg.)** | **71.79** | **71.22** | **71.5** | 9116 | +| all fields (macro avg.) | 71.03 | 70.6 | 70.81 | 9116 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 63.83 | 62.69 | 63.25 | 1911 | +| authors | 93.91 | 93.82 | 93.87 | 1941 | +| first_author | 97.06 | 96.96 | 97.01 | 1941 | +| keywords | 73.72 | 72.17 | 72.94 | 1380 | +| title | 92.15 | 91.87 | 92.01 | 1943 | +| | | | | | +| **all fields (micro avg.)** | **84.95** | **84.27** | **84.61** | 9116 | +| all fields (macro avg.) | 84.14 | 83.5 | 83.82 | 9116 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 91.05 | 89.43 | 90.23 | 1911 | +| authors | 96.08 | 95.98 | 96.03 | 1941 | +| first_author | 97.32 | 97.22 | 97.27 | 1941 | +| keywords | 84.16 | 82.39 | 83.27 | 1380 | +| title | 98.35 | 98.04 | 98.2 | 1943 | +| | | | | | +| **all fields (micro avg.)** | **94.01** | **93.25** | **93.63** | 9116 | +| all fields (macro avg.) | 93.39 | 92.61 | 93 | 9116 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 87.11 | 85.56 | 86.33 | 1911 | +| authors | 94.95 | 94.85 | 94.9 | 1941 | +| first_author | 96.7 | 96.6 | 96.65 | 1941 | +| keywords | 79.5 | 77.83 | 78.65 | 1380 | +| title | 96.33 | 96.04 | 96.19 | 1943 | +| | | | | | +| **all fields (micro avg.)** | **91.68** | **90.95** | **91.32** | 9116 | +| all fields (macro avg.) | 90.92 | 90.17 | 90.54 | 9116 | + + +#### Instance-level results + +``` +Total expected instances: 1943 +Total correct instances: 219 (strict) +Total correct instances: 904 (soft) +Total correct instances: 1434 (Levenshtein) +Total correct instances: 1294 (ObservedRatcliffObershelp) + +Instance-level recall: 11.27 (strict) +Instance-level recall: 46.53 (soft) +Instance-level recall: 73.8 (Levenshtein) +Instance-level recall: 66.6 (RatcliffObershelp) +``` + + +## Citation metadata + +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 83.03 | 76.31 | 79.53 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | +| first_author | 89.78 | 82.49 | 85.98 | 85778 | +| inTitle | 73.23 | 71.88 | 72.55 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 79.67 | 75.3 | 77.42 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | +| | | | | | +| **all fields (micro avg.)** | **87.22** | **80.74** | **83.86** | 597569 | +| all fields (macro avg.) | 87.75 | 81.44 | 84.45 | 597569 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 83.5 | 76.75 | 79.98 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | +| first_author | 89.95 | 82.65 | 86.14 | 85778 | +| inTitle | 84.92 | 83.36 | 84.13 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 91.43 | 86.42 | 88.86 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | +| | | | | | +| **all fields (micro avg.)** | **90.61** | **83.89** | **87.12** | 597569 | +| all fields (macro avg.) | 90.76 | 84.34 | 87.41 | 597569 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 89.21 | 81.99 | 85.45 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | +| first_author | 90.15 | 82.84 | 86.34 | 85778 | +| inTitle | 86.18 | 84.59 | 85.38 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 93.8 | 88.66 | 91.15 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | +| | | | | | +| **all fields (micro avg.)** | **91.96** | **85.14** | **88.42** | 597569 | +| all fields (macro avg.) | 91.95 | 85.45 | 88.56 | 597569 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 85.98 | 79.02 | 82.35 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | +| first_author | 89.8 | 82.51 | 86 | 85778 | +| inTitle | 83.49 | 81.95 | 82.72 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 93.39 | 88.27 | 90.76 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | +| | | | | | +| **all fields (micro avg.)** | **91.01** | **84.25** | **87.5** | 597569 | +| all fields (macro avg.) | 91.12 | 84.66 | 87.74 | 597569 | + + +#### Instance-level results + +``` +Total expected instances: 90125 +Total extracted instances: 85902 +Total correct instances: 38762 (strict) +Total correct instances: 50900 (soft) +Total correct instances: 55783 (Levenshtein) +Total correct instances: 52319 (RatcliffObershelp) + +Instance-level precision: 45.12 (strict) +Instance-level precision: 59.25 (soft) +Instance-level precision: 64.94 (Levenshtein) +Instance-level precision: 60.91 (RatcliffObershelp) + +Instance-level recall: 43.01 (strict) +Instance-level recall: 56.48 (soft) +Instance-level recall: 61.9 (Levenshtein) +Instance-level recall: 58.05 (RatcliffObershelp) + +Instance-level f-score: 44.04 (strict) +Instance-level f-score: 57.83 (soft) +Instance-level f-score: 63.38 (Levenshtein) +Instance-level f-score: 59.44 (RatcliffObershelp) + +Matching 1 : 68328 + +Matching 2 : 4154 + +Matching 3 : 1863 + +Matching 4 : 662 + +Total matches : 75007 +``` + + +#### Citation context resolution +``` + +Total expected references: 90125 - 46.38 references per article +Total predicted references: 85902 - 44.21 references per article + +Total expected citation contexts: 139835 - 71.97 citation contexts per article +Total predicted citation contexts: 115373 - 59.38 citation contexts per article + +Total correct predicted citation contexts: 97277 - 50.07 citation contexts per article +Total wrong predicted citation contexts: 18096 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 84.32 +Recall citation contexts: 69.57 +fscore citation contexts: 76.23 +``` + + +## Fulltext structures + +Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. + + +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| figure_title | 31.44 | 24.61 | 27.61 | 7281 | +| reference_citation | 57.43 | 58.68 | 58.05 | 134196 | +| reference_figure | 61.21 | 65.9 | 63.47 | 19330 | +| reference_table | 83.01 | 88.39 | 85.62 | 7327 | +| section_title | 76.39 | 67.77 | 71.82 | 27619 | +| table_title | 57.3 | 50.29 | 53.57 | 3971 | +| | | | | | +| **all fields (micro avg.)** | **60.41** | **60.32** | **60.36** | 199724 | +| all fields (macro avg.) | 61.13 | 59.27 | 60.02 | 199724 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| figure_title | 78.68 | 61.58 | 69.09 | 7281 | +| reference_citation | 61.68 | 63.03 | 62.35 | 134196 | +| reference_figure | 61.69 | 66.41 | 63.97 | 19330 | +| reference_table | 83.19 | 88.58 | 85.8 | 7327 | +| section_title | 81.25 | 72.08 | 76.39 | 27619 | +| table_title | 81.89 | 71.87 | 76.56 | 3971 | +| | | | | | +| **all fields (micro avg.)** | **65.77** | **65.67** | **65.72** | 199724 | +| all fields (macro avg.) | 74.73 | 70.59 | 72.36 | 199724 | + + +**Document-level ratio results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| | | | | | +| **all fields (micro avg.)** | **0** | **0** | **0** | 0 | +| all fields (macro avg.) | 0 | 0 | 0 | 0 | + +Evaluation metrics produced in 625.694 seconds diff --git a/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md b/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md new file mode 100644 index 0000000000..d25f6456c4 --- /dev/null +++ b/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md @@ -0,0 +1,294 @@ + +## Header metadata + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 2.2 | 2.16 | 2.18 | 1990 | +| authors | 83.2 | 82.49 | 82.84 | 1999 | +| first_author | 97.02 | 96.29 | 96.66 | 1997 | +| keywords | 58.71 | 59.83 | 59.27 | 839 | +| title | 77.67 | 76.85 | 77.26 | 2000 | +| | | | | | +| **all fields (micro avg.)** | **64.62** | **64.07** | **64.35** | 8825 | +| all fields (macro avg.) | 63.76 | 63.53 | 63.64 | 8825 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 59.71 | 58.54 | 59.12 | 1990 | +| authors | 83.7 | 82.99 | 83.35 | 1999 | +| first_author | 97.23 | 96.49 | 96.86 | 1997 | +| keywords | 63.86 | 65.08 | 64.46 | 839 | +| title | 79.89 | 79.05 | 79.47 | 2000 | +| | | | | | +| **all fields (micro avg.)** | **78.61** | **77.94** | **78.27** | 8825 | +| all fields (macro avg.) | 76.88 | 76.43 | 76.65 | 8825 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 80.22 | 78.64 | 79.42 | 1990 | +| authors | 92.18 | 91.4 | 91.79 | 1999 | +| first_author | 97.48 | 96.75 | 97.11 | 1997 | +| keywords | 79.42 | 80.93 | 80.17 | 839 | +| title | 92.02 | 91.05 | 91.53 | 2000 | +| | | | | | +| **all fields (micro avg.)** | **89.43** | **88.66** | **89.04** | 8825 | +| all fields (macro avg.) | 88.26 | 87.75 | 88 | 8825 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 76.88 | 75.38 | 76.12 | 1990 | +| authors | 87.79 | 87.04 | 87.42 | 1999 | +| first_author | 97.02 | 96.29 | 96.66 | 1997 | +| keywords | 71.35 | 72.71 | 72.02 | 839 | +| title | 87.87 | 86.95 | 87.41 | 2000 | +| | | | | | +| **all fields (micro avg.)** | **85.86** | **85.12** | **85.49** | 8825 | +| all fields (macro avg.) | 84.18 | 83.67 | 83.92 | 8825 | + + +#### Instance-level results + +``` +Total expected instances: 2000 +Total correct instances: 35 (strict) +Total correct instances: 708 (soft) +Total correct instances: 1222 (Levenshtein) +Total correct instances: 1046 (ObservedRatcliffObershelp) + +Instance-level recall: 1.75 (strict) +Instance-level recall: 35.4 (soft) +Instance-level recall: 61.1 (Levenshtein) +Instance-level recall: 52.3 (RatcliffObershelp) +``` + + +## Citation metadata + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 88.16 | 83.24 | 85.63 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 70.84 | 83.79 | 76.78 | 16894 | +| first_author | 95.06 | 89.68 | 92.29 | 97183 | +| inTitle | 82.83 | 79.4 | 81.08 | 96430 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | +| pmcid | 66.38 | 86.12 | 74.97 | 807 | +| pmid | 70.08 | 84.95 | 76.8 | 2093 | +| title | 84.88 | 83.58 | 84.23 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | +| | | | | | +| **all fields (micro avg.)** | **89.85** | **85.34** | **87.54** | 707301 | +| all fields (macro avg.) | 85.04 | 85.7 | 85.04 | 707301 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 89.31 | 84.33 | 86.75 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 75.34 | 89.11 | 81.65 | 16894 | +| first_author | 95.48 | 90.08 | 92.7 | 97183 | +| inTitle | 92.32 | 88.51 | 90.38 | 96430 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | +| pmcid | 75.64 | 98.14 | 85.44 | 807 | +| pmid | 74.5 | 90.3 | 81.64 | 2093 | +| title | 93.23 | 91.8 | 92.51 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | +| | | | | | +| **all fields (micro avg.)** | **92.66** | **88.02** | **90.28** | 707301 | +| all fields (macro avg.) | 88.46 | 89.47 | 88.61 | 707301 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 94.58 | 89.3 | 91.87 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 77.6 | 91.79 | 84.1 | 16894 | +| first_author | 95.63 | 90.22 | 92.85 | 97183 | +| inTitle | 93.3 | 89.45 | 91.33 | 96430 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | +| pmcid | 75.64 | 98.14 | 85.44 | 807 | +| pmid | 74.5 | 90.3 | 81.64 | 2093 | +| title | 96.05 | 94.58 | 95.31 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | +| | | | | | +| **all fields (micro avg.)** | **93.99** | **89.28** | **91.57** | 707301 | +| all fields (macro avg.) | 89.51 | 90.52 | 89.66 | 707301 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 91.54 | 86.43 | 88.91 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 76.04 | 89.94 | 82.41 | 16894 | +| first_author | 95.1 | 89.72 | 92.33 | 97183 | +| inTitle | 91.06 | 87.29 | 89.13 | 96430 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | +| pmcid | 66.38 | 86.12 | 74.97 | 807 | +| pmid | 70.08 | 84.95 | 76.8 | 2093 | +| title | 95.35 | 93.89 | 94.62 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | +| | | | | | +| **all fields (micro avg.)** | **93.02** | **88.36** | **90.63** | 707301 | +| all fields (macro avg.) | 87.53 | 88.21 | 87.53 | 707301 | + + +#### Instance-level results + +``` +Total expected instances: 98799 +Total extracted instances: 98068 +Total correct instances: 43771 (strict) +Total correct instances: 54778 (soft) +Total correct instances: 58972 (Levenshtein) +Total correct instances: 55693 (RatcliffObershelp) + +Instance-level precision: 44.63 (strict) +Instance-level precision: 55.86 (soft) +Instance-level precision: 60.13 (Levenshtein) +Instance-level precision: 56.79 (RatcliffObershelp) + +Instance-level recall: 44.3 (strict) +Instance-level recall: 55.44 (soft) +Instance-level recall: 59.69 (Levenshtein) +Instance-level recall: 56.37 (RatcliffObershelp) + +Instance-level f-score: 44.47 (strict) +Instance-level f-score: 55.65 (soft) +Instance-level f-score: 59.91 (Levenshtein) +Instance-level f-score: 56.58 (RatcliffObershelp) + +Matching 1 : 79296 + +Matching 2 : 4442 + +Matching 3 : 4371 + +Matching 4 : 2084 + +Total matches : 90193 +``` + + +#### Citation context resolution +``` + +Total expected references: 98797 - 49.4 references per article +Total predicted references: 98068 - 49.03 references per article + +Total expected citation contexts: 142862 - 71.43 citation contexts per article +Total predicted citation contexts: 135692 - 67.85 citation contexts per article + +Total correct predicted citation contexts: 116736 - 58.37 citation contexts per article +Total wrong predicted citation contexts: 18956 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 86.03 +Recall citation contexts: 81.71 +fscore citation contexts: 83.82 +``` + + +## Fulltext structures + +Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. + + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 29.95 | 25.78 | 27.71 | 446 | +| figure_title | 4.23 | 2.01 | 2.72 | 22978 | +| funding_stmt | 4.16 | 24.43 | 7.11 | 745 | +| reference_citation | 71.05 | 71.33 | 71.19 | 147470 | +| reference_figure | 70.59 | 67.74 | 69.14 | 47984 | +| reference_table | 48.11 | 83.03 | 60.92 | 5957 | +| section_title | 72.59 | 69.6 | 71.06 | 32398 | +| table_title | 4.31 | 2.85 | 3.43 | 3925 | +| | | | | | +| **all fields (micro avg.)** | **65.46** | **63.41** | **64.42** | 261903 | +| all fields (macro avg.) | 38.12 | 43.35 | 39.16 | 261903 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 50.52 | 43.5 | 46.75 | 446 | +| figure_title | 69.47 | 32.91 | 44.67 | 22978 | +| funding_stmt | 4.37 | 25.64 | 7.46 | 745 | +| reference_citation | 83.04 | 83.37 | 83.21 | 147470 | +| reference_figure | 71.22 | 68.34 | 69.75 | 47984 | +| reference_table | 48.56 | 83.8 | 61.49 | 5957 | +| section_title | 76.47 | 73.32 | 74.86 | 32398 | +| table_title | 51.44 | 34.06 | 40.99 | 3925 | +| | | | | | +| **all fields (micro avg.)** | **76.38** | **73.99** | **75.17** | 261903 | +| all fields (macro avg.) | 56.89 | 55.62 | 53.65 | 261903 | + + +**Document-level ratio results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 84.77 | 86.1 | 85.43 | 446 | +| | | | | | +| **all fields (micro avg.)** | **84.77** | **86.1** | **85.43** | 446 | +| all fields (macro avg.) | 84.77 | 86.1 | 85.43 | 446 | + +Evaluation metrics produced in 773.926 seconds diff --git a/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md b/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md new file mode 100644 index 0000000000..28b9a89542 --- /dev/null +++ b/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md @@ -0,0 +1,278 @@ + +## Header metadata + +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 9.44 | 9.16 | 9.3 | 983 | +| authors | 74.28 | 73.52 | 73.9 | 982 | +| first_author | 92.39 | 91.54 | 91.96 | 981 | +| title | 86.81 | 85.05 | 85.92 | 983 | +| | | | | | +| **all fields (micro avg.)** | **65.96** | **64.8** | **65.37** | 3929 | +| all fields (macro avg.) | 65.73 | 64.82 | 65.27 | 3929 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 22.46 | 21.77 | 22.11 | 983 | +| authors | 74.59 | 73.83 | 74.21 | 982 | +| first_author | 92.39 | 91.54 | 91.96 | 981 | +| title | 94.81 | 92.88 | 93.83 | 983 | +| | | | | | +| **all fields (micro avg.)** | **71.24** | **69.99** | **70.61** | 3929 | +| all fields (macro avg.) | 71.06 | 70 | 70.53 | 3929 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 47.53 | 46.08 | 46.8 | 983 | +| authors | 88.17 | 87.27 | 87.72 | 982 | +| first_author | 92.7 | 91.85 | 92.27 | 981 | +| title | 96.26 | 94.3 | 95.27 | 983 | +| | | | | | +| **all fields (micro avg.)** | **81.3** | **79.87** | **80.58** | 3929 | +| all fields (macro avg.) | 81.16 | 79.88 | 80.51 | 3929 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| abstract | 44.49 | 43.13 | 43.8 | 983 | +| authors | 79.94 | 79.12 | 79.53 | 982 | +| first_author | 92.39 | 91.54 | 91.96 | 981 | +| title | 96.26 | 94.3 | 95.27 | 983 | +| | | | | | +| **all fields (micro avg.)** | **78.39** | **77.02** | **77.7** | 3929 | +| all fields (macro avg.) | 78.27 | 77.02 | 77.64 | 3929 | + + +#### Instance-level results + +``` +Total expected instances: 983 +Total correct instances: 73 (strict) +Total correct instances: 198 (soft) +Total correct instances: 377 (Levenshtein) +Total correct instances: 335 (ObservedRatcliffObershelp) + +Instance-level recall: 7.43 (strict) +Instance-level recall: 20.14 (soft) +Instance-level recall: 38.35 (Levenshtein) +Instance-level recall: 34.08 (RatcliffObershelp) +``` + + +## Citation metadata + +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 79.4 | 78.19 | 78.79 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 94.76 | 93.28 | 94.02 | 63170 | +| inTitle | 95.77 | 94.68 | 95.22 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 90.25 | 90.68 | 90.47 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | +| | | | | | +| **all fields (micro avg.)** | **92.66** | **91.93** | **92.29** | 429249 | +| all fields (macro avg.) | 81.52 | 89.9 | 81.38 | 429249 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 79.54 | 78.33 | 78.93 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 94.84 | 93.36 | 94.1 | 63170 | +| inTitle | 96.25 | 95.15 | 95.7 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 95.92 | 96.38 | 96.15 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | +| | | | | | +| **all fields (micro avg.)** | **93.59** | **92.85** | **93.22** | 429249 | +| all fields (macro avg.) | 82.31 | 90.7 | 82.17 | 429249 | + + + +#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 93.29 | 91.87 | 92.58 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 95.29 | 93.8 | 94.54 | 63170 | +| inTitle | 96.58 | 95.47 | 96.02 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 97.66 | 98.12 | 97.89 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | +| | | | | | +| **all fields (micro avg.)** | **95.97** | **95.21** | **95.59** | 429249 | +| all fields (macro avg.) | 84.35 | 92.7 | 84.19 | 429249 | + + + +#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| authors | 86.71 | 85.39 | 86.05 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 94.78 | 93.3 | 94.03 | 63170 | +| inTitle | 96.25 | 95.16 | 95.7 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 97.5 | 97.97 | 97.74 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | +| | | | | | +| **all fields (micro avg.)** | **94.87** | **94.11** | **94.49** | 429249 | +| all fields (macro avg.) | 83.4 | 91.77 | 83.26 | 429249 | + + +#### Instance-level results + +``` +Total expected instances: 63569 +Total extracted instances: 66388 +Total correct instances: 42246 (strict) +Total correct instances: 45085 (soft) +Total correct instances: 52715 (Levenshtein) +Total correct instances: 49331 (RatcliffObershelp) + +Instance-level precision: 63.63 (strict) +Instance-level precision: 67.91 (soft) +Instance-level precision: 79.4 (Levenshtein) +Instance-level precision: 74.31 (RatcliffObershelp) + +Instance-level recall: 66.46 (strict) +Instance-level recall: 70.92 (soft) +Instance-level recall: 82.93 (Levenshtein) +Instance-level recall: 77.6 (RatcliffObershelp) + +Instance-level f-score: 65.02 (strict) +Instance-level f-score: 69.38 (soft) +Instance-level f-score: 81.13 (Levenshtein) +Instance-level f-score: 75.92 (RatcliffObershelp) + +Matching 1 : 58505 + +Matching 2 : 1012 + +Matching 3 : 1242 + +Matching 4 : 371 + +Total matches : 61130 +``` + + +#### Citation context resolution +``` + +Total expected references: 63569 - 64.67 references per article +Total predicted references: 66388 - 67.54 references per article + +Total expected citation contexts: 108880 - 110.76 citation contexts per article +Total predicted citation contexts: 99284 - 101 citation contexts per article + +Total correct predicted citation contexts: 95494 - 97.15 citation contexts per article +Total wrong predicted citation contexts: 3790 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) + +Precision citation contexts: 96.18 +Recall citation contexts: 87.71 +fscore citation contexts: 91.75 +``` + + +## Fulltext structures + +Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. + + +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). + +#### Strict Matching (exact matches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 29.94 | 26.71 | 28.24 | 584 | +| figure_title | 0.02 | 0.01 | 0.01 | 31671 | +| funding_stmt | 4.77 | 23.8 | 7.95 | 920 | +| reference_citation | 55.46 | 55.67 | 55.56 | 108807 | +| reference_figure | 56.78 | 49.91 | 53.12 | 68786 | +| reference_table | 68.24 | 73.46 | 70.75 | 2381 | +| section_title | 85.17 | 74.17 | 79.29 | 21808 | +| table_title | 0.45 | 0.16 | 0.23 | 1924 | +| | | | | | +| **all fields (micro avg.)** | **54.74** | **47.79** | **51.03** | 236881 | +| all fields (macro avg.) | 37.6 | 37.99 | 36.89 | 236881 | + + + +#### Soft Matching (ignoring punctuation, case and space characters mismatches) + +**Field-level results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 38.96 | 34.76 | 36.74 | 584 | +| figure_title | 48.86 | 15.12 | 23.09 | 31671 | +| funding_stmt | 4.77 | 23.8 | 7.95 | 920 | +| reference_citation | 91.04 | 91.38 | 91.21 | 108807 | +| reference_figure | 57.06 | 50.16 | 53.39 | 68786 | +| reference_table | 68.32 | 73.54 | 70.83 | 2381 | +| section_title | 86.05 | 74.93 | 80.1 | 21808 | +| table_title | 80.63 | 27.91 | 41.47 | 1924 | +| | | | | | +| **all fields (micro avg.)** | **76.29** | **66.6** | **71.12** | 236881 | +| all fields (macro avg.) | 59.46 | 48.95 | 50.6 | 236881 | + + +**Document-level ratio results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 96.3 | 89.21 | 92.62 | 584 | +| | | | | | +| **all fields (micro avg.)** | **96.3** | **89.21** | **92.62** | 584 | +| all fields (macro avg.) | 96.3 | 89.21 | 92.62 | 584 | + +Evaluation metrics produced in 640.707 seconds From cb570a639b52150dbe083c9a986e34629315e16b Mon Sep 17 00:00:00 2001 From: Patrice Lopez <patrice.lopez@science-miner.com> Date: Sat, 10 Aug 2024 15:41:45 +0200 Subject: [PATCH 13/22] doc with new benchmarks --- doc/Benchmarking-biorxiv.md | 294 ++++++++++-------- doc/Benchmarking-elife.md | 274 ++++++++-------- doc/Benchmarking-plos.md | 235 +++++++------- doc/Benchmarking-pmc.md | 264 +++++++++------- ...RF-FEATURES_citations_header-09.08.2024.md | 282 ----------------- ...n_reference_segmenter-header-09.08.2024.md | 277 ----------------- ...S_reference_segmenter_header-09.08.2024.md | 294 ------------------ ...itations_reference_segmenter-09.08.2024.md | 278 ----------------- 8 files changed, 572 insertions(+), 1626 deletions(-) delete mode 100644 grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md delete mode 100644 grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md delete mode 100644 grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md delete mode 100644 grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md diff --git a/doc/Benchmarking-biorxiv.md b/doc/Benchmarking-biorxiv.md index 0084192ffa..2644ed8773 100644 --- a/doc/Benchmarking-biorxiv.md +++ b/doc/Benchmarking-biorxiv.md @@ -2,7 +2,7 @@ ## General -This is the end-to-end benchmarking result for GROBID version **0.7.3** against the `bioRxiv` test set (`biorxiv-10k-test-2000`), see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. +This is the end-to-end benchmarking result for GROBID version **0.8.1** against the `bioRxiv` test set (`biorxiv-10k-test-2000`), see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. The following end-to-end results are using: @@ -22,13 +22,14 @@ Other versions of these benchmarks with variants and **Deep Learning models** (e Evaluation on 2000 PDF preprints out of 2000 (no failure). -Runtime for processing 2000 PDF: **3133s** (1.56 second per PDF) on Ubuntu 16.04, 4 CPU i7-4790K (8 threads), 16GB RAM (workstation bought in 2015 for 1600 euros) and with a GeForce GTX 1050 Ti GPU. +Runtime for processing 2000 PDF: **1713** seconds (0.85 seconds per PDF file) on Ubuntu 22.04, 16 CPU (32 threads), 128GB RAM and with a GeForce GTX 1080 Ti GPU. + +Note: with CRF only models runtime is 622s (0.31 second per PDF) with 4GPU, 8 threads. -Note: with CRF only models runtime is 622s (0.31 second per PDF). ## Header metadata -Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -37,13 +38,15 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 2.2 | 2.16 | 2.18 | 1990 | -| authors | 73.66 | 73.04 | 73.35 | 1999 | -| first_author | 94.3 | 93.59 | 93.94 | 1997 | +| authors | 83.2 | 82.49 | 82.84 | 1999 | +| first_author | 97.02 | 96.29 | 96.66 | 1997 | | keywords | 58.71 | 59.83 | 59.27 | 839 | -| title | 82.36 | 81.5 | 81.93 | 2000 | +| title | 77.67 | 76.85 | 77.26 | 2000 | | | | | | | -| **all fields (micro avg.)** | **62.91** | **62.37** | **62.64** | 8825 | -| all fields (macro avg.) | 62.25 | 62.02 | 62.13 | 8825 | +| **all fields (micro avg.)** | **64.62** | **64.07** | **64.35** | 8825 | +| all fields (macro avg.) | 63.76 | 63.53 | 63.64 | 8825 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -52,13 +55,15 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 59.71 | 58.54 | 59.12 | 1990 | -| authors | 75.93 | 75.29 | 75.61 | 1999 | -| first_author | 94.9 | 94.19 | 94.55 | 1997 | +| authors | 83.7 | 82.99 | 83.35 | 1999 | +| first_author | 97.23 | 96.49 | 96.86 | 1997 | | keywords | 63.86 | 65.08 | 64.46 | 839 | -| title | 90.8 | 89.85 | 90.32 | 2000 | +| title | 79.89 | 79.05 | 79.47 | 2000 | | | | | | | -| **all fields (micro avg.)** | **78.8** | **78.12** | **78.46** | 8825 | -| all fields (macro avg.) | 77.04 | 76.59 | 76.81 | 8825 | +| **all fields (micro avg.)** | **78.61** | **77.94** | **78.27** | 8825 | +| all fields (macro avg.) | 76.88 | 76.43 | 76.65 | 8825 | + + #### Levenshtein Matching (Minimum Levenshtein distance at 0.8) @@ -67,13 +72,15 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 80.22 | 78.64 | 79.42 | 1990 | -| authors | 89.61 | 88.84 | 89.22 | 1999 | -| first_author | 95.21 | 94.49 | 94.85 | 1997 | +| authors | 92.18 | 91.4 | 91.79 | 1999 | +| first_author | 97.48 | 96.75 | 97.11 | 1997 | | keywords | 79.42 | 80.93 | 80.17 | 839 | -| title | 94.59 | 93.6 | 94.09 | 2000 | +| title | 92.02 | 91.05 | 91.53 | 2000 | | | | | | | -| **all fields (micro avg.)** | **88.91** | **88.15** | **88.53** | 8825 | -| all fields (macro avg.) | 87.81 | 87.3 | 87.55 | 8825 | +| **all fields (micro avg.)** | **89.43** | **88.66** | **89.04** | 8825 | +| all fields (macro avg.) | 88.26 | 87.75 | 88 | 8825 | + + #### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) @@ -82,34 +89,34 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 76.88 | 75.38 | 76.12 | 1990 | -| authors | 82.04 | 81.34 | 81.69 | 1999 | -| first_author | 94.3 | 93.59 | 93.94 | 1997 | +| authors | 87.79 | 87.04 | 87.42 | 1999 | +| first_author | 97.02 | 96.29 | 96.66 | 1997 | | keywords | 71.35 | 72.71 | 72.02 | 839 | -| title | 93.58 | 92.6 | 93.09 | 2000 | +| title | 87.87 | 86.95 | 87.41 | 2000 | | | | | | | -| **all fields (micro avg.)** | **85.23** | **84.5** | **84.86** | 8825 | -| all fields (macro avg.) | 83.63 | 83.12 | 83.37 | 8825 | +| **all fields (micro avg.)** | **85.86** | **85.12** | **85.49** | 8825 | +| all fields (macro avg.) | 84.18 | 83.67 | 83.92 | 8825 | #### Instance-level results ``` -Total expected instances: 2000 -Total correct instances: 29 (strict) -Total correct instances: 718 (soft) -Total correct instances: 1207 (Levenshtein) -Total correct instances: 1024 (ObservedRatcliffObershelp) - -Instance-level recall: 1.45 (strict) -Instance-level recall: 35.9 (soft) -Instance-level recall: 60.35 (Levenshtein) -Instance-level recall: 51.2 (RatcliffObershelp) +Total expected instances: 2000 +Total correct instances: 35 (strict) +Total correct instances: 708 (soft) +Total correct instances: 1222 (Levenshtein) +Total correct instances: 1046 (ObservedRatcliffObershelp) + +Instance-level recall: 1.75 (strict) +Instance-level recall: 35.4 (soft) +Instance-level recall: 61.1 (Levenshtein) +Instance-level recall: 52.3 (RatcliffObershelp) ``` ## Citation metadata -Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -117,41 +124,45 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 88.14 | 83.22 | 85.61 | 97183 | -| date | 91.69 | 86.3 | 88.91 | 97630 | -| doi | 70.83 | 83.79 | 76.77 | 16894 | -| first_author | 95.05 | 89.67 | 92.28 | 97183 | -| inTitle | 82.83 | 79.41 | 81.08 | 96430 | -| issue | 94.33 | 92.04 | 93.17 | 30312 | -| page | 94.97 | 78.34 | 85.85 | 88597 | +| authors | 88.16 | 83.24 | 85.63 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 70.84 | 83.79 | 76.78 | 16894 | +| first_author | 95.06 | 89.68 | 92.29 | 97183 | +| inTitle | 82.83 | 79.4 | 81.08 | 96430 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | | pmcid | 66.38 | 86.12 | 74.97 | 807 | -| pmid | 70.06 | 84.95 | 76.79 | 2093 | -| title | 84.96 | 83.66 | 84.3 | 92463 | -| volume | 96.23 | 95.23 | 95.72 | 87709 | +| pmid | 70.08 | 84.95 | 76.8 | 2093 | +| title | 84.88 | 83.58 | 84.23 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | | | | | | | -| **all fields (micro avg.)** | **89.85** | **85.35** | **87.54** | 707301 | +| **all fields (micro avg.)** | **89.85** | **85.34** | **87.54** | 707301 | | all fields (macro avg.) | 85.04 | 85.7 | 85.04 | 707301 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) **Field-level results** | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 89.3 | 84.32 | 86.74 | 97183 | -| date | 91.69 | 86.3 | 88.91 | 97630 | -| doi | 75.32 | 89.09 | 81.63 | 16894 | -| first_author | 95.48 | 90.07 | 92.7 | 97183 | +| authors | 89.31 | 84.33 | 86.75 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 75.34 | 89.11 | 81.65 | 16894 | +| first_author | 95.48 | 90.08 | 92.7 | 97183 | | inTitle | 92.32 | 88.51 | 90.38 | 96430 | -| issue | 94.33 | 92.04 | 93.17 | 30312 | -| page | 94.97 | 78.34 | 85.85 | 88597 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | | pmcid | 75.64 | 98.14 | 85.44 | 807 | -| pmid | 74.47 | 90.3 | 81.62 | 2093 | -| title | 93.21 | 91.79 | 92.5 | 92463 | -| volume | 96.23 | 95.23 | 95.72 | 87709 | +| pmid | 74.5 | 90.3 | 81.64 | 2093 | +| title | 93.23 | 91.8 | 92.51 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | | | | | | | -| **all fields (micro avg.)** | **92.66** | **88.01** | **90.27** | 707301 | -| all fields (macro avg.) | 88.45 | 89.47 | 88.61 | 707301 | +| **all fields (micro avg.)** | **92.66** | **88.02** | **90.28** | 707301 | +| all fields (macro avg.) | 88.46 | 89.47 | 88.61 | 707301 | + + #### Levenshtein Matching (Minimum Levenshtein distance at 0.8) @@ -159,20 +170,22 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 94.57 | 89.29 | 91.85 | 97183 | -| date | 91.69 | 86.3 | 88.91 | 97630 | -| doi | 77.59 | 91.78 | 84.09 | 16894 | -| first_author | 95.63 | 90.21 | 92.84 | 97183 | -| inTitle | 93.3 | 89.44 | 91.33 | 96430 | -| issue | 94.33 | 92.04 | 93.17 | 30312 | -| page | 94.97 | 78.34 | 85.85 | 88597 | +| authors | 94.58 | 89.3 | 91.87 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 77.6 | 91.79 | 84.1 | 16894 | +| first_author | 95.63 | 90.22 | 92.85 | 97183 | +| inTitle | 93.3 | 89.45 | 91.33 | 96430 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | | pmcid | 75.64 | 98.14 | 85.44 | 807 | -| pmid | 74.47 | 90.3 | 81.62 | 2093 | -| title | 96.04 | 94.57 | 95.3 | 92463 | -| volume | 96.23 | 95.23 | 95.72 | 87709 | +| pmid | 74.5 | 90.3 | 81.64 | 2093 | +| title | 96.05 | 94.58 | 95.31 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | | | | | | | -| **all fields (micro avg.)** | **93.98** | **89.27** | **91.57** | 707301 | -| all fields (macro avg.) | 89.5 | 90.51 | 89.65 | 707301 | +| **all fields (micro avg.)** | **93.99** | **89.28** | **91.57** | 707301 | +| all fields (macro avg.) | 89.51 | 90.52 | 89.66 | 707301 | + + #### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) @@ -180,80 +193,83 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 91.52 | 86.41 | 88.89 | 97183 | -| date | 91.69 | 86.3 | 88.91 | 97630 | -| doi | 76.02 | 89.93 | 82.39 | 16894 | -| first_author | 95.1 | 89.71 | 92.33 | 97183 | +| authors | 91.54 | 86.43 | 88.91 | 97183 | +| date | 91.69 | 86.31 | 88.92 | 97630 | +| doi | 76.04 | 89.94 | 82.41 | 16894 | +| first_author | 95.1 | 89.72 | 92.33 | 97183 | | inTitle | 91.06 | 87.29 | 89.13 | 96430 | -| issue | 94.33 | 92.04 | 93.17 | 30312 | -| page | 94.97 | 78.34 | 85.85 | 88597 | +| issue | 94.34 | 92.04 | 93.18 | 30312 | +| page | 94.97 | 78.34 | 85.86 | 88597 | | pmcid | 66.38 | 86.12 | 74.97 | 807 | -| pmid | 70.06 | 84.95 | 76.79 | 2093 | -| title | 95.35 | 93.89 | 94.61 | 92463 | -| volume | 96.23 | 95.23 | 95.72 | 87709 | +| pmid | 70.08 | 84.95 | 76.8 | 2093 | +| title | 95.35 | 93.89 | 94.62 | 92463 | +| volume | 96.23 | 95.23 | 95.73 | 87709 | | | | | | | -| **all fields (micro avg.)** | **93.01** | **88.35** | **90.62** | 707301 | -| all fields (macro avg.) | 87.52 | 88.2 | 87.53 | 707301 | +| **all fields (micro avg.)** | **93.02** | **88.36** | **90.63** | 707301 | +| all fields (macro avg.) | 87.53 | 88.21 | 87.53 | 707301 | + #### Instance-level results ``` -Total expected instances: 98799 -Total extracted instances: 98068 -Total correct instances: 43806 (strict) -Total correct instances: 54774 (soft) -Total correct instances: 58973 (Levenshtein) -Total correct instances: 55696 (RatcliffObershelp) +Total expected instances: 98799 +Total extracted instances: 98068 +Total correct instances: 43771 (strict) +Total correct instances: 54778 (soft) +Total correct instances: 58972 (Levenshtein) +Total correct instances: 55693 (RatcliffObershelp) -Instance-level precision: 44.67 (strict) -Instance-level precision: 55.85 (soft) -Instance-level precision: 60.13 (Levenshtein) -Instance-level precision: 56.79 (RatcliffObershelp) +Instance-level precision: 44.63 (strict) +Instance-level precision: 55.86 (soft) +Instance-level precision: 60.13 (Levenshtein) +Instance-level precision: 56.79 (RatcliffObershelp) -Instance-level recall: 44.34 (strict) -Instance-level recall: 55.44 (soft) -Instance-level recall: 59.69 (Levenshtein) -Instance-level recall: 56.37 (RatcliffObershelp) +Instance-level recall: 44.3 (strict) +Instance-level recall: 55.44 (soft) +Instance-level recall: 59.69 (Levenshtein) +Instance-level recall: 56.37 (RatcliffObershelp) -Instance-level f-score: 44.5 (strict) -Instance-level f-score: 55.65 (soft) -Instance-level f-score: 59.91 (Levenshtein) -Instance-level f-score: 56.58 (RatcliffObershelp) +Instance-level f-score: 44.47 (strict) +Instance-level f-score: 55.65 (soft) +Instance-level f-score: 59.91 (Levenshtein) +Instance-level f-score: 56.58 (RatcliffObershelp) -Matching 1 : 79286 +Matching 1 : 79296 -Matching 2 : 4449 +Matching 2 : 4442 -Matching 3 : 4366 +Matching 3 : 4371 -Matching 4 : 2086 +Matching 4 : 2084 -Total matches : 90187 +Total matches : 90193 ``` #### Citation context resolution ``` -Total expected references: 98797 - 49.4 references per article -Total predicted references: 98068 - 49.03 references per article +Total expected references: 98797 - 49.4 references per article +Total predicted references: 98068 - 49.03 references per article -Total expected citation contexts: 142862 - 71.43 citation contexts per article -Total predicted citation contexts: 135679 - 67.84 citation contexts per article +Total expected citation contexts: 142862 - 71.43 citation contexts per article +Total predicted citation contexts: 135692 - 67.85 citation contexts per article -Total correct predicted citation contexts: 116704 - 58.35 citation contexts per article -Total wrong predicted citation contexts: 18975 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) +Total correct predicted citation contexts: 116736 - 58.37 citation contexts per article +Total wrong predicted citation contexts: 18956 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) -Precision citation contexts: 86.01 -Recall citation contexts: 81.69 -fscore citation contexts: 83.8 +Precision citation contexts: 86.03 +Recall citation contexts: 81.71 +fscore citation contexts: 83.82 ``` + ## Fulltext structures Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. -Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). + +Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -261,16 +277,18 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| availability_stmt | 0 | 0 | 0 | 0 | -| figure_title | 4.24 | 2.01 | 2.72 | 22978 | -| reference_citation | 71.04 | 71.33 | 71.18 | 147470 | -| reference_figure | 70.59 | 67.74 | 69.13 | 47984 | -| reference_table | 48.12 | 83.06 | 60.94 | 5957 | -| section_title | 72.6 | 69.59 | 71.07 | 32399 | -| table_title | 4.34 | 2.88 | 3.46 | 3925 | +| availability_stmt | 29.95 | 25.78 | 27.71 | 446 | +| figure_title | 4.23 | 2.01 | 2.72 | 22978 | +| funding_stmt | 4.16 | 24.43 | 7.11 | 745 | +| reference_citation | 71.05 | 71.33 | 71.19 | 147470 | +| reference_figure | 70.59 | 67.74 | 69.14 | 47984 | +| reference_table | 48.11 | 83.03 | 60.92 | 5957 | +| section_title | 72.59 | 69.6 | 71.06 | 32398 | +| table_title | 4.31 | 2.85 | 3.43 | 3925 | | | | | | | -| **all fields (micro avg.)** | **66.59** | **63.58** | **65.05** | 260713 | -| all fields (macro avg.) | 45.16 | 49.43 | 46.42 | 260713 | +| **all fields (micro avg.)** | **65.46** | **63.41** | **64.42** | 261903 | +| all fields (macro avg.) | 38.12 | 43.35 | 39.16 | 261903 | + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -279,14 +297,28 @@ Evaluation on 2000 random PDF files out of 2000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| availability_stmt | 0 | 0 | 0 | 0 | -| figure_title | 69.47 | 32.89 | 44.65 | 22978 | -| reference_citation | 83.03 | 83.37 | 83.2 | 147470 | -| reference_figure | 71.21 | 68.34 | 69.75 | 47984 | -| reference_table | 48.57 | 83.83 | 61.51 | 5957 | -| section_title | 76.48 | 73.31 | 74.87 | 32399 | -| table_title | 51.4 | 34.09 | 40.99 | 3925 | +| availability_stmt | 50.52 | 43.5 | 46.75 | 446 | +| figure_title | 69.47 | 32.91 | 44.67 | 22978 | +| funding_stmt | 4.37 | 25.64 | 7.46 | 745 | +| reference_citation | 83.04 | 83.37 | 83.21 | 147470 | +| reference_figure | 71.22 | 68.34 | 69.75 | 47984 | +| reference_table | 48.56 | 83.8 | 61.49 | 5957 | +| section_title | 76.47 | 73.32 | 74.86 | 32398 | +| table_title | 51.44 | 34.06 | 40.99 | 3925 | +| | | | | | +| **all fields (micro avg.)** | **76.38** | **73.99** | **75.17** | 261903 | +| all fields (macro avg.) | 56.89 | 55.62 | 53.65 | 261903 | + + +**Document-level ratio results** + +| label | precision | recall | f1 | support | +|--- |--- |--- |--- |--- | +| availability_stmt | 84.77 | 86.1 | 85.43 | 446 | | | | | | | -| **all fields (micro avg.)** | **77.68** | **74.17** | **75.89** | 260713 | -| all fields (macro avg.) | 66.7 | 62.64 | 62.49 | 260713 | +| **all fields (micro avg.)** | **84.77** | **86.1** | **85.43** | 446 | +| all fields (macro avg.) | 84.77 | 86.1 | 85.43 | 446 | + +Evaluation metrics produced in 773.926 seconds + diff --git a/doc/Benchmarking-elife.md b/doc/Benchmarking-elife.md index 964e03ff86..0eb3ebf515 100644 --- a/doc/Benchmarking-elife.md +++ b/doc/Benchmarking-elife.md @@ -2,7 +2,7 @@ ## General -This is the end-to-end benchmarking result for GROBID version **0.7.3** against the `eLife` test set, see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. +This is the end-to-end benchmarking result for GROBID version **0.8.1** against the `eLife` test set, see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. The following end-to-end results are using: @@ -22,14 +22,14 @@ Other versions of these benchmarks with variants and **Deep Learning models** (e Evaluation on 984 PDF preprints out of 984 (no failure). -Runtime for processing 984 PDF: **2002s** (2.03 seconds per PDF) on Ubuntu 16.04, 4 CPU i7-4790K (8 threads), 16GB RAM (workstation bought in 2015 for 1600 euros) and with a GeForce GTX 1050 Ti GPU. +Runtime for processing 984 PDF: **1131** seconds (1.15 seconds per PDF file) on Ubuntu 22.04, 16 CPU (32 threads), 128GB RAM and with a GeForce GTX 1080 Ti GPU. -Note: with CRF only models runtime is 492s (0.50 seconds per PDF). +Note: with CRF only models runtime is 492s (0.50 seconds per PDF) with 4GPU, 8 threads. ## Header metadata -Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -37,13 +37,13 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| abstract | 9.39 | 8.94 | 9.16 | 984 | -| authors | 72.68 | 72.53 | 72.61 | 983 | -| first_author | 91.03 | 90.94 | 90.98 | 982 | -| title | 86.84 | 86.48 | 86.66 | 984 | +| abstract | 9.44 | 9.16 | 9.3 | 983 | +| authors | 74.28 | 73.52 | 73.9 | 982 | +| first_author | 92.39 | 91.54 | 91.96 | 981 | +| title | 86.81 | 85.05 | 85.92 | 983 | | | | | | | -| **all fields (micro avg.)** | **65.61** | **64.71** | **65.16** | 3933 | -| all fields (macro avg.) | 64.98 | 64.72 | 64.85 | 3933 | +| **all fields (micro avg.)** | **65.96** | **64.8** | **65.37** | 3929 | +| all fields (macro avg.) | 65.73 | 64.82 | 65.27 | 3929 | @@ -53,13 +53,13 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| abstract | 24.12 | 22.97 | 23.53 | 984 | -| authors | 72.88 | 72.74 | 72.81 | 983 | -| first_author | 91.03 | 90.94 | 90.98 | 982 | -| title | 95 | 94.61 | 94.81 | 984 | +| abstract | 22.46 | 21.77 | 22.11 | 983 | +| authors | 74.59 | 73.83 | 74.21 | 982 | +| first_author | 92.39 | 91.54 | 91.96 | 981 | +| title | 94.81 | 92.88 | 93.83 | 983 | | | | | | | -| **all fields (micro avg.)** | **71.28** | **70.3** | **70.79** | 3933 | -| all fields (macro avg.) | 70.76 | 70.31 | 70.53 | 3933 | +| **all fields (micro avg.)** | **71.24** | **69.99** | **70.61** | 3929 | +| all fields (macro avg.) | 71.06 | 70 | 70.53 | 3929 | @@ -69,13 +69,13 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| abstract | 48.67 | 46.34 | 47.48 | 984 | -| authors | 86.34 | 86.16 | 86.25 | 983 | -| first_author | 91.34 | 91.24 | 91.29 | 982 | -| title | 96.33 | 95.93 | 96.13 | 984 | +| abstract | 47.53 | 46.08 | 46.8 | 983 | +| authors | 88.17 | 87.27 | 87.72 | 982 | +| first_author | 92.7 | 91.85 | 92.27 | 981 | +| title | 96.26 | 94.3 | 95.27 | 983 | | | | | | | -| **all fields (micro avg.)** | **81.03** | **79.91** | **80.47** | 3933 | -| all fields (macro avg.) | 80.67 | 79.92 | 80.29 | 3933 | +| **all fields (micro avg.)** | **81.3** | **79.87** | **80.58** | 3929 | +| all fields (macro avg.) | 81.16 | 79.88 | 80.51 | 3929 | @@ -85,33 +85,34 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| abstract | 46.53 | 44.31 | 45.39 | 984 | -| authors | 78.29 | 78.13 | 78.21 | 983 | -| first_author | 91.03 | 90.94 | 90.98 | 982 | -| title | 96.33 | 95.93 | 96.13 | 984 | +| abstract | 44.49 | 43.13 | 43.8 | 983 | +| authors | 79.94 | 79.12 | 79.53 | 982 | +| first_author | 92.39 | 91.54 | 91.96 | 981 | +| title | 96.26 | 94.3 | 95.27 | 983 | | | | | | | -| **all fields (micro avg.)** | **78.4** | **77.32** | **77.85** | 3933 | -| all fields (macro avg.) | 78.04 | 77.33 | 77.68 | 3933 | +| **all fields (micro avg.)** | **78.39** | **77.02** | **77.7** | 3929 | +| all fields (macro avg.) | 78.27 | 77.02 | 77.64 | 3929 | #### Instance-level results ``` -Total expected instances: 984 -Total correct instances: 75 (strict) -Total correct instances: 212 (soft) -Total correct instances: 383 (Levenshtein) -Total correct instances: 341 (ObservedRatcliffObershelp) - -Instance-level recall: 7.62 (strict) -Instance-level recall: 21.54 (soft) -Instance-level recall: 38.92 (Levenshtein) -Instance-level recall: 34.65 (RatcliffObershelp) +Total expected instances: 983 +Total correct instances: 73 (strict) +Total correct instances: 198 (soft) +Total correct instances: 377 (Levenshtein) +Total correct instances: 335 (ObservedRatcliffObershelp) + +Instance-level recall: 7.43 (strict) +Instance-level recall: 20.14 (soft) +Instance-level recall: 38.35 (Levenshtein) +Instance-level recall: 34.08 (RatcliffObershelp) ``` + ## Citation metadata -Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -119,17 +120,17 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 79.39 | 78.17 | 78.78 | 63265 | -| date | 95.86 | 93.99 | 94.92 | 63662 | -| first_author | 94.76 | 93.27 | 94.01 | 63265 | -| inTitle | 95.76 | 94.66 | 95.21 | 63213 | -| issue | 1.99 | 75 | 3.87 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53375 | -| title | 90.42 | 90.84 | 90.63 | 62044 | -| volume | 97.86 | 98.17 | 98.01 | 61049 | +| authors | 79.4 | 78.19 | 78.79 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 94.76 | 93.28 | 94.02 | 63170 | +| inTitle | 95.77 | 94.68 | 95.22 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 90.25 | 90.68 | 90.47 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | | | | | | | -| **all fields (micro avg.)** | **92.69** | **91.94** | **92.31** | 429889 | -| all fields (macro avg.) | 81.54 | 89.91 | 81.39 | 429889 | +| **all fields (micro avg.)** | **92.66** | **91.93** | **92.29** | 429249 | +| all fields (macro avg.) | 81.52 | 89.9 | 81.38 | 429249 | @@ -139,17 +140,17 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 79.53 | 78.31 | 78.91 | 63265 | -| date | 95.86 | 93.99 | 94.92 | 63662 | -| first_author | 94.84 | 93.35 | 94.09 | 63265 | -| inTitle | 96.24 | 95.13 | 95.68 | 63213 | -| issue | 1.99 | 75 | 3.87 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53375 | -| title | 95.92 | 96.37 | 96.14 | 62044 | -| volume | 97.86 | 98.17 | 98.01 | 61049 | +| authors | 79.54 | 78.33 | 78.93 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 94.84 | 93.36 | 94.1 | 63170 | +| inTitle | 96.25 | 95.15 | 95.7 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 95.92 | 96.38 | 96.15 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | | | | | | | -| **all fields (micro avg.)** | **93.59** | **92.84** | **93.22** | 429889 | -| all fields (macro avg.) | 82.31 | 90.69 | 82.17 | 429889 | +| **all fields (micro avg.)** | **93.59** | **92.85** | **93.22** | 429249 | +| all fields (macro avg.) | 82.31 | 90.7 | 82.17 | 429249 | @@ -159,17 +160,17 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 93.27 | 91.83 | 92.55 | 63265 | -| date | 95.86 | 93.99 | 94.92 | 63662 | -| first_author | 95.29 | 93.79 | 94.54 | 63265 | -| inTitle | 96.57 | 95.46 | 96.01 | 63213 | -| issue | 1.99 | 75 | 3.87 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53375 | -| title | 97.65 | 98.11 | 97.88 | 62044 | -| volume | 97.86 | 98.17 | 98.01 | 61049 | +| authors | 93.29 | 91.87 | 92.58 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 95.29 | 93.8 | 94.54 | 63170 | +| inTitle | 96.58 | 95.47 | 96.02 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 97.66 | 98.12 | 97.89 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | | | | | | | -| **all fields (micro avg.)** | **95.97** | **95.2** | **95.58** | 429889 | -| all fields (macro avg.) | 84.34 | 92.69 | 84.19 | 429889 | +| **all fields (micro avg.)** | **95.97** | **95.21** | **95.59** | 429249 | +| all fields (macro avg.) | 84.35 | 92.7 | 84.19 | 429249 | @@ -179,71 +180,71 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 86.69 | 85.36 | 86.02 | 63265 | -| date | 95.86 | 93.99 | 94.92 | 63662 | -| first_author | 94.78 | 93.29 | 94.03 | 63265 | -| inTitle | 96.25 | 95.14 | 95.69 | 63213 | -| issue | 1.99 | 75 | 3.87 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53375 | -| title | 97.5 | 97.96 | 97.73 | 62044 | -| volume | 97.86 | 98.17 | 98.01 | 61049 | +| authors | 86.71 | 85.39 | 86.05 | 63170 | +| date | 95.86 | 93.99 | 94.91 | 63567 | +| first_author | 94.78 | 93.3 | 94.03 | 63170 | +| inTitle | 96.25 | 95.16 | 95.7 | 63118 | +| issue | 1.99 | 75 | 3.88 | 16 | +| page | 96.26 | 95.2 | 95.72 | 53303 | +| title | 97.5 | 97.97 | 97.74 | 61950 | +| volume | 97.85 | 98.17 | 98.01 | 60955 | | | | | | | -| **all fields (micro avg.)** | **94.86** | **94.1** | **94.48** | 429889 | -| all fields (macro avg.) | 83.4 | 91.76 | 83.25 | 429889 | +| **all fields (micro avg.)** | **94.87** | **94.11** | **94.49** | 429249 | +| all fields (macro avg.) | 83.4 | 91.77 | 83.26 | 429249 | #### Instance-level results ``` -Total expected instances: 63664 -Total extracted instances: 66480 -Total correct instances: 42383 (strict) -Total correct instances: 45147 (soft) -Total correct instances: 52790 (Levenshtein) -Total correct instances: 49397 (RatcliffObershelp) +Total expected instances: 63569 +Total extracted instances: 66388 +Total correct instances: 42246 (strict) +Total correct instances: 45085 (soft) +Total correct instances: 52715 (Levenshtein) +Total correct instances: 49331 (RatcliffObershelp) -Instance-level precision: 63.75 (strict) -Instance-level precision: 67.91 (soft) -Instance-level precision: 79.41 (Levenshtein) -Instance-level precision: 74.3 (RatcliffObershelp) +Instance-level precision: 63.63 (strict) +Instance-level precision: 67.91 (soft) +Instance-level precision: 79.4 (Levenshtein) +Instance-level precision: 74.31 (RatcliffObershelp) -Instance-level recall: 66.57 (strict) -Instance-level recall: 70.91 (soft) -Instance-level recall: 82.92 (Levenshtein) -Instance-level recall: 77.59 (RatcliffObershelp) +Instance-level recall: 66.46 (strict) +Instance-level recall: 70.92 (soft) +Instance-level recall: 82.93 (Levenshtein) +Instance-level recall: 77.6 (RatcliffObershelp) -Instance-level f-score: 65.13 (strict) -Instance-level f-score: 69.38 (soft) -Instance-level f-score: 81.13 (Levenshtein) -Instance-level f-score: 75.91 (RatcliffObershelp) +Instance-level f-score: 65.02 (strict) +Instance-level f-score: 69.38 (soft) +Instance-level f-score: 81.13 (Levenshtein) +Instance-level f-score: 75.92 (RatcliffObershelp) -Matching 1 : 58594 +Matching 1 : 58505 -Matching 2 : 1015 +Matching 2 : 1012 -Matching 3 : 1241 +Matching 3 : 1242 -Matching 4 : 367 +Matching 4 : 371 -Total matches : 61217 +Total matches : 61130 ``` #### Citation context resolution ``` -Total expected references: 63664 - 64.7 references per article -Total predicted references: 66480 - 67.56 references per article +Total expected references: 63569 - 64.67 references per article +Total predicted references: 66388 - 67.54 references per article -Total expected citation contexts: 109022 - 110.79 citation contexts per article -Total predicted citation contexts: 99415 - 101.03 citation contexts per article +Total expected citation contexts: 108880 - 110.76 citation contexts per article +Total predicted citation contexts: 99284 - 101 citation contexts per article -Total correct predicted citation contexts: 95626 - 97.18 citation contexts per article -Total wrong predicted citation contexts: 3789 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) +Total correct predicted citation contexts: 95494 - 97.15 citation contexts per article +Total wrong predicted citation contexts: 3790 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) -Precision citation contexts: 96.19 -Recall citation contexts: 87.71 -fscore citation contexts: 91.76 +Precision citation contexts: 96.18 +Recall citation contexts: 87.71 +fscore citation contexts: 91.75 ``` @@ -252,7 +253,7 @@ fscore citation contexts: 91.76 Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. -Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). +Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -260,17 +261,17 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| availability_stmt | 28.79 | 25.64 | 27.12 | 585 | -| figure_title | 0.02 | 0.01 | 0.01 | 31718 | -| funding_stmt | 12.03 | 24 | 16.03 | 921 | -| reference_citation | 55.45 | 55.66 | 55.56 | 108949 | -| reference_figure | 56.74 | 49.86 | 53.08 | 68926 | -| reference_table | 68.27 | 73.46 | 70.77 | 2381 | -| section_title | 85.2 | 74.2 | 79.32 | 21831 | -| table_title | 0.45 | 0.16 | 0.23 | 1925 | +| availability_stmt | 29.94 | 26.71 | 28.24 | 584 | +| figure_title | 0.02 | 0.01 | 0.01 | 31671 | +| funding_stmt | 4.77 | 23.8 | 7.95 | 920 | +| reference_citation | 55.46 | 55.67 | 55.56 | 108807 | +| reference_figure | 56.78 | 49.91 | 53.12 | 68786 | +| reference_table | 68.24 | 73.46 | 70.75 | 2381 | +| section_title | 85.17 | 74.17 | 79.29 | 21808 | +| table_title | 0.45 | 0.16 | 0.23 | 1924 | | | | | | | -| **all fields (micro avg.)** | **55.46** | **47.77** | **51.33** | 237236 | -| all fields (macro avg.) | 38.37 | 37.87 | 37.76 | 237236 | +| **all fields (micro avg.)** | **54.74** | **47.79** | **51.03** | 236881 | +| all fields (macro avg.) | 37.6 | 37.99 | 36.89 | 236881 | @@ -280,26 +281,29 @@ Evaluation on 984 random PDF files out of 984 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| availability_stmt | 38.77 | 34.53 | 36.53 | 585 | -| figure_title | 48.83 | 15.12 | 23.09 | 31718 | -| funding_stmt | 12.03 | 24 | 16.03 | 921 | -| reference_citation | 91.02 | 91.37 | 91.2 | 108949 | -| reference_figure | 57.02 | 50.1 | 53.34 | 68926 | -| reference_table | 68.35 | 73.54 | 70.85 | 2381 | -| section_title | 86.08 | 74.96 | 80.13 | 21831 | -| table_title | 80.63 | 27.9 | 41.45 | 1925 | +| availability_stmt | 38.96 | 34.76 | 36.74 | 584 | +| figure_title | 48.86 | 15.12 | 23.09 | 31671 | +| funding_stmt | 4.77 | 23.8 | 7.95 | 920 | +| reference_citation | 91.04 | 91.38 | 91.21 | 108807 | +| reference_figure | 57.06 | 50.16 | 53.39 | 68786 | +| reference_table | 68.32 | 73.54 | 70.83 | 2381 | +| section_title | 86.05 | 74.93 | 80.1 | 21808 | +| table_title | 80.63 | 27.91 | 41.47 | 1924 | | | | | | | -| **all fields (micro avg.)** | **77.3** | **66.58** | **71.54** | 237236 | -| all fields (macro avg.) | 60.34 | 48.94 | 51.58 | 237236 | +| **all fields (micro avg.)** | **76.29** | **66.6** | **71.12** | 236881 | +| all fields (macro avg.) | 59.46 | 48.95 | 50.6 | 236881 | **Document-level ratio results** | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| availability_stmt | 96.3 | 89.06 | 92.54 | 585 | +| availability_stmt | 96.3 | 89.21 | 92.62 | 584 | | | | | | | -| **all fields (micro avg.)** | **96.3** | **89.06** | **92.54** | 585 | -| all fields (macro avg.) | 96.3 | 89.06 | 92.54 | 585 | +| **all fields (micro avg.)** | **96.3** | **89.21** | **92.62** | 584 | +| all fields (macro avg.) | 96.3 | 89.21 | 92.62 | 584 | + +Evaluation metrics produced in 640.707 seconds + diff --git a/doc/Benchmarking-plos.md b/doc/Benchmarking-plos.md index c3920a13b3..c6a71b2df3 100644 --- a/doc/Benchmarking-plos.md +++ b/doc/Benchmarking-plos.md @@ -2,7 +2,7 @@ ## General -This is the end-to-end benchmarking result for GROBID version **0.7.3** against the `PLOS` test set, see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. +This is the end-to-end benchmarking result for GROBID version **0.8.1** against the `PLOS` test set, see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. The following end-to-end results are using: @@ -22,14 +22,14 @@ Other versions of these benchmarks with variants and **Deep Learning models** (e Evaluation on 1000 PDF preprints out of 1000 (no failure). -Runtime for processing 1000 PDF: **1831s** (1.83 second per PDF) on Ubuntu 16.04, 4 CPU i7-4790K (8 threads), 16GB RAM (workstation bought in 2015 for 1600 euros) and with a GeForce GTX 1050 Ti GPU. +Runtime for processing 1000 PDF: **999** seconds, (0.99 seconds per PDF) on Ubuntu 22.04, 16 CPU (32 threads), 128GB RAM and with a GeForce GTX 1080 Ti GPU. -Note: with CRF only models runtime is 304s (0.30 seconds per PDF). +Note: with CRF only models runtime is 304s (0.30 seconds per PDF) with 4GPU, 8 threads. ## Header metadata -Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -38,13 +38,15 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 13.58 | 13.65 | 13.61 | 960 | -| authors | 98.97 | 99.07 | 99.02 | 969 | -| first_author | 99.28 | 99.38 | 99.33 | 969 | +| authors | 98.87 | 98.97 | 98.92 | 969 | +| first_author | 99.18 | 99.28 | 99.23 | 969 | | keywords | 0 | 0 | 0 | 0 | -| title | 95.65 | 94.5 | 95.07 | 1000 | +| title | 95.75 | 94.6 | 95.17 | 1000 | | | | | | | -| **all fields (micro avg.)** | **77.04** | **76.94** | **76.99** | 3898 | -| all fields (macro avg.) | 76.87 | 76.65 | 76.76 | 3898 | +| **all fields (micro avg.)** | **77.01** | **76.91** | **76.96** | 3898 | +| all fields (macro avg.) | 76.84 | 76.62 | 76.73 | 3898 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -53,13 +55,15 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 50.57 | 50.83 | 50.7 | 960 | -| authors | 98.97 | 99.07 | 99.02 | 969 | -| first_author | 99.28 | 99.38 | 99.33 | 969 | +| authors | 98.87 | 98.97 | 98.92 | 969 | +| first_author | 99.18 | 99.28 | 99.23 | 969 | | keywords | 0 | 0 | 0 | 0 | -| title | 99.29 | 98.1 | 98.69 | 1000 | +| title | 99.39 | 98.2 | 98.79 | 1000 | | | | | | | -| **all fields (micro avg.)** | **87.13** | **87.02** | **87.07** | 3898 | -| all fields (macro avg.) | 87.03 | 86.85 | 86.94 | 3898 | +| **all fields (micro avg.)** | **87.11** | **86.99** | **87.05** | 3898 | +| all fields (macro avg.) | 87 | 86.82 | 86.91 | 3898 | + + #### Levenshtein Matching (Minimum Levenshtein distance at 0.8) @@ -69,12 +73,14 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). |--- |--- |--- |--- |--- | | abstract | 76.68 | 77.08 | 76.88 | 960 | | authors | 99.28 | 99.38 | 99.33 | 969 | -| first_author | 99.38 | 99.48 | 99.43 | 969 | +| first_author | 99.28 | 99.38 | 99.33 | 969 | | keywords | 0 | 0 | 0 | 0 | | title | 99.7 | 98.5 | 99.09 | 1000 | | | | | | | -| **all fields (micro avg.)** | **93.81** | **93.69** | **93.75** | 3898 | -| all fields (macro avg.) | 93.76 | 93.61 | 93.68 | 3898 | +| **all fields (micro avg.)** | **93.78** | **93.66** | **93.72** | 3898 | +| all fields (macro avg.) | 93.73 | 93.59 | 93.66 | 3898 | + + #### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) @@ -84,32 +90,33 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). |--- |--- |--- |--- |--- | | abstract | 66.94 | 67.29 | 67.12 | 960 | | authors | 99.18 | 99.28 | 99.23 | 969 | -| first_author | 99.28 | 99.38 | 99.33 | 969 | +| first_author | 99.18 | 99.28 | 99.23 | 969 | | keywords | 0 | 0 | 0 | 0 | | title | 99.49 | 98.3 | 98.89 | 1000 | | | | | | | -| **all fields (micro avg.)** | **91.29** | **91.17** | **91.23** | 3898 | -| all fields (macro avg.) | 91.22 | 91.06 | 91.14 | 3898 | +| **all fields (micro avg.)** | **91.27** | **91.15** | **91.21** | 3898 | +| all fields (macro avg.) | 91.2 | 91.04 | 91.12 | 3898 | #### Instance-level results ``` -Total expected instances: 1000 -Total correct instances: 139 (strict) -Total correct instances: 488 (soft) -Total correct instances: 727 (Levenshtein) -Total correct instances: 643 (ObservedRatcliffObershelp) - -Instance-level recall: 13.9 (strict) -Instance-level recall: 48.8 (soft) -Instance-level recall: 72.7 (Levenshtein) -Instance-level recall: 64.3 (RatcliffObershelp) +Total expected instances: 1000 +Total correct instances: 139 (strict) +Total correct instances: 487 (soft) +Total correct instances: 726 (Levenshtein) +Total correct instances: 642 (ObservedRatcliffObershelp) + +Instance-level recall: 13.9 (strict) +Instance-level recall: 48.7 (soft) +Instance-level recall: 72.6 (Levenshtein) +Instance-level recall: 64.2 (RatcliffObershelp) ``` + ## Citation metadata -Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -117,17 +124,19 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 81.18 | 78.43 | 79.78 | 44770 | -| date | 84.62 | 81.24 | 82.9 | 45457 | -| first_author | 91.48 | 88.35 | 89.88 | 44770 | -| inTitle | 81.67 | 83.57 | 82.61 | 42795 | -| issue | 93.63 | 92.68 | 93.15 | 18983 | -| page | 93.69 | 77.57 | 84.87 | 40844 | -| title | 60.02 | 60.53 | 60.28 | 43101 | +| authors | 81.17 | 78.43 | 79.78 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 91.47 | 88.34 | 89.88 | 44770 | +| inTitle | 81.67 | 83.58 | 82.61 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 59.97 | 60.47 | 60.22 | 43101 | | volume | 95.89 | 96.11 | 96 | 40458 | | | | | | | -| **all fields (micro avg.)** | **84.24** | **81.45** | **82.82** | 321178 | -| all fields (macro avg.) | 85.27 | 82.31 | 83.68 | 321178 | +| **all fields (micro avg.)** | **84.23** | **81.45** | **82.81** | 321178 | +| all fields (macro avg.) | 85.26 | 82.3 | 83.67 | 321178 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -136,34 +145,38 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | authors | 81.49 | 78.73 | 80.09 | 44770 | -| date | 84.62 | 81.24 | 82.9 | 45457 | -| first_author | 91.69 | 88.56 | 90.1 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 91.69 | 88.55 | 90.09 | 44770 | | inTitle | 85.51 | 87.5 | 86.49 | 42795 | -| issue | 93.63 | 92.68 | 93.15 | 18983 | -| page | 93.69 | 77.57 | 84.87 | 40844 | -| title | 91.97 | 92.75 | 92.36 | 43101 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 91.95 | 92.74 | 92.34 | 43101 | | volume | 95.89 | 96.11 | 96 | 40458 | | | | | | | -| **all fields (micro avg.)** | **89.33** | **86.37** | **87.82** | 321178 | +| **all fields (micro avg.)** | **89.32** | **86.37** | **87.82** | 321178 | | all fields (macro avg.) | 89.81 | 86.89 | 88.24 | 321178 | + + #### Levenshtein Matching (Minimum Levenshtein distance at 0.8) **Field-level results** | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 90.65 | 87.58 | 89.08 | 44770 | -| date | 84.62 | 81.24 | 82.9 | 45457 | -| first_author | 92.23 | 89.08 | 90.63 | 44770 | -| inTitle | 86.46 | 88.47 | 87.45 | 42795 | -| issue | 93.63 | 92.68 | 93.15 | 18983 | -| page | 93.69 | 77.57 | 84.87 | 40844 | -| title | 94.57 | 95.37 | 94.97 | 43101 | +| authors | 90.64 | 87.57 | 89.08 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 92.23 | 89.08 | 90.62 | 44770 | +| inTitle | 86.45 | 88.47 | 87.45 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | +| title | 94.56 | 95.37 | 94.96 | 43101 | | volume | 95.89 | 96.11 | 96 | 40458 | | | | | | | | **all fields (micro avg.)** | **91.17** | **88.16** | **89.64** | 321178 | -| all fields (macro avg.) | 91.47 | 88.51 | 89.88 | 321178 | +| all fields (macro avg.) | 91.46 | 88.51 | 89.88 | 321178 | + + #### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) @@ -171,12 +184,12 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 84.94 | 82.06 | 83.47 | 44770 | -| date | 84.62 | 81.24 | 82.9 | 45457 | -| first_author | 91.48 | 88.35 | 89.88 | 44770 | -| inTitle | 85.16 | 87.14 | 86.14 | 42795 | -| issue | 93.63 | 92.68 | 93.15 | 18983 | -| page | 93.69 | 77.57 | 84.87 | 40844 | +| authors | 84.94 | 82.06 | 83.48 | 44770 | +| date | 84.61 | 81.24 | 82.89 | 45457 | +| first_author | 91.47 | 88.34 | 89.88 | 44770 | +| inTitle | 85.16 | 87.15 | 86.14 | 42795 | +| issue | 93.62 | 92.68 | 93.15 | 18983 | +| page | 93.7 | 77.57 | 84.87 | 40844 | | title | 93.95 | 94.74 | 94.34 | 43101 | | volume | 95.89 | 96.11 | 96 | 40458 | | | | | | | @@ -187,55 +200,55 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). #### Instance-level results ``` -Total expected instances: 48449 -Total extracted instances: 48250 -Total correct instances: 13512 (strict) -Total correct instances: 22263 (soft) -Total correct instances: 24909 (Levenshtein) -Total correct instances: 23261 (RatcliffObershelp) +Total expected instances: 48449 +Total extracted instances: 48250 +Total correct instances: 13496 (strict) +Total correct instances: 22269 (soft) +Total correct instances: 24916 (Levenshtein) +Total correct instances: 23272 (RatcliffObershelp) -Instance-level precision: 28 (strict) -Instance-level precision: 46.14 (soft) -Instance-level precision: 51.62 (Levenshtein) -Instance-level precision: 48.21 (RatcliffObershelp) +Instance-level precision: 27.97 (strict) +Instance-level precision: 46.15 (soft) +Instance-level precision: 51.64 (Levenshtein) +Instance-level precision: 48.23 (RatcliffObershelp) -Instance-level recall: 27.89 (strict) -Instance-level recall: 45.95 (soft) -Instance-level recall: 51.41 (Levenshtein) -Instance-level recall: 48.01 (RatcliffObershelp) +Instance-level recall: 27.86 (strict) +Instance-level recall: 45.96 (soft) +Instance-level recall: 51.43 (Levenshtein) +Instance-level recall: 48.03 (RatcliffObershelp) -Instance-level f-score: 27.95 (strict) -Instance-level f-score: 46.05 (soft) -Instance-level f-score: 51.52 (Levenshtein) -Instance-level f-score: 48.11 (RatcliffObershelp) +Instance-level f-score: 27.91 (strict) +Instance-level f-score: 46.06 (soft) +Instance-level f-score: 51.53 (Levenshtein) +Instance-level f-score: 48.13 (RatcliffObershelp) -Matching 1 : 35372 +Matching 1 : 35369 -Matching 2 : 1257 +Matching 2 : 1260 -Matching 3 : 3268 +Matching 3 : 3266 -Matching 4 : 1799 +Matching 4 : 1800 -Total matches : 41696 +Total matches : 41695 ``` #### Citation context resolution ``` -Total expected references: 48449 - 48.45 references per article -Total predicted references: 48250 - 48.25 references per article +Total expected references: 48449 - 48.45 references per article +Total predicted references: 48250 - 48.25 references per article -Total expected citation contexts: 69755 - 69.75 citation contexts per article -Total predicted citation contexts: 73696 - 73.7 citation contexts per article +Total expected citation contexts: 69755 - 69.75 citation contexts per article +Total predicted citation contexts: 73696 - 73.7 citation contexts per article -Total correct predicted citation contexts: 56769 - 56.77 citation contexts per article -Total wrong predicted citation contexts: 16927 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) +Total correct predicted citation contexts: 56772 - 56.77 citation contexts per article +Total wrong predicted citation contexts: 16924 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) -Precision citation contexts: 77.03 -Recall citation contexts: 81.38 -fscore citation contexts: 79.15 +Precision citation contexts: 77.04 +Recall citation contexts: 81.39 +fscore citation contexts: 79.15 ``` @@ -243,7 +256,8 @@ fscore citation contexts: 79.15 Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. -Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). + +Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -251,17 +265,19 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| availability_stmt | 50.87 | 49.04 | 49.93 | 779 | +| availability_stmt | 54.06 | 52.12 | 53.07 | 779 | | figure_title | 2.11 | 0.92 | 1.28 | 8943 | -| funding_stmt | 49.49 | 35.17 | 41.12 | 1507 | +| funding_stmt | 5.27 | 28.14 | 8.88 | 1507 | | reference_citation | 86.69 | 94.65 | 90.49 | 69741 | -| reference_figure | 72.05 | 54.06 | 61.77 | 11010 | +| reference_figure | 72.06 | 54.06 | 61.77 | 11010 | | reference_table | 84.28 | 92.07 | 88 | 5159 | -| section_title | 77.18 | 65.8 | 71.04 | 17540 | -| table_title | 1.13 | 0.59 | 0.78 | 6092 | +| section_title | 77.18 | 65.8 | 71.03 | 17540 | +| table_title | 1.13 | 0.59 | 0.77 | 6092 | | | | | | | -| **all fields (micro avg.)** | **78.38** | **73.93** | **76.09** | 120771 | -| all fields (macro avg.) | 52.97 | 49.04 | 50.55 | 120771 | +| **all fields (micro avg.)** | **73.79** | **73.86** | **73.82** | 120771 | +| all fields (macro avg.) | 47.85 | 48.54 | 46.91 | 120771 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -270,16 +286,17 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | availability_stmt | 79.36 | 76.51 | 77.91 | 779 | -| figure_title | 81.2 | 35.36 | 49.26 | 8943 | -| funding_stmt | 56.4 | 40.08 | 46.86 | 1507 | -| reference_citation | 86.7 | 94.66 | 90.5 | 69741 | -| reference_figure | 72.51 | 54.41 | 62.17 | 11010 | +| figure_title | 81.17 | 35.33 | 49.24 | 8943 | +| funding_stmt | 6.89 | 36.76 | 11.6 | 1507 | +| reference_citation | 86.7 | 94.66 | 90.51 | 69741 | +| reference_figure | 72.52 | 54.41 | 62.17 | 11010 | | reference_table | 84.46 | 92.27 | 88.19 | 5159 | -| section_title | 78.17 | 66.65 | 71.96 | 17540 | -| table_title | 15.98 | 8.39 | 11 | 6092 | +| section_title | 78.17 | 66.65 | 71.95 | 17540 | +| table_title | 15.97 | 8.39 | 11 | 6092 | | | | | | | -| **all fields (micro avg.)** | **81.93** | **77.28** | **79.54** | 120771 | -| all fields (macro avg.) | 69.35 | 58.54 | 62.23 | 120771 | +| **all fields (micro avg.)** | **77.16** | **77.24** | **77.2** | 120771 | +| all fields (macro avg.) | 63.16 | 58.12 | 57.82 | 120771 | + **Document-level ratio results** @@ -290,5 +307,5 @@ Evaluation on 1000 random PDF files out of 1000 PDF (ratio 1.0). | **all fields (micro avg.)** | **99.47** | **96.41** | **97.91** | 779 | | all fields (macro avg.) | 99.47 | 96.41 | 97.91 | 779 | -Evaluation metrics produced in 555.701 seconds +Evaluation metrics produced in 396.908 seconds diff --git a/doc/Benchmarking-pmc.md b/doc/Benchmarking-pmc.md index adfc7ed7d4..83b0ecb2a9 100644 --- a/doc/Benchmarking-pmc.md +++ b/doc/Benchmarking-pmc.md @@ -2,7 +2,7 @@ ## General -This is the end-to-end benchmarking result for GROBID version **0.7.3** against the `PMC_sample_1943` dataset, see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. +This is the end-to-end benchmarking result for GROBID version **0.8.1** against the `PMC_sample_1943` dataset, see the [End-to-end evaluation](End-to-end-evaluation.md) page for explanations and for reproducing this evaluation. The following end-to-end results are using: @@ -22,13 +22,15 @@ Other versions of these benchmarks with variants and **Deep Learning models** (e Evaluation on 1943 random PDF PMC files out of 1943 PDF from 1943 different journals (0 PDF parsing failure). -Runtime for processing 1943 PDF: **2871s** (1.4s per PDF) on Ubuntu 16.04, 4 CPU i7-4790K (8 threads), 16GB RAM (workstation bought in 2015 for 1600 euros) and with a GeForce GTX 1050 Ti GPU. +Runtime for processing 1943 PDF: **1467** seconds, (0.75s per PDF) on Ubuntu 22.04, 16 CPU (32 threads), 128GB RAM and with a GeForce GTX 1080 Ti GPU. + +Note: with CRF only models, runtime is 470s (0.24 seconds per PDF) with 4GPU, 8 threads. + -Note: with CRF only models, runtime is 470s (0.24 seconds per PDF). ## Header metadata -Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -37,13 +39,15 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 16.78 | 16.48 | 16.63 | 1911 | -| authors | 89.99 | 89.9 | 89.95 | 1941 | -| first_author | 96.65 | 96.55 | 96.6 | 1941 | +| authors | 92.01 | 91.91 | 91.96 | 1941 | +| first_author | 96.7 | 96.6 | 96.65 | 1941 | | keywords | 64.99 | 63.62 | 64.3 | 1380 | -| title | 85.39 | 85.13 | 85.26 | 1943 | +| title | 84.67 | 84.41 | 84.54 | 1943 | | | | | | | -| **all fields (micro avg.)** | **71.5** | **70.93** | **71.22** | 9116 | -| all fields (macro avg.) | 70.76 | 70.34 | 70.55 | 9116 | +| **all fields (micro avg.)** | **71.79** | **71.22** | **71.5** | 9116 | +| all fields (macro avg.) | 71.03 | 70.6 | 70.81 | 9116 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -52,13 +56,15 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 63.83 | 62.69 | 63.25 | 1911 | -| authors | 90.87 | 90.78 | 90.82 | 1941 | -| first_author | 96.85 | 96.75 | 96.8 | 1941 | -| keywords | 73.65 | 72.1 | 72.87 | 1380 | -| title | 93.86 | 93.57 | 93.71 | 1943 | +| authors | 93.91 | 93.82 | 93.87 | 1941 | +| first_author | 97.06 | 96.96 | 97.01 | 1941 | +| keywords | 73.72 | 72.17 | 72.94 | 1380 | +| title | 92.15 | 91.87 | 92.01 | 1943 | | | | | | | -| **all fields (micro avg.)** | **84.61** | **83.93** | **84.27** | 9116 | -| all fields (macro avg.) | 83.81 | 83.18 | 83.49 | 9116 | +| **all fields (micro avg.)** | **84.95** | **84.27** | **84.61** | 9116 | +| all fields (macro avg.) | 84.14 | 83.5 | 83.82 | 9116 | + + #### Levenshtein Matching (Minimum Levenshtein distance at 0.8) @@ -67,13 +73,15 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 91.05 | 89.43 | 90.23 | 1911 | -| authors | 95 | 94.9 | 94.95 | 1941 | -| first_author | 97.06 | 96.96 | 97.01 | 1941 | +| authors | 96.08 | 95.98 | 96.03 | 1941 | +| first_author | 97.32 | 97.22 | 97.27 | 1941 | | keywords | 84.16 | 82.39 | 83.27 | 1380 | -| title | 98.86 | 98.56 | 98.71 | 1943 | +| title | 98.35 | 98.04 | 98.2 | 1943 | | | | | | | -| **all fields (micro avg.)** | **93.83** | **93.08** | **93.45** | 9116 | -| all fields (macro avg.) | 93.23 | 92.45 | 92.83 | 9116 | +| **all fields (micro avg.)** | **94.01** | **93.25** | **93.63** | 9116 | +| all fields (macro avg.) | 93.39 | 92.61 | 93 | 9116 | + + #### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) @@ -82,32 +90,34 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | | abstract | 87.11 | 85.56 | 86.33 | 1911 | -| authors | 92.88 | 92.79 | 92.84 | 1941 | -| first_author | 96.65 | 96.55 | 96.6 | 1941 | -| keywords | 79.42 | 77.75 | 78.58 | 1380 | -| title | 97.37 | 97.07 | 97.22 | 1943 | +| authors | 94.95 | 94.85 | 94.9 | 1941 | +| first_author | 96.7 | 96.6 | 96.65 | 1941 | +| keywords | 79.5 | 77.83 | 78.65 | 1380 | +| title | 96.33 | 96.04 | 96.19 | 1943 | | | | | | | -| **all fields (micro avg.)** | **91.44** | **90.71** | **91.07** | 9116 | -| all fields (macro avg.) | 90.69 | 89.94 | 90.31 | 9116 | +| **all fields (micro avg.)** | **91.68** | **90.95** | **91.32** | 9116 | +| all fields (macro avg.) | 90.92 | 90.17 | 90.54 | 9116 | + #### Instance-level results ``` -Total expected instances: 1943 -Total correct instances: 220 (strict) -Total correct instances: 881 (soft) -Total correct instances: 1414 (Levenshtein) -Total correct instances: 1272 (ObservedRatcliffObershelp) - -Instance-level recall: 11.32 (strict) -Instance-level recall: 45.34 (soft) -Instance-level recall: 72.77 (Levenshtein) -Instance-level recall: 65.47 (RatcliffObershelp) +Total expected instances: 1943 +Total correct instances: 219 (strict) +Total correct instances: 904 (soft) +Total correct instances: 1434 (Levenshtein) +Total correct instances: 1294 (ObservedRatcliffObershelp) + +Instance-level recall: 11.27 (strict) +Instance-level recall: 46.53 (soft) +Instance-level recall: 73.8 (Levenshtein) +Instance-level recall: 66.6 (RatcliffObershelp) ``` + ## Citation metadata -Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -115,17 +125,19 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 83.04 | 76.32 | 79.54 | 85778 | -| date | 94.6 | 84.24 | 89.12 | 87067 | +| authors | 83.03 | 76.31 | 79.53 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | | first_author | 89.78 | 82.49 | 85.98 | 85778 | -| inTitle | 73.22 | 71.87 | 72.54 | 81007 | -| issue | 91.1 | 87.74 | 89.39 | 16635 | -| page | 94.57 | 83.69 | 88.8 | 80501 | -| title | 79.91 | 75.52 | 77.65 | 80736 | -| volume | 96.02 | 89.81 | 92.81 | 80067 | +| inTitle | 73.23 | 71.88 | 72.55 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 79.67 | 75.3 | 77.42 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | | | | | | | -| **all fields (micro avg.)** | **87.25** | **80.77** | **83.88** | 597569 | -| all fields (macro avg.) | 87.78 | 81.46 | 84.48 | 597569 | +| **all fields (micro avg.)** | **87.22** | **80.74** | **83.86** | 597569 | +| all fields (macro avg.) | 87.75 | 81.44 | 84.45 | 597569 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -133,17 +145,19 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 83.51 | 76.75 | 79.99 | 85778 | -| date | 94.6 | 84.24 | 89.12 | 87067 | -| first_author | 89.95 | 82.65 | 86.15 | 85778 | -| inTitle | 84.92 | 83.34 | 84.13 | 81007 | -| issue | 91.1 | 87.74 | 89.39 | 16635 | -| page | 94.57 | 83.69 | 88.8 | 80501 | -| title | 91.44 | 86.42 | 88.86 | 80736 | -| volume | 96.02 | 89.81 | 92.81 | 80067 | +| authors | 83.5 | 76.75 | 79.98 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | +| first_author | 89.95 | 82.65 | 86.14 | 85778 | +| inTitle | 84.92 | 83.36 | 84.13 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 91.43 | 86.42 | 88.86 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | | | | | | | -| **all fields (micro avg.)** | **90.62** | **83.88** | **87.12** | 597569 | -| all fields (macro avg.) | 90.76 | 84.33 | 87.4 | 597569 | +| **all fields (micro avg.)** | **90.61** | **83.89** | **87.12** | 597569 | +| all fields (macro avg.) | 90.76 | 84.34 | 87.41 | 597569 | + + #### Levenshtein Matching (Minimum Levenshtein distance at 0.8) @@ -151,17 +165,19 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 89.22 | 81.99 | 85.45 | 85778 | -| date | 94.6 | 84.24 | 89.12 | 87067 | -| first_author | 90.16 | 82.84 | 86.34 | 85778 | -| inTitle | 86.17 | 84.57 | 85.37 | 81007 | -| issue | 91.1 | 87.74 | 89.39 | 16635 | -| page | 94.57 | 83.69 | 88.8 | 80501 | -| title | 93.8 | 88.65 | 91.15 | 80736 | -| volume | 96.02 | 89.81 | 92.81 | 80067 | +| authors | 89.21 | 81.99 | 85.45 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | +| first_author | 90.15 | 82.84 | 86.34 | 85778 | +| inTitle | 86.18 | 84.59 | 85.38 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 93.8 | 88.66 | 91.15 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | | | | | | | -| **all fields (micro avg.)** | **91.96** | **85.13** | **88.41** | 597569 | -| all fields (macro avg.) | 91.95 | 85.44 | 88.55 | 597569 | +| **all fields (micro avg.)** | **91.96** | **85.14** | **88.42** | 597569 | +| all fields (macro avg.) | 91.95 | 85.45 | 88.56 | 597569 | + + #### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) @@ -169,77 +185,80 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| authors | 85.99 | 79.03 | 82.36 | 85778 | -| date | 94.6 | 84.24 | 89.12 | 87067 | +| authors | 85.98 | 79.02 | 82.35 | 85778 | +| date | 94.6 | 84.25 | 89.13 | 87067 | | first_author | 89.8 | 82.51 | 86 | 85778 | -| inTitle | 83.49 | 81.94 | 82.71 | 81007 | -| issue | 91.1 | 87.74 | 89.39 | 16635 | -| page | 94.57 | 83.69 | 88.8 | 80501 | -| title | 93.39 | 88.26 | 90.75 | 80736 | -| volume | 96.02 | 89.81 | 92.81 | 80067 | +| inTitle | 83.49 | 81.95 | 82.72 | 81007 | +| issue | 91.09 | 87.74 | 89.38 | 16635 | +| page | 94.57 | 83.7 | 88.81 | 80501 | +| title | 93.39 | 88.27 | 90.76 | 80736 | +| volume | 96.01 | 89.82 | 92.81 | 80067 | | | | | | | -| **all fields (micro avg.)** | **91.01** | **84.24** | **87.5** | 597569 | -| all fields (macro avg.) | 91.12 | 84.65 | 87.74 | 597569 | +| **all fields (micro avg.)** | **91.01** | **84.25** | **87.5** | 597569 | +| all fields (macro avg.) | 91.12 | 84.66 | 87.74 | 597569 | + #### Instance-level results ``` -Total expected instances: 90125 -Total extracted instances: 85893 -Total correct instances: 38882 (strict) -Total correct instances: 50895 (soft) -Total correct instances: 55770 (Levenshtein) -Total correct instances: 52316 (RatcliffObershelp) +Total expected instances: 90125 +Total extracted instances: 85902 +Total correct instances: 38762 (strict) +Total correct instances: 50900 (soft) +Total correct instances: 55783 (Levenshtein) +Total correct instances: 52319 (RatcliffObershelp) -Instance-level precision: 45.27 (strict) -Instance-level precision: 59.25 (soft) -Instance-level precision: 64.93 (Levenshtein) -Instance-level precision: 60.91 (RatcliffObershelp) +Instance-level precision: 45.12 (strict) +Instance-level precision: 59.25 (soft) +Instance-level precision: 64.94 (Levenshtein) +Instance-level precision: 60.91 (RatcliffObershelp) -Instance-level recall: 43.14 (strict) -Instance-level recall: 56.47 (soft) -Instance-level recall: 61.88 (Levenshtein) -Instance-level recall: 58.05 (RatcliffObershelp) +Instance-level recall: 43.01 (strict) +Instance-level recall: 56.48 (soft) +Instance-level recall: 61.9 (Levenshtein) +Instance-level recall: 58.05 (RatcliffObershelp) -Instance-level f-score: 44.18 (strict) -Instance-level f-score: 57.83 (soft) -Instance-level f-score: 63.37 (Levenshtein) -Instance-level f-score: 59.44 (RatcliffObershelp) +Instance-level f-score: 44.04 (strict) +Instance-level f-score: 57.83 (soft) +Instance-level f-score: 63.38 (Levenshtein) +Instance-level f-score: 59.44 (RatcliffObershelp) -Matching 1 : 68320 +Matching 1 : 68328 -Matching 2 : 4150 +Matching 2 : 4154 -Matching 3 : 1866 +Matching 3 : 1863 -Matching 4 : 665 +Matching 4 : 662 -Total matches : 75001 +Total matches : 75007 ``` + #### Citation context resolution ``` -Total expected references: 90125 - 46.38 references per article -Total predicted references: 85893 - 44.21 references per article +Total expected references: 90125 - 46.38 references per article +Total predicted references: 85902 - 44.21 references per article -Total expected citation contexts: 139835 - 71.97 citation contexts per article -Total predicted citation contexts: 115367 - 59.38 citation contexts per article +Total expected citation contexts: 139835 - 71.97 citation contexts per article +Total predicted citation contexts: 115373 - 59.38 citation contexts per article -Total correct predicted citation contexts: 97270 - 50.06 citation contexts per article -Total wrong predicted citation contexts: 18097 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) +Total correct predicted citation contexts: 97277 - 50.07 citation contexts per article +Total wrong predicted citation contexts: 18096 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) -Precision citation contexts: 84.31 -Recall citation contexts: 69.56 -fscore citation contexts: 76.23 +Precision citation contexts: 84.32 +Recall citation contexts: 69.57 +fscore citation contexts: 76.23 ``` + ## Fulltext structures Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. -Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). +Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). #### Strict Matching (exact matches) @@ -247,15 +266,17 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| figure_title | 31.4 | 24.57 | 27.57 | 7281 | +| figure_title | 31.44 | 24.61 | 27.61 | 7281 | | reference_citation | 57.43 | 58.68 | 58.05 | 134196 | -| reference_figure | 61.2 | 65.88 | 63.45 | 19330 | +| reference_figure | 61.21 | 65.9 | 63.47 | 19330 | | reference_table | 83.01 | 88.39 | 85.62 | 7327 | -| section_title | 76.38 | 67.77 | 71.82 | 27619 | -| table_title | 57.29 | 50.29 | 53.56 | 3971 | +| section_title | 76.39 | 67.77 | 71.82 | 27619 | +| table_title | 57.3 | 50.29 | 53.57 | 3971 | | | | | | | -| **all fields (micro avg.)** | **60.4** | **60.31** | **60.36** | 199724 | -| all fields (macro avg.) | 61.12 | 59.26 | 60.01 | 199724 | +| **all fields (micro avg.)** | **60.41** | **60.32** | **60.36** | 199724 | +| all fields (macro avg.) | 61.13 | 59.27 | 60.02 | 199724 | + + #### Soft Matching (ignoring punctuation, case and space characters mismatches) @@ -263,12 +284,15 @@ Evaluation on 1943 random PDF files out of 1943 PDF (ratio 1.0). | label | precision | recall | f1 | support | |--- |--- |--- |--- |--- | -| figure_title | 78.62 | 61.52 | 69.02 | 7281 | +| figure_title | 78.68 | 61.58 | 69.09 | 7281 | | reference_citation | 61.68 | 63.03 | 62.35 | 134196 | -| reference_figure | 61.68 | 66.4 | 63.95 | 19330 | +| reference_figure | 61.69 | 66.41 | 63.97 | 19330 | | reference_table | 83.19 | 88.58 | 85.8 | 7327 | -| section_title | 81.23 | 72.08 | 76.38 | 27619 | -| table_title | 81.87 | 71.87 | 76.55 | 3971 | +| section_title | 81.25 | 72.08 | 76.39 | 27619 | +| table_title | 81.89 | 71.87 | 76.56 | 3971 | | | | | | | -| **all fields (micro avg.)** | **65.76** | **65.66** | **65.71** | 199724 | -| all fields (macro avg.) | 74.71 | 70.58 | 72.34 | 199724 | +| **all fields (micro avg.)** | **65.77** | **65.67** | **65.72** | 199724 | +| all fields (macro avg.) | 74.73 | 70.59 | 72.36 | 199724 | + + + diff --git a/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md b/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md deleted file mode 100644 index ace5c995a2..0000000000 --- a/grobid-trainer/doc/PLOS_1000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_header-09.08.2024.md +++ /dev/null @@ -1,282 +0,0 @@ - -## Header metadata - -Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 13.58 | 13.65 | 13.61 | 960 | -| authors | 98.87 | 98.97 | 98.92 | 969 | -| first_author | 99.18 | 99.28 | 99.23 | 969 | -| keywords | 0 | 0 | 0 | 0 | -| title | 95.75 | 94.6 | 95.17 | 1000 | -| | | | | | -| **all fields (micro avg.)** | **77.01** | **76.91** | **76.96** | 3898 | -| all fields (macro avg.) | 76.84 | 76.62 | 76.73 | 3898 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 50.57 | 50.83 | 50.7 | 960 | -| authors | 98.87 | 98.97 | 98.92 | 969 | -| first_author | 99.18 | 99.28 | 99.23 | 969 | -| keywords | 0 | 0 | 0 | 0 | -| title | 99.39 | 98.2 | 98.79 | 1000 | -| | | | | | -| **all fields (micro avg.)** | **87.11** | **86.99** | **87.05** | 3898 | -| all fields (macro avg.) | 87 | 86.82 | 86.91 | 3898 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 76.68 | 77.08 | 76.88 | 960 | -| authors | 99.28 | 99.38 | 99.33 | 969 | -| first_author | 99.28 | 99.38 | 99.33 | 969 | -| keywords | 0 | 0 | 0 | 0 | -| title | 99.7 | 98.5 | 99.09 | 1000 | -| | | | | | -| **all fields (micro avg.)** | **93.78** | **93.66** | **93.72** | 3898 | -| all fields (macro avg.) | 93.73 | 93.59 | 93.66 | 3898 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 66.94 | 67.29 | 67.12 | 960 | -| authors | 99.18 | 99.28 | 99.23 | 969 | -| first_author | 99.18 | 99.28 | 99.23 | 969 | -| keywords | 0 | 0 | 0 | 0 | -| title | 99.49 | 98.3 | 98.89 | 1000 | -| | | | | | -| **all fields (micro avg.)** | **91.27** | **91.15** | **91.21** | 3898 | -| all fields (macro avg.) | 91.2 | 91.04 | 91.12 | 3898 | - - -#### Instance-level results - -``` -Total expected instances: 1000 -Total correct instances: 139 (strict) -Total correct instances: 487 (soft) -Total correct instances: 726 (Levenshtein) -Total correct instances: 642 (ObservedRatcliffObershelp) - -Instance-level recall: 13.9 (strict) -Instance-level recall: 48.7 (soft) -Instance-level recall: 72.6 (Levenshtein) -Instance-level recall: 64.2 (RatcliffObershelp) -``` - - -## Citation metadata - -Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 81.17 | 78.43 | 79.78 | 44770 | -| date | 84.61 | 81.24 | 82.89 | 45457 | -| first_author | 91.47 | 88.34 | 89.88 | 44770 | -| inTitle | 81.67 | 83.58 | 82.61 | 42795 | -| issue | 93.62 | 92.68 | 93.15 | 18983 | -| page | 93.7 | 77.57 | 84.87 | 40844 | -| title | 59.97 | 60.47 | 60.22 | 43101 | -| volume | 95.89 | 96.11 | 96 | 40458 | -| | | | | | -| **all fields (micro avg.)** | **84.23** | **81.45** | **82.81** | 321178 | -| all fields (macro avg.) | 85.26 | 82.3 | 83.67 | 321178 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 81.49 | 78.73 | 80.09 | 44770 | -| date | 84.61 | 81.24 | 82.89 | 45457 | -| first_author | 91.69 | 88.55 | 90.09 | 44770 | -| inTitle | 85.51 | 87.5 | 86.49 | 42795 | -| issue | 93.62 | 92.68 | 93.15 | 18983 | -| page | 93.7 | 77.57 | 84.87 | 40844 | -| title | 91.95 | 92.74 | 92.34 | 43101 | -| volume | 95.89 | 96.11 | 96 | 40458 | -| | | | | | -| **all fields (micro avg.)** | **89.32** | **86.37** | **87.82** | 321178 | -| all fields (macro avg.) | 89.81 | 86.89 | 88.24 | 321178 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 90.64 | 87.57 | 89.08 | 44770 | -| date | 84.61 | 81.24 | 82.89 | 45457 | -| first_author | 92.23 | 89.08 | 90.62 | 44770 | -| inTitle | 86.45 | 88.47 | 87.45 | 42795 | -| issue | 93.62 | 92.68 | 93.15 | 18983 | -| page | 93.7 | 77.57 | 84.87 | 40844 | -| title | 94.56 | 95.37 | 94.96 | 43101 | -| volume | 95.89 | 96.11 | 96 | 40458 | -| | | | | | -| **all fields (micro avg.)** | **91.17** | **88.16** | **89.64** | 321178 | -| all fields (macro avg.) | 91.46 | 88.51 | 89.88 | 321178 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 84.94 | 82.06 | 83.48 | 44770 | -| date | 84.61 | 81.24 | 82.89 | 45457 | -| first_author | 91.47 | 88.34 | 89.88 | 44770 | -| inTitle | 85.16 | 87.15 | 86.14 | 42795 | -| issue | 93.62 | 92.68 | 93.15 | 18983 | -| page | 93.7 | 77.57 | 84.87 | 40844 | -| title | 93.95 | 94.74 | 94.34 | 43101 | -| volume | 95.89 | 96.11 | 96 | 40458 | -| | | | | | -| **all fields (micro avg.)** | **90** | **87.03** | **88.49** | 321178 | -| all fields (macro avg.) | 90.42 | 87.49 | 88.84 | 321178 | - - -#### Instance-level results - -``` -Total expected instances: 48449 -Total extracted instances: 48250 -Total correct instances: 13496 (strict) -Total correct instances: 22269 (soft) -Total correct instances: 24916 (Levenshtein) -Total correct instances: 23272 (RatcliffObershelp) - -Instance-level precision: 27.97 (strict) -Instance-level precision: 46.15 (soft) -Instance-level precision: 51.64 (Levenshtein) -Instance-level precision: 48.23 (RatcliffObershelp) - -Instance-level recall: 27.86 (strict) -Instance-level recall: 45.96 (soft) -Instance-level recall: 51.43 (Levenshtein) -Instance-level recall: 48.03 (RatcliffObershelp) - -Instance-level f-score: 27.91 (strict) -Instance-level f-score: 46.06 (soft) -Instance-level f-score: 51.53 (Levenshtein) -Instance-level f-score: 48.13 (RatcliffObershelp) - -Matching 1 : 35369 - -Matching 2 : 1260 - -Matching 3 : 3266 - -Matching 4 : 1800 - -Total matches : 41695 -``` - - -#### Citation context resolution -``` - -Total expected references: 48449 - 48.45 references per article -Total predicted references: 48250 - 48.25 references per article - -Total expected citation contexts: 69755 - 69.75 citation contexts per article -Total predicted citation contexts: 73696 - 73.7 citation contexts per article - -Total correct predicted citation contexts: 56772 - 56.77 citation contexts per article -Total wrong predicted citation contexts: 16924 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) - -Precision citation contexts: 77.04 -Recall citation contexts: 81.39 -fscore citation contexts: 79.15 -``` - - -## Fulltext structures - -Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. - - -Evaluation on 1000 random PDF files out of 998 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 54.06 | 52.12 | 53.07 | 779 | -| figure_title | 2.11 | 0.92 | 1.28 | 8943 | -| funding_stmt | 5.27 | 28.14 | 8.88 | 1507 | -| reference_citation | 86.69 | 94.65 | 90.49 | 69741 | -| reference_figure | 72.06 | 54.06 | 61.77 | 11010 | -| reference_table | 84.28 | 92.07 | 88 | 5159 | -| section_title | 77.18 | 65.8 | 71.03 | 17540 | -| table_title | 1.13 | 0.59 | 0.77 | 6092 | -| | | | | | -| **all fields (micro avg.)** | **73.79** | **73.86** | **73.82** | 120771 | -| all fields (macro avg.) | 47.85 | 48.54 | 46.91 | 120771 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 79.36 | 76.51 | 77.91 | 779 | -| figure_title | 81.17 | 35.33 | 49.24 | 8943 | -| funding_stmt | 6.89 | 36.76 | 11.6 | 1507 | -| reference_citation | 86.7 | 94.66 | 90.51 | 69741 | -| reference_figure | 72.52 | 54.41 | 62.17 | 11010 | -| reference_table | 84.46 | 92.27 | 88.19 | 5159 | -| section_title | 78.17 | 66.65 | 71.95 | 17540 | -| table_title | 15.97 | 8.39 | 11 | 6092 | -| | | | | | -| **all fields (micro avg.)** | **77.16** | **77.24** | **77.2** | 120771 | -| all fields (macro avg.) | 63.16 | 58.12 | 57.82 | 120771 | - - -**Document-level ratio results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 99.47 | 96.41 | 97.91 | 779 | -| | | | | | -| **all fields (micro avg.)** | **99.47** | **96.41** | **97.91** | 779 | -| all fields (macro avg.) | 99.47 | 96.41 | 97.91 | 779 | - -Evaluation metrics produced in 396.908 seconds diff --git a/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md b/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md deleted file mode 100644 index 7bc732a83e..0000000000 --- a/grobid-trainer/doc/PMC_sample_1943.results.grobid-0.8.1-Glutton-BidLSTM-CRF_citation_reference_segmenter-header-09.08.2024.md +++ /dev/null @@ -1,277 +0,0 @@ - -## Header metadata - -Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 16.78 | 16.48 | 16.63 | 1911 | -| authors | 92.01 | 91.91 | 91.96 | 1941 | -| first_author | 96.7 | 96.6 | 96.65 | 1941 | -| keywords | 64.99 | 63.62 | 64.3 | 1380 | -| title | 84.67 | 84.41 | 84.54 | 1943 | -| | | | | | -| **all fields (micro avg.)** | **71.79** | **71.22** | **71.5** | 9116 | -| all fields (macro avg.) | 71.03 | 70.6 | 70.81 | 9116 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 63.83 | 62.69 | 63.25 | 1911 | -| authors | 93.91 | 93.82 | 93.87 | 1941 | -| first_author | 97.06 | 96.96 | 97.01 | 1941 | -| keywords | 73.72 | 72.17 | 72.94 | 1380 | -| title | 92.15 | 91.87 | 92.01 | 1943 | -| | | | | | -| **all fields (micro avg.)** | **84.95** | **84.27** | **84.61** | 9116 | -| all fields (macro avg.) | 84.14 | 83.5 | 83.82 | 9116 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 91.05 | 89.43 | 90.23 | 1911 | -| authors | 96.08 | 95.98 | 96.03 | 1941 | -| first_author | 97.32 | 97.22 | 97.27 | 1941 | -| keywords | 84.16 | 82.39 | 83.27 | 1380 | -| title | 98.35 | 98.04 | 98.2 | 1943 | -| | | | | | -| **all fields (micro avg.)** | **94.01** | **93.25** | **93.63** | 9116 | -| all fields (macro avg.) | 93.39 | 92.61 | 93 | 9116 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 87.11 | 85.56 | 86.33 | 1911 | -| authors | 94.95 | 94.85 | 94.9 | 1941 | -| first_author | 96.7 | 96.6 | 96.65 | 1941 | -| keywords | 79.5 | 77.83 | 78.65 | 1380 | -| title | 96.33 | 96.04 | 96.19 | 1943 | -| | | | | | -| **all fields (micro avg.)** | **91.68** | **90.95** | **91.32** | 9116 | -| all fields (macro avg.) | 90.92 | 90.17 | 90.54 | 9116 | - - -#### Instance-level results - -``` -Total expected instances: 1943 -Total correct instances: 219 (strict) -Total correct instances: 904 (soft) -Total correct instances: 1434 (Levenshtein) -Total correct instances: 1294 (ObservedRatcliffObershelp) - -Instance-level recall: 11.27 (strict) -Instance-level recall: 46.53 (soft) -Instance-level recall: 73.8 (Levenshtein) -Instance-level recall: 66.6 (RatcliffObershelp) -``` - - -## Citation metadata - -Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 83.03 | 76.31 | 79.53 | 85778 | -| date | 94.6 | 84.25 | 89.13 | 87067 | -| first_author | 89.78 | 82.49 | 85.98 | 85778 | -| inTitle | 73.23 | 71.88 | 72.55 | 81007 | -| issue | 91.09 | 87.74 | 89.38 | 16635 | -| page | 94.57 | 83.7 | 88.81 | 80501 | -| title | 79.67 | 75.3 | 77.42 | 80736 | -| volume | 96.01 | 89.82 | 92.81 | 80067 | -| | | | | | -| **all fields (micro avg.)** | **87.22** | **80.74** | **83.86** | 597569 | -| all fields (macro avg.) | 87.75 | 81.44 | 84.45 | 597569 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 83.5 | 76.75 | 79.98 | 85778 | -| date | 94.6 | 84.25 | 89.13 | 87067 | -| first_author | 89.95 | 82.65 | 86.14 | 85778 | -| inTitle | 84.92 | 83.36 | 84.13 | 81007 | -| issue | 91.09 | 87.74 | 89.38 | 16635 | -| page | 94.57 | 83.7 | 88.81 | 80501 | -| title | 91.43 | 86.42 | 88.86 | 80736 | -| volume | 96.01 | 89.82 | 92.81 | 80067 | -| | | | | | -| **all fields (micro avg.)** | **90.61** | **83.89** | **87.12** | 597569 | -| all fields (macro avg.) | 90.76 | 84.34 | 87.41 | 597569 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 89.21 | 81.99 | 85.45 | 85778 | -| date | 94.6 | 84.25 | 89.13 | 87067 | -| first_author | 90.15 | 82.84 | 86.34 | 85778 | -| inTitle | 86.18 | 84.59 | 85.38 | 81007 | -| issue | 91.09 | 87.74 | 89.38 | 16635 | -| page | 94.57 | 83.7 | 88.81 | 80501 | -| title | 93.8 | 88.66 | 91.15 | 80736 | -| volume | 96.01 | 89.82 | 92.81 | 80067 | -| | | | | | -| **all fields (micro avg.)** | **91.96** | **85.14** | **88.42** | 597569 | -| all fields (macro avg.) | 91.95 | 85.45 | 88.56 | 597569 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 85.98 | 79.02 | 82.35 | 85778 | -| date | 94.6 | 84.25 | 89.13 | 87067 | -| first_author | 89.8 | 82.51 | 86 | 85778 | -| inTitle | 83.49 | 81.95 | 82.72 | 81007 | -| issue | 91.09 | 87.74 | 89.38 | 16635 | -| page | 94.57 | 83.7 | 88.81 | 80501 | -| title | 93.39 | 88.27 | 90.76 | 80736 | -| volume | 96.01 | 89.82 | 92.81 | 80067 | -| | | | | | -| **all fields (micro avg.)** | **91.01** | **84.25** | **87.5** | 597569 | -| all fields (macro avg.) | 91.12 | 84.66 | 87.74 | 597569 | - - -#### Instance-level results - -``` -Total expected instances: 90125 -Total extracted instances: 85902 -Total correct instances: 38762 (strict) -Total correct instances: 50900 (soft) -Total correct instances: 55783 (Levenshtein) -Total correct instances: 52319 (RatcliffObershelp) - -Instance-level precision: 45.12 (strict) -Instance-level precision: 59.25 (soft) -Instance-level precision: 64.94 (Levenshtein) -Instance-level precision: 60.91 (RatcliffObershelp) - -Instance-level recall: 43.01 (strict) -Instance-level recall: 56.48 (soft) -Instance-level recall: 61.9 (Levenshtein) -Instance-level recall: 58.05 (RatcliffObershelp) - -Instance-level f-score: 44.04 (strict) -Instance-level f-score: 57.83 (soft) -Instance-level f-score: 63.38 (Levenshtein) -Instance-level f-score: 59.44 (RatcliffObershelp) - -Matching 1 : 68328 - -Matching 2 : 4154 - -Matching 3 : 1863 - -Matching 4 : 662 - -Total matches : 75007 -``` - - -#### Citation context resolution -``` - -Total expected references: 90125 - 46.38 references per article -Total predicted references: 85902 - 44.21 references per article - -Total expected citation contexts: 139835 - 71.97 citation contexts per article -Total predicted citation contexts: 115373 - 59.38 citation contexts per article - -Total correct predicted citation contexts: 97277 - 50.07 citation contexts per article -Total wrong predicted citation contexts: 18096 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) - -Precision citation contexts: 84.32 -Recall citation contexts: 69.57 -fscore citation contexts: 76.23 -``` - - -## Fulltext structures - -Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. - - -Evaluation on 1943 random PDF files out of 1941 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| figure_title | 31.44 | 24.61 | 27.61 | 7281 | -| reference_citation | 57.43 | 58.68 | 58.05 | 134196 | -| reference_figure | 61.21 | 65.9 | 63.47 | 19330 | -| reference_table | 83.01 | 88.39 | 85.62 | 7327 | -| section_title | 76.39 | 67.77 | 71.82 | 27619 | -| table_title | 57.3 | 50.29 | 53.57 | 3971 | -| | | | | | -| **all fields (micro avg.)** | **60.41** | **60.32** | **60.36** | 199724 | -| all fields (macro avg.) | 61.13 | 59.27 | 60.02 | 199724 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| figure_title | 78.68 | 61.58 | 69.09 | 7281 | -| reference_citation | 61.68 | 63.03 | 62.35 | 134196 | -| reference_figure | 61.69 | 66.41 | 63.97 | 19330 | -| reference_table | 83.19 | 88.58 | 85.8 | 7327 | -| section_title | 81.25 | 72.08 | 76.39 | 27619 | -| table_title | 81.89 | 71.87 | 76.56 | 3971 | -| | | | | | -| **all fields (micro avg.)** | **65.77** | **65.67** | **65.72** | 199724 | -| all fields (macro avg.) | 74.73 | 70.59 | 72.36 | 199724 | - - -**Document-level ratio results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| | | | | | -| **all fields (micro avg.)** | **0** | **0** | **0** | 0 | -| all fields (macro avg.) | 0 | 0 | 0 | 0 | - -Evaluation metrics produced in 625.694 seconds diff --git a/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md b/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md deleted file mode 100644 index d25f6456c4..0000000000 --- a/grobid-trainer/doc/bioRxiv_test_2000.results.grobid-0.8-1-Glutton-DeLFT-BidLSTM-CRF-FEATURES_CITATIONS_reference_segmenter_header-09.08.2024.md +++ /dev/null @@ -1,294 +0,0 @@ - -## Header metadata - -Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 2.2 | 2.16 | 2.18 | 1990 | -| authors | 83.2 | 82.49 | 82.84 | 1999 | -| first_author | 97.02 | 96.29 | 96.66 | 1997 | -| keywords | 58.71 | 59.83 | 59.27 | 839 | -| title | 77.67 | 76.85 | 77.26 | 2000 | -| | | | | | -| **all fields (micro avg.)** | **64.62** | **64.07** | **64.35** | 8825 | -| all fields (macro avg.) | 63.76 | 63.53 | 63.64 | 8825 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 59.71 | 58.54 | 59.12 | 1990 | -| authors | 83.7 | 82.99 | 83.35 | 1999 | -| first_author | 97.23 | 96.49 | 96.86 | 1997 | -| keywords | 63.86 | 65.08 | 64.46 | 839 | -| title | 79.89 | 79.05 | 79.47 | 2000 | -| | | | | | -| **all fields (micro avg.)** | **78.61** | **77.94** | **78.27** | 8825 | -| all fields (macro avg.) | 76.88 | 76.43 | 76.65 | 8825 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 80.22 | 78.64 | 79.42 | 1990 | -| authors | 92.18 | 91.4 | 91.79 | 1999 | -| first_author | 97.48 | 96.75 | 97.11 | 1997 | -| keywords | 79.42 | 80.93 | 80.17 | 839 | -| title | 92.02 | 91.05 | 91.53 | 2000 | -| | | | | | -| **all fields (micro avg.)** | **89.43** | **88.66** | **89.04** | 8825 | -| all fields (macro avg.) | 88.26 | 87.75 | 88 | 8825 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 76.88 | 75.38 | 76.12 | 1990 | -| authors | 87.79 | 87.04 | 87.42 | 1999 | -| first_author | 97.02 | 96.29 | 96.66 | 1997 | -| keywords | 71.35 | 72.71 | 72.02 | 839 | -| title | 87.87 | 86.95 | 87.41 | 2000 | -| | | | | | -| **all fields (micro avg.)** | **85.86** | **85.12** | **85.49** | 8825 | -| all fields (macro avg.) | 84.18 | 83.67 | 83.92 | 8825 | - - -#### Instance-level results - -``` -Total expected instances: 2000 -Total correct instances: 35 (strict) -Total correct instances: 708 (soft) -Total correct instances: 1222 (Levenshtein) -Total correct instances: 1046 (ObservedRatcliffObershelp) - -Instance-level recall: 1.75 (strict) -Instance-level recall: 35.4 (soft) -Instance-level recall: 61.1 (Levenshtein) -Instance-level recall: 52.3 (RatcliffObershelp) -``` - - -## Citation metadata - -Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 88.16 | 83.24 | 85.63 | 97183 | -| date | 91.69 | 86.31 | 88.92 | 97630 | -| doi | 70.84 | 83.79 | 76.78 | 16894 | -| first_author | 95.06 | 89.68 | 92.29 | 97183 | -| inTitle | 82.83 | 79.4 | 81.08 | 96430 | -| issue | 94.34 | 92.04 | 93.18 | 30312 | -| page | 94.97 | 78.34 | 85.86 | 88597 | -| pmcid | 66.38 | 86.12 | 74.97 | 807 | -| pmid | 70.08 | 84.95 | 76.8 | 2093 | -| title | 84.88 | 83.58 | 84.23 | 92463 | -| volume | 96.23 | 95.23 | 95.73 | 87709 | -| | | | | | -| **all fields (micro avg.)** | **89.85** | **85.34** | **87.54** | 707301 | -| all fields (macro avg.) | 85.04 | 85.7 | 85.04 | 707301 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 89.31 | 84.33 | 86.75 | 97183 | -| date | 91.69 | 86.31 | 88.92 | 97630 | -| doi | 75.34 | 89.11 | 81.65 | 16894 | -| first_author | 95.48 | 90.08 | 92.7 | 97183 | -| inTitle | 92.32 | 88.51 | 90.38 | 96430 | -| issue | 94.34 | 92.04 | 93.18 | 30312 | -| page | 94.97 | 78.34 | 85.86 | 88597 | -| pmcid | 75.64 | 98.14 | 85.44 | 807 | -| pmid | 74.5 | 90.3 | 81.64 | 2093 | -| title | 93.23 | 91.8 | 92.51 | 92463 | -| volume | 96.23 | 95.23 | 95.73 | 87709 | -| | | | | | -| **all fields (micro avg.)** | **92.66** | **88.02** | **90.28** | 707301 | -| all fields (macro avg.) | 88.46 | 89.47 | 88.61 | 707301 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 94.58 | 89.3 | 91.87 | 97183 | -| date | 91.69 | 86.31 | 88.92 | 97630 | -| doi | 77.6 | 91.79 | 84.1 | 16894 | -| first_author | 95.63 | 90.22 | 92.85 | 97183 | -| inTitle | 93.3 | 89.45 | 91.33 | 96430 | -| issue | 94.34 | 92.04 | 93.18 | 30312 | -| page | 94.97 | 78.34 | 85.86 | 88597 | -| pmcid | 75.64 | 98.14 | 85.44 | 807 | -| pmid | 74.5 | 90.3 | 81.64 | 2093 | -| title | 96.05 | 94.58 | 95.31 | 92463 | -| volume | 96.23 | 95.23 | 95.73 | 87709 | -| | | | | | -| **all fields (micro avg.)** | **93.99** | **89.28** | **91.57** | 707301 | -| all fields (macro avg.) | 89.51 | 90.52 | 89.66 | 707301 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 91.54 | 86.43 | 88.91 | 97183 | -| date | 91.69 | 86.31 | 88.92 | 97630 | -| doi | 76.04 | 89.94 | 82.41 | 16894 | -| first_author | 95.1 | 89.72 | 92.33 | 97183 | -| inTitle | 91.06 | 87.29 | 89.13 | 96430 | -| issue | 94.34 | 92.04 | 93.18 | 30312 | -| page | 94.97 | 78.34 | 85.86 | 88597 | -| pmcid | 66.38 | 86.12 | 74.97 | 807 | -| pmid | 70.08 | 84.95 | 76.8 | 2093 | -| title | 95.35 | 93.89 | 94.62 | 92463 | -| volume | 96.23 | 95.23 | 95.73 | 87709 | -| | | | | | -| **all fields (micro avg.)** | **93.02** | **88.36** | **90.63** | 707301 | -| all fields (macro avg.) | 87.53 | 88.21 | 87.53 | 707301 | - - -#### Instance-level results - -``` -Total expected instances: 98799 -Total extracted instances: 98068 -Total correct instances: 43771 (strict) -Total correct instances: 54778 (soft) -Total correct instances: 58972 (Levenshtein) -Total correct instances: 55693 (RatcliffObershelp) - -Instance-level precision: 44.63 (strict) -Instance-level precision: 55.86 (soft) -Instance-level precision: 60.13 (Levenshtein) -Instance-level precision: 56.79 (RatcliffObershelp) - -Instance-level recall: 44.3 (strict) -Instance-level recall: 55.44 (soft) -Instance-level recall: 59.69 (Levenshtein) -Instance-level recall: 56.37 (RatcliffObershelp) - -Instance-level f-score: 44.47 (strict) -Instance-level f-score: 55.65 (soft) -Instance-level f-score: 59.91 (Levenshtein) -Instance-level f-score: 56.58 (RatcliffObershelp) - -Matching 1 : 79296 - -Matching 2 : 4442 - -Matching 3 : 4371 - -Matching 4 : 2084 - -Total matches : 90193 -``` - - -#### Citation context resolution -``` - -Total expected references: 98797 - 49.4 references per article -Total predicted references: 98068 - 49.03 references per article - -Total expected citation contexts: 142862 - 71.43 citation contexts per article -Total predicted citation contexts: 135692 - 67.85 citation contexts per article - -Total correct predicted citation contexts: 116736 - 58.37 citation contexts per article -Total wrong predicted citation contexts: 18956 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) - -Precision citation contexts: 86.03 -Recall citation contexts: 81.71 -fscore citation contexts: 83.82 -``` - - -## Fulltext structures - -Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. - - -Evaluation on 2000 random PDF files out of 1998 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 29.95 | 25.78 | 27.71 | 446 | -| figure_title | 4.23 | 2.01 | 2.72 | 22978 | -| funding_stmt | 4.16 | 24.43 | 7.11 | 745 | -| reference_citation | 71.05 | 71.33 | 71.19 | 147470 | -| reference_figure | 70.59 | 67.74 | 69.14 | 47984 | -| reference_table | 48.11 | 83.03 | 60.92 | 5957 | -| section_title | 72.59 | 69.6 | 71.06 | 32398 | -| table_title | 4.31 | 2.85 | 3.43 | 3925 | -| | | | | | -| **all fields (micro avg.)** | **65.46** | **63.41** | **64.42** | 261903 | -| all fields (macro avg.) | 38.12 | 43.35 | 39.16 | 261903 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 50.52 | 43.5 | 46.75 | 446 | -| figure_title | 69.47 | 32.91 | 44.67 | 22978 | -| funding_stmt | 4.37 | 25.64 | 7.46 | 745 | -| reference_citation | 83.04 | 83.37 | 83.21 | 147470 | -| reference_figure | 71.22 | 68.34 | 69.75 | 47984 | -| reference_table | 48.56 | 83.8 | 61.49 | 5957 | -| section_title | 76.47 | 73.32 | 74.86 | 32398 | -| table_title | 51.44 | 34.06 | 40.99 | 3925 | -| | | | | | -| **all fields (micro avg.)** | **76.38** | **73.99** | **75.17** | 261903 | -| all fields (macro avg.) | 56.89 | 55.62 | 53.65 | 261903 | - - -**Document-level ratio results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 84.77 | 86.1 | 85.43 | 446 | -| | | | | | -| **all fields (micro avg.)** | **84.77** | **86.1** | **85.43** | 446 | -| all fields (macro avg.) | 84.77 | 86.1 | 85.43 | 446 | - -Evaluation metrics produced in 773.926 seconds diff --git a/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md b/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md deleted file mode 100644 index 28b9a89542..0000000000 --- a/grobid-trainer/doc/eLife_984.results.grobid-0.8-1--Glutton-DeLFT-BidLSTM-CRF-FEATURES_citations_reference_segmenter-09.08.2024.md +++ /dev/null @@ -1,278 +0,0 @@ - -## Header metadata - -Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 9.44 | 9.16 | 9.3 | 983 | -| authors | 74.28 | 73.52 | 73.9 | 982 | -| first_author | 92.39 | 91.54 | 91.96 | 981 | -| title | 86.81 | 85.05 | 85.92 | 983 | -| | | | | | -| **all fields (micro avg.)** | **65.96** | **64.8** | **65.37** | 3929 | -| all fields (macro avg.) | 65.73 | 64.82 | 65.27 | 3929 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 22.46 | 21.77 | 22.11 | 983 | -| authors | 74.59 | 73.83 | 74.21 | 982 | -| first_author | 92.39 | 91.54 | 91.96 | 981 | -| title | 94.81 | 92.88 | 93.83 | 983 | -| | | | | | -| **all fields (micro avg.)** | **71.24** | **69.99** | **70.61** | 3929 | -| all fields (macro avg.) | 71.06 | 70 | 70.53 | 3929 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 47.53 | 46.08 | 46.8 | 983 | -| authors | 88.17 | 87.27 | 87.72 | 982 | -| first_author | 92.7 | 91.85 | 92.27 | 981 | -| title | 96.26 | 94.3 | 95.27 | 983 | -| | | | | | -| **all fields (micro avg.)** | **81.3** | **79.87** | **80.58** | 3929 | -| all fields (macro avg.) | 81.16 | 79.88 | 80.51 | 3929 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| abstract | 44.49 | 43.13 | 43.8 | 983 | -| authors | 79.94 | 79.12 | 79.53 | 982 | -| first_author | 92.39 | 91.54 | 91.96 | 981 | -| title | 96.26 | 94.3 | 95.27 | 983 | -| | | | | | -| **all fields (micro avg.)** | **78.39** | **77.02** | **77.7** | 3929 | -| all fields (macro avg.) | 78.27 | 77.02 | 77.64 | 3929 | - - -#### Instance-level results - -``` -Total expected instances: 983 -Total correct instances: 73 (strict) -Total correct instances: 198 (soft) -Total correct instances: 377 (Levenshtein) -Total correct instances: 335 (ObservedRatcliffObershelp) - -Instance-level recall: 7.43 (strict) -Instance-level recall: 20.14 (soft) -Instance-level recall: 38.35 (Levenshtein) -Instance-level recall: 34.08 (RatcliffObershelp) -``` - - -## Citation metadata - -Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 79.4 | 78.19 | 78.79 | 63170 | -| date | 95.86 | 93.99 | 94.91 | 63567 | -| first_author | 94.76 | 93.28 | 94.02 | 63170 | -| inTitle | 95.77 | 94.68 | 95.22 | 63118 | -| issue | 1.99 | 75 | 3.88 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53303 | -| title | 90.25 | 90.68 | 90.47 | 61950 | -| volume | 97.85 | 98.17 | 98.01 | 60955 | -| | | | | | -| **all fields (micro avg.)** | **92.66** | **91.93** | **92.29** | 429249 | -| all fields (macro avg.) | 81.52 | 89.9 | 81.38 | 429249 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 79.54 | 78.33 | 78.93 | 63170 | -| date | 95.86 | 93.99 | 94.91 | 63567 | -| first_author | 94.84 | 93.36 | 94.1 | 63170 | -| inTitle | 96.25 | 95.15 | 95.7 | 63118 | -| issue | 1.99 | 75 | 3.88 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53303 | -| title | 95.92 | 96.38 | 96.15 | 61950 | -| volume | 97.85 | 98.17 | 98.01 | 60955 | -| | | | | | -| **all fields (micro avg.)** | **93.59** | **92.85** | **93.22** | 429249 | -| all fields (macro avg.) | 82.31 | 90.7 | 82.17 | 429249 | - - - -#### Levenshtein Matching (Minimum Levenshtein distance at 0.8) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 93.29 | 91.87 | 92.58 | 63170 | -| date | 95.86 | 93.99 | 94.91 | 63567 | -| first_author | 95.29 | 93.8 | 94.54 | 63170 | -| inTitle | 96.58 | 95.47 | 96.02 | 63118 | -| issue | 1.99 | 75 | 3.88 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53303 | -| title | 97.66 | 98.12 | 97.89 | 61950 | -| volume | 97.85 | 98.17 | 98.01 | 60955 | -| | | | | | -| **all fields (micro avg.)** | **95.97** | **95.21** | **95.59** | 429249 | -| all fields (macro avg.) | 84.35 | 92.7 | 84.19 | 429249 | - - - -#### Ratcliff/Obershelp Matching (Minimum Ratcliff/Obershelp similarity at 0.95) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| authors | 86.71 | 85.39 | 86.05 | 63170 | -| date | 95.86 | 93.99 | 94.91 | 63567 | -| first_author | 94.78 | 93.3 | 94.03 | 63170 | -| inTitle | 96.25 | 95.16 | 95.7 | 63118 | -| issue | 1.99 | 75 | 3.88 | 16 | -| page | 96.26 | 95.2 | 95.72 | 53303 | -| title | 97.5 | 97.97 | 97.74 | 61950 | -| volume | 97.85 | 98.17 | 98.01 | 60955 | -| | | | | | -| **all fields (micro avg.)** | **94.87** | **94.11** | **94.49** | 429249 | -| all fields (macro avg.) | 83.4 | 91.77 | 83.26 | 429249 | - - -#### Instance-level results - -``` -Total expected instances: 63569 -Total extracted instances: 66388 -Total correct instances: 42246 (strict) -Total correct instances: 45085 (soft) -Total correct instances: 52715 (Levenshtein) -Total correct instances: 49331 (RatcliffObershelp) - -Instance-level precision: 63.63 (strict) -Instance-level precision: 67.91 (soft) -Instance-level precision: 79.4 (Levenshtein) -Instance-level precision: 74.31 (RatcliffObershelp) - -Instance-level recall: 66.46 (strict) -Instance-level recall: 70.92 (soft) -Instance-level recall: 82.93 (Levenshtein) -Instance-level recall: 77.6 (RatcliffObershelp) - -Instance-level f-score: 65.02 (strict) -Instance-level f-score: 69.38 (soft) -Instance-level f-score: 81.13 (Levenshtein) -Instance-level f-score: 75.92 (RatcliffObershelp) - -Matching 1 : 58505 - -Matching 2 : 1012 - -Matching 3 : 1242 - -Matching 4 : 371 - -Total matches : 61130 -``` - - -#### Citation context resolution -``` - -Total expected references: 63569 - 64.67 references per article -Total predicted references: 66388 - 67.54 references per article - -Total expected citation contexts: 108880 - 110.76 citation contexts per article -Total predicted citation contexts: 99284 - 101 citation contexts per article - -Total correct predicted citation contexts: 95494 - 97.15 citation contexts per article -Total wrong predicted citation contexts: 3790 (wrong callout matching, callout missing in NLM, or matching with a bib. ref. not aligned with a bib.ref. in NLM) - -Precision citation contexts: 96.18 -Recall citation contexts: 87.71 -fscore citation contexts: 91.75 -``` - - -## Fulltext structures - -Fulltext structure contents are complicated to capture from JATS NLM files. They are often normalized and different from the actual PDF content and are can be inconsistent from one document to another. The scores of the following metrics are thus not very meaningful in absolute term, in particular for the strict matching (textual content of the srtructure can be very long). As relative values for comparing different models, they seem however useful. - - -Evaluation on 983 random PDF files out of 982 PDF (ratio 1.0). - -#### Strict Matching (exact matches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 29.94 | 26.71 | 28.24 | 584 | -| figure_title | 0.02 | 0.01 | 0.01 | 31671 | -| funding_stmt | 4.77 | 23.8 | 7.95 | 920 | -| reference_citation | 55.46 | 55.67 | 55.56 | 108807 | -| reference_figure | 56.78 | 49.91 | 53.12 | 68786 | -| reference_table | 68.24 | 73.46 | 70.75 | 2381 | -| section_title | 85.17 | 74.17 | 79.29 | 21808 | -| table_title | 0.45 | 0.16 | 0.23 | 1924 | -| | | | | | -| **all fields (micro avg.)** | **54.74** | **47.79** | **51.03** | 236881 | -| all fields (macro avg.) | 37.6 | 37.99 | 36.89 | 236881 | - - - -#### Soft Matching (ignoring punctuation, case and space characters mismatches) - -**Field-level results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 38.96 | 34.76 | 36.74 | 584 | -| figure_title | 48.86 | 15.12 | 23.09 | 31671 | -| funding_stmt | 4.77 | 23.8 | 7.95 | 920 | -| reference_citation | 91.04 | 91.38 | 91.21 | 108807 | -| reference_figure | 57.06 | 50.16 | 53.39 | 68786 | -| reference_table | 68.32 | 73.54 | 70.83 | 2381 | -| section_title | 86.05 | 74.93 | 80.1 | 21808 | -| table_title | 80.63 | 27.91 | 41.47 | 1924 | -| | | | | | -| **all fields (micro avg.)** | **76.29** | **66.6** | **71.12** | 236881 | -| all fields (macro avg.) | 59.46 | 48.95 | 50.6 | 236881 | - - -**Document-level ratio results** - -| label | precision | recall | f1 | support | -|--- |--- |--- |--- |--- | -| availability_stmt | 96.3 | 89.21 | 92.62 | 584 | -| | | | | | -| **all fields (micro avg.)** | **96.3** | **89.21** | **92.62** | 584 | -| all fields (macro avg.) | 96.3 | 89.21 | 92.62 | 584 | - -Evaluation metrics produced in 640.707 seconds From b6af547def90a60b73d208f7b7c69cd5f6660611 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Mon, 12 Aug 2024 09:55:09 +0200 Subject: [PATCH 14/22] correct internal links --- doc/training/General-principles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/training/General-principles.md b/doc/training/General-principles.md index f5edef0b18..dd40f3e3cc 100644 --- a/doc/training/General-principles.md +++ b/doc/training/General-principles.md @@ -8,7 +8,7 @@ This maybe of interest if the current state of the models does not correctly rec The addition of training in Grobid is __not__ done from scratch, but from pre-annotated training data generated by the existing models in Grobid. This ensures that the syntax of the new training data will be (normally) correct and that the stream of text will be easy to align with the text extracted from the PDF. This permits also to take advantage of the existing models which will annotate correctly a certain amount of text, and to focus on the corrections, thus improving the productivity of the annotator. -For generating pre-annotated training files for Grobid based on the existing models, see the instructions for running the software in batch [here](../Training-the-models-of-Grobid/#generation-of-training-data) and [here](../Grobid-batch/#createtraining). +For generating pre-annotated training files for Grobid based on the existing models, see the instructions for running the software in batch [here](../../Training-the-models-of-Grobid/#generation-of-training-data) and [here](../../Grobid-batch/#createtraining). After running the batch `createTraining` on a set of PDF files using methods for creating training data, each article comes with: From a266e7331598e731d78e5a13feb4cd432fc05695 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Mon, 12 Aug 2024 10:38:41 +0200 Subject: [PATCH 15/22] avoid null pointer exceptions during training data generation with certain nasty documents --- .../grobid/core/engines/FullTextParser.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/grobid-core/src/main/java/org/grobid/core/engines/FullTextParser.java b/grobid-core/src/main/java/org/grobid/core/engines/FullTextParser.java index 953d92f8b1..d2b1bf8661 100755 --- a/grobid-core/src/main/java/org/grobid/core/engines/FullTextParser.java +++ b/grobid-core/src/main/java/org/grobid/core/engines/FullTextParser.java @@ -1234,17 +1234,19 @@ public Document createTraining(File inputFile, "\t\t\t\t<biblStruct>\n\t\t\t\t\t<analytic>\n\n"); for (LabeledReferenceResult ref : references) { - if ( (ref.getReferenceText() != null) && (ref.getReferenceText().trim().length() > 0) ) { + if ( StringUtils.isNotBlank(ref.getReferenceText()) ) { BiblioItem bib = parsers.getCitationParser().processingString(ref.getReferenceText(), 0); - String authorSequence = bib.getAuthors(); - if ((authorSequence != null) && (authorSequence.trim().length() > 0) ) { - /*List<String> inputs = new ArrayList<String>(); - inputs.add(authorSequence);*/ - StringBuilder bufferName = parsers.getAuthorParser().trainingExtraction(authorSequence, false); - if ( (bufferName != null) && (bufferName.length()>0) ) { - writerName.write("\n\t\t\t\t\t\t<author>"); - writerName.write(bufferName.toString()); - writerName.write("</author>\n"); + if (bib != null) { + String authorSequence = bib.getAuthors(); + if (StringUtils.isNotBlank(authorSequence)) { + /*List<String> inputs = new ArrayList<String>(); + inputs.add(authorSequence);*/ + StringBuilder bufferName = parsers.getAuthorParser().trainingExtraction(authorSequence, false); + if ((bufferName != null) && (bufferName.length() > 0)) { + writerName.write("\n\t\t\t\t\t\t<author>"); + writerName.write(bufferName.toString()); + writerName.write("</author>\n"); + } } } } From 0019c54e3add96e36bc03c5d4dea91d9e2029302 Mon Sep 17 00:00:00 2001 From: lopezp <patrice.lopez@science-miner.com> Date: Thu, 15 Aug 2024 15:17:32 +0200 Subject: [PATCH 16/22] fix merging --- .../src/main/java/org/grobid/core/document/TEIFormatter.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java b/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java index 7691e0998d..3545acb61f 100755 --- a/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java +++ b/grobid-core/src/main/java/org/grobid/core/document/TEIFormatter.java @@ -1642,10 +1642,7 @@ public StringBuilder toTEITextPiece(StringBuilder buffer, String type = referenceInformation.getMiddle(); OffsetPosition matchingPosition = referenceInformation.getRight(); - if (pos > matchingPosition.start) - break; - - if (pos >= matchingPosition.start) + if (pos > matchingPosition.start) break; List<LayoutToken> before = clusterTokens.subList(pos, matchingPosition.start); From fc7081604eb14e96c989a0517307136b918d8fa9 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Tue, 27 Aug 2024 22:01:59 +0200 Subject: [PATCH 17/22] udpate github actions and fix dockerfile --- .github/workflows/ci-build-manual-crf.yml | 4 ++-- .github/workflows/ci-build-manual-full.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-build-manual-crf.yml b/.github/workflows/ci-build-manual-crf.yml index 619529d63b..7c448bb87c 100644 --- a/.github/workflows/ci-build-manual-crf.yml +++ b/.github/workflows/ci-build-manual-crf.yml @@ -26,12 +26,12 @@ jobs: steps: - name: Create more disk space run: sudo rm -rf /usr/share/dotnet && sudo rm -rf /opt/ghc && sudo rm -rf "/usr/local/share/boost" && sudo rm -rf "$AGENT_TOOLSDIRECTORY" - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Build and push id: docker_build uses: mr-smithers-excellent/docker-build-push@v6 with: - dockerfile: Dockerfile + dockerfile: Dockerfile.crf username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} image: lfoppiano/grobid diff --git a/.github/workflows/ci-build-manual-full.yml b/.github/workflows/ci-build-manual-full.yml index 9671177fa8..ce1a0a175b 100644 --- a/.github/workflows/ci-build-manual-full.yml +++ b/.github/workflows/ci-build-manual-full.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Create more disk space run: sudo rm -rf /usr/share/dotnet && sudo rm -rf /opt/ghc && sudo rm -rf "/usr/local/share/boost" && sudo rm -rf "$AGENT_TOOLSDIRECTORY" - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Build and push id: docker_build uses: mr-smithers-excellent/docker-build-push@v5 From a2720a37c625041dda707820a4589867b5466311 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Fri, 30 Aug 2024 08:44:10 +0200 Subject: [PATCH 18/22] update secrets env variables --- .github/workflows/ci-build-manual-crf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build-manual-crf.yml b/.github/workflows/ci-build-manual-crf.yml index 7c448bb87c..82f3a2c3b5 100644 --- a/.github/workflows/ci-build-manual-crf.yml +++ b/.github/workflows/ci-build-manual-crf.yml @@ -32,8 +32,8 @@ jobs: uses: mr-smithers-excellent/docker-build-push@v6 with: dockerfile: Dockerfile.crf - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + username: ${{ secrets.DOCKERHUB_USERNAME_LFOPPIANO }} + password: ${{ secrets.DOCKERHUB_TOKEN_LFOPPIANO }} image: lfoppiano/grobid registry: docker.io pushImage: true From 70256977e37bf14ce664cbc494b75da6c9074e8c Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Fri, 30 Aug 2024 09:05:05 +0200 Subject: [PATCH 19/22] add suffix when building manually --- .github/workflows/ci-build-manual-crf.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-build-manual-crf.yml b/.github/workflows/ci-build-manual-crf.yml index 82f3a2c3b5..84a1c56465 100644 --- a/.github/workflows/ci-build-manual-crf.yml +++ b/.github/workflows/ci-build-manual-crf.yml @@ -1,8 +1,12 @@ name: Build and push a CRF-only docker image -on: - workflow_dispatch: - +on: + workflow_dispatch: + inputs: + suffix: + type: string + description: Docker image suffix (e.g. develop, crf, full) + required: false jobs: build: @@ -37,6 +41,8 @@ jobs: image: lfoppiano/grobid registry: docker.io pushImage: true - tags: latest-develop, latest-crf + tags: | + latest-develop${{ github.event.inputs.suffix && '-' + github.event.inputs.suffix || '' }} + latest-crf${{ github.event.inputs.suffix && '-' + github.event.inputs.suffix || '' }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} From e40e30c029d500d6ca4a2d061b3cc9948c002e36 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Fri, 30 Aug 2024 10:43:23 +0200 Subject: [PATCH 20/22] only add the suffix to the latest-crf --- .github/workflows/ci-build-manual-crf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build-manual-crf.yml b/.github/workflows/ci-build-manual-crf.yml index 815d4e8cc2..6606f0bfd1 100644 --- a/.github/workflows/ci-build-manual-crf.yml +++ b/.github/workflows/ci-build-manual-crf.yml @@ -42,6 +42,6 @@ jobs: registry: docker.io pushImage: true tags: | - latest-develop${{ github.event.inputs.suffix != '' && '-' || '' }}${{ github.event.inputs.suffix }}, latest-crf${{ github.event.inputs.suffix != '' && '-' || '' }}${{ github.event.inputs.suffix }} + latest-develop, latest-crf${{ github.event.inputs.suffix != '' && '-' || '' }}${{ github.event.inputs.suffix }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} From 8cc06b70c85264e8a243d530c9089ee8ce130850 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Fri, 30 Aug 2024 17:38:46 +0200 Subject: [PATCH 21/22] avoid gradle to download jdks automatically, and use the old source/target compatibility with kotlin --- build.gradle | 26 +++++++++++++++++--------- gradle.properties | 2 ++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 8c716c69c0..c94aa3d939 100644 --- a/build.gradle +++ b/build.gradle @@ -60,18 +60,25 @@ subprojects { } } -// sourceCompatibility = 1.11 -// targetCompatibility = 1.11 + sourceCompatibility = 1.11 + targetCompatibility = 1.11 - kotlin { - jvmToolchain(11) + tasks.withType(KotlinCompile).configureEach { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } - java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } - } +// kotlin { +// jvmToolchain(11) +// } + +// java { +// toolchain { +// languageVersion.set(JavaLanguageVersion.of(11)) +// vendor.set(JvmVendorSpec.ADOPTIUM) +// +// } +// } repositories { mavenCentral() @@ -316,6 +323,7 @@ project("grobid-home") { } import org.apache.tools.ant.taskdefs.condition.Os +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile project(":grobid-service") { apply plugin: 'application' diff --git a/gradle.properties b/gradle.properties index 7b3c318651..67c6121e23 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,3 +10,5 @@ org.gradle.vfs.watch = true #systemProp.https.proxyPort= #systemProp.https.proxyHost= #systemProp.https.proxyPort= + +org.gradle.java.installations.auto-download=false From d15e4d29227ec2c9410aa829177b52e137614278 Mon Sep 17 00:00:00 2001 From: Luca Foppiano <luca@foppiano.org> Date: Fri, 30 Aug 2024 18:07:25 +0200 Subject: [PATCH 22/22] fix kotlin and java target warning --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index c94aa3d939..e90717a7a6 100644 --- a/build.gradle +++ b/build.gradle @@ -66,6 +66,9 @@ subprojects { tasks.withType(KotlinCompile).configureEach { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11 + } } // kotlin {