This is an automated email from the ASF dual-hosted git repository.

mawiesne pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opennlp.git


The following commit(s) were added to refs/heads/main by this push:
     new 0cfb24e3 OPENNLP-1652 Add additional constructors for 
ThreadSafePOSTaggerME (#690)
0cfb24e3 is described below

commit 0cfb24e31d380bad3a9345975f7a0c9a08e307a9
Author: Martin Wiesner <[email protected]>
AuthorDate: Sun Nov 24 10:37:58 2024 +0100

    OPENNLP-1652 Add additional constructors for ThreadSafePOSTaggerME (#690)
---
 .../tools/postag/ThreadSafePOSTaggerME.java        | 52 ++++++++++++++++++++--
 1 file changed, 49 insertions(+), 3 deletions(-)

diff --git 
a/opennlp-tools/src/main/java/opennlp/tools/postag/ThreadSafePOSTaggerME.java 
b/opennlp-tools/src/main/java/opennlp/tools/postag/ThreadSafePOSTaggerME.java
index b567f1ea..36984212 100644
--- 
a/opennlp-tools/src/main/java/opennlp/tools/postag/ThreadSafePOSTaggerME.java
+++ 
b/opennlp-tools/src/main/java/opennlp/tools/postag/ThreadSafePOSTaggerME.java
@@ -17,12 +17,15 @@
 
 package opennlp.tools.postag;
 
+import java.io.IOException;
+
 import opennlp.tools.commons.ThreadSafe;
+import opennlp.tools.util.DownloadUtil;
 import opennlp.tools.util.Sequence;
 
 /**
- * A thread-safe version of the POSTaggerME. Using it is completely 
transparent. You can use it in
- * a single-threaded context as well, it only incurs a minimal overhead.
+ * A thread-safe version of the {@link POSTaggerME}. Using it is completely 
transparent.
+ * You can use it in a single-threaded context as well, it only incurs a 
minimal overhead.
  * <p>
  * Note, however, that this implementation uses a {@link ThreadLocal}. 
Although the implementation is
  * lightweight because the model is not duplicated, if you have many 
long-running threads,
@@ -32,23 +35,66 @@ import opennlp.tools.util.Sequence;
  * Be careful when using this in a Jakarta EE application, for example.
  * </p>
  * The user is responsible for clearing the {@link ThreadLocal}.
+ *
+ * @see POSTagger
  */
 @ThreadSafe
 public class ThreadSafePOSTaggerME implements POSTagger, AutoCloseable {
 
   private final POSModel model;
 
+  private final POSTagFormat posTagFormat;
+
   private final ThreadLocal<POSTaggerME> threadLocal = new ThreadLocal<>();
 
+  /**
+   * Initializes a {@link ThreadSafePOSTaggerME} by downloading a default 
model for a given
+   * {@code language}.
+   *
+   * @param language An ISO conform language code.
+   * @throws IOException Thrown if the model could not be downloaded or saved.
+   */
+  public ThreadSafePOSTaggerME(String language) throws IOException {
+    this(language, POSTagFormat.UD);
+  }
+
+  /**
+   * Initializes a {@link ThreadSafePOSTaggerME} by downloading a default model
+   * for a given {@code language}.
+   *
+   * @param language An ISO conform language code.
+   * @param format   A valid {@link POSTagFormat}.
+   * @throws IOException Thrown if the model could not be downloaded or saved.
+   */
+  public ThreadSafePOSTaggerME(String language, POSTagFormat format) throws 
IOException {
+    this(DownloadUtil.downloadModel(language, DownloadUtil.ModelType.POS, 
POSModel.class), format);
+  }
+
+  /**
+   * Initializes a {@link ThreadSafePOSTaggerME} with the specified {@code 
model}.
+   *
+   * @param model A valid {@link POSModel}.
+   */
   public ThreadSafePOSTaggerME(POSModel model) {
+    this(model, POSTagFormat.UD);
+  }
+
+  /**
+   * Initializes a {@link ThreadSafePOSTaggerME} with the specified {@link 
POSModel model}.
+   *
+   * @param model  A valid {@link POSModel}.
+   * @param format A valid {@link POSTagFormat}.
+   */
+  public ThreadSafePOSTaggerME(POSModel model, POSTagFormat format) {
     super();
     this.model = model;
+    this.posTagFormat = format;
   }
 
   private POSTaggerME getTagger() {
     POSTaggerME tagger = threadLocal.get();
     if (tagger == null) {
-      tagger = new POSTaggerME(model);
+      tagger = new POSTaggerME(model, posTagFormat);
       threadLocal.set(tagger);
     }
     return tagger;

Reply via email to