You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opennlp.apache.org by rz...@apache.org on 2024/09/05 11:32:47 UTC

(opennlp) 01/01: OPENNLP-1600 - Ability to disable POS mapper

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

rzo1 pushed a commit to branch OPENNLP-1600-Ability-to-disable-POS-mapper
in repository https://gitbox.apache.org/repos/asf/opennlp.git

commit a1ee9fdbd5cce10d1bd5ea8c96ac2229a9810881
Author: Richard Zowalla <rz...@apache.org>
AuthorDate: Thu Sep 5 13:32:36 2024 +0200

    OPENNLP-1600 - Ability to disable POS mapper
---
 .../java/opennlp/tools/postag/POSTagFormat.java    |  2 +-
 .../opennlp/tools/postag/POSTagFormatMapper.java   | 26 +++++++++++++++++++++-
 .../java/opennlp/tools/postag/POSTaggerME.java     | 11 +++++----
 .../java/opennlp/tools/postag/POSTaggerMETest.java | 16 +++++++++++++
 4 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormat.java b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormat.java
index ddb9cc5f..66affc56 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormat.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormat.java
@@ -23,5 +23,5 @@ package opennlp.tools.postag;
  */
 public enum POSTagFormat {
 
-  UD, PENN, UNKNOWN
+  UD, PENN, CUSTOM, UNKNOWN
 }
diff --git a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormatMapper.java b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormatMapper.java
index b01a36ac..38d6e27f 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormatMapper.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagFormatMapper.java
@@ -119,7 +119,7 @@ public class POSTagFormatMapper {
   }
 
   /**
-   * Converts a a list of tags to the specified format.
+   * Converts a list of tags to the specified format.
    *
    * @param tags a list of tags to be converted.
    * @return an array containing the converted tags with the same order and size as the given input list.
@@ -218,4 +218,28 @@ public class POSTagFormatMapper {
     final POSTagFormatMapper mapper = new POSTagFormatMapper(posModel.getPosSequenceModel().getOutcomes());
     return mapper.getGuessedFormat();
   }
+
+  public static class NoOp extends POSTagFormatMapper {
+
+    protected NoOp() {
+      super(new String[0]);
+    }
+
+    @Override
+    public String[] convertTags(List<String> tags) {
+      Objects.requireNonNull(tags, "tags must not be NULL.");
+      return tags.toArray(new String[0]);
+    }
+
+    @Override
+    public String convertTag(String tag) {
+      return tag;
+    }
+
+    @Override
+    public POSTagFormat getGuessedFormat() {
+      return POSTagFormat.CUSTOM;
+    }
+
+  }
 }
diff --git a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerME.java b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerME.java
index 2deb5738..cd419e67 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerME.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerME.java
@@ -85,7 +85,8 @@ public class POSTaggerME implements POSTagger {
   private final SequenceValidator<String> sequenceValidator;
 
   private final POSTagFormat posTagFormat;
-  private final POSTagFormatMapper posTagFormatMapper;
+
+  protected final POSTagFormatMapper posTagFormatMapper;
 
   /**
    * Initializes a {@link POSTaggerME} by downloading a default model for a given
@@ -151,7 +152,9 @@ public class POSTaggerME implements POSTagger {
       this.model = new BeamSearch(beamSize, model.getArtifact(POSModel.POS_MODEL_ENTRY_NAME), 0);
     }
 
-    this.posTagFormatMapper = new POSTagFormatMapper(getAllPosTags());
+    this.posTagFormatMapper = (format == POSTagFormat.CUSTOM)
+        ? new POSTagFormatMapper.NoOp()
+        : new POSTagFormatMapper(getAllPosTags());
 
   }
 
@@ -193,7 +196,8 @@ public class POSTaggerME implements POSTagger {
   }
 
   private String[] convertTags(List<String> t) {
-    if (posTagFormatMapper.getGuessedFormat() == posTagFormat) {
+    if (posTagFormat == POSTagFormat.CUSTOM
+        || posTagFormatMapper.getGuessedFormat() == posTagFormat) {
       return t.toArray(new String[0]);
     } else {
       return posTagFormatMapper.convertTags(t);
@@ -402,5 +406,4 @@ public class POSTaggerME implements POSTagger {
 
     logger.info("... finished expanding POS Dictionary. [ {} ms]", (System.nanoTime() - start) / 1000000);
   }
-
 }
diff --git a/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java b/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java
index d01fe3ab..49da2042 100644
--- a/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java
+++ b/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java
@@ -93,6 +93,22 @@ public class POSTaggerMETest extends AbstractModelLoaderTest {
         POSTagFormat.UD), sentence, expected);
   }
 
+  @Test
+  void testPOSTaggerMappingNoOp() throws IOException {
+    final String[] sentence = {
+        "The",
+        "driver",
+        "got",
+        "badly",
+        "injured",
+        "."};
+
+    final String[] expected = {"DT", "NN", "VBD", "RB", "VBN", "."};
+    //leave it as is
+    testPOSTagger(new POSTaggerME(trainPennFormatPOSModel(ModelType.MAXENT),
+        POSTagFormat.CUSTOM), sentence, expected);
+  }
+
   @Test
   @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org")
   void testPOSTaggerDefault() throws IOException {