diff --git a/src/main/java/org/grobid/core/engines/DatasetParser.java b/src/main/java/org/grobid/core/engines/DatasetParser.java index 4d75fef..1b9d192 100644 --- a/src/main/java/org/grobid/core/engines/DatasetParser.java +++ b/src/main/java/org/grobid/core/engines/DatasetParser.java @@ -79,6 +79,10 @@ public class DatasetParser extends AbstractParser { private static final java.util.concurrent.atomic.AtomicBoolean gluttonWarningLogged = new java.util.concurrent.atomic.AtomicBoolean(false); + // guard to warn only once about the disambiguator not being available + private static final java.util.concurrent.atomic.AtomicBoolean disambiguatorWarningLogged = + new java.util.concurrent.atomic.AtomicBoolean(false); + private EngineParsers parsers; private DatastetServiceConfiguration datastetConfiguration; private DataTypeClassifier dataTypeClassifier; @@ -91,6 +95,12 @@ private static void warnGluttonNotConfiguredOnce() { } } + private static void warnDisambiguatorNotAvailableOnce() { + if (disambiguatorWarningLogged.compareAndSet(false, true)) { + LOGGER.warn("Dataset disambiguator is not available, dataset disambiguation will be skipped"); + } + } + public static DatasetParser getInstance( DatastetServiceConfiguration configuration, DataTypeClassifier dataTypeClassifier, @@ -122,7 +132,7 @@ private DatasetParser(DatastetServiceConfiguration configuration) { DatastetLexicon.getInstance(); this.parsers = new EngineParsers(); this.datastetConfiguration = configuration; - this.disambiguator = disambiguator; + this.disambiguator = DatasetDisambiguator.getInstance(configuration.getDatastetConfiguration()); this.datasetContextClassifier = datasetContextClassifier; } @@ -273,22 +283,26 @@ public List> processing(List datasetDocum // disambiguation if (disambiguate) { - localDatasets = disambiguator.disambiguate(localDatasets, tokens); - - // apply existing filtering - indexToBeFiltered = new ArrayList<>(); - k = 0; - for (Dataset entity : localDatasets) { - if (entity.isFiltered()) { - indexToBeFiltered.add(Integer.valueOf(k)); + if (disambiguator != null) { + localDatasets = disambiguator.disambiguate(localDatasets, tokens); + + // apply existing filtering + indexToBeFiltered = new ArrayList<>(); + k = 0; + for (Dataset entity : localDatasets) { + if (entity.isFiltered()) { + indexToBeFiltered.add(Integer.valueOf(k)); + } + k++; } - k++; - } - if (indexToBeFiltered.size() > 0) { - for (int j = indexToBeFiltered.size() - 1; j >= 0; j--) { - localDatasets.remove(indexToBeFiltered.get(j).intValue()); + if (indexToBeFiltered.size() > 0) { + for (int j = indexToBeFiltered.size() - 1; j >= 0; j--) { + localDatasets.remove(indexToBeFiltered.get(j).intValue()); + } } + } else { + warnDisambiguatorNotAvailableOnce(); } }