diff --git a/grobid-core/src/main/java/org/grobid/core/jni/DeLFTModel.java b/grobid-core/src/main/java/org/grobid/core/jni/DeLFTModel.java index dcb53a2932..69caeef98c 100644 --- a/grobid-core/src/main/java/org/grobid/core/jni/DeLFTModel.java +++ b/grobid-core/src/main/java/org/grobid/core/jni/DeLFTModel.java @@ -4,6 +4,7 @@ import org.grobid.core.GrobidModels; import org.grobid.core.exceptions.GrobidException; import org.grobid.core.utilities.GrobidProperties; +import org.grobid.core.utilities.IOUtilities; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,8 +69,29 @@ public LabelTask(String modelName, String data) { //System.out.println("label thread: " + Thread.currentThread().getId()); this.modelName = modelName; this.data = data; - } - + } + + private void setJepStringValueWithFileFallback( + Jep jep, String name, String value + ) throws JepException, IOException { + try { + jep.set(name, value); + } catch(JepException e) { + File tempFile = IOUtilities.newTempFile(name, ".data"); + LOGGER.debug( + "Falling back to file {} due to exception: {}", + tempFile, e.toString() + ); + IOUtilities.writeInFile(tempFile.getAbsolutePath(), value); + jep.eval("from pathlib import Path"); + jep.eval( + name + " = Path('" + tempFile.getAbsolutePath() + + "').read_text(encoding='utf-8')" + ); + tempFile.delete(); + } + } + @Override public String call() { Jep jep = JEPThreadPool.getInstance().getJEPInstance(); @@ -78,7 +100,7 @@ public String call() { //System.out.println(this.data); // load and tag - jep.set("input", this.data); + this.setJepStringValueWithFileFallback(jep, "input", this.data); jep.eval("x_all, f_all = load_data_crf_string(input)"); Object objectResults = jep.getValue(this.modelName+".tag(x_all, None)");