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 a43bf6d2 OPENNLP-1174 - Remove classic format support in feature
generator XML config (#541)
a43bf6d2 is described below
commit a43bf6d2839e9c41a96d1824d1ece0ab2e262b81
Author: Richard Zowalla <[email protected]>
AuthorDate: Fri Jun 23 07:36:58 2023 +0200
OPENNLP-1174 - Remove classic format support in feature generator XML
config (#541)
---
.../opennlp/tools/postag/POSTaggerFactory.java | 57 +-
.../AggregatedFeatureGeneratorFactory.java | 40 +-
.../featuregen/ArtifactToSerializerMapper.java | 27 -
.../BigramNameFeatureGeneratorFactory.java | 19 +-
.../BrownClusterBigramFeatureGeneratorFactory.java | 29 +-
...wnClusterTokenClassFeatureGeneratorFactory.java | 29 +-
.../BrownClusterTokenFeatureGeneratorFactory.java | 29 +-
.../featuregen/CachedFeatureGeneratorFactory.java | 43 +-
.../CharacterNgramFeatureGeneratorFactory.java | 39 +-
.../util/featuregen/CustomFeatureGenerator.java | 35 -
.../DefinitionFeatureGeneratorFactory.java | 18 +-
.../DictionaryFeatureGeneratorFactory.java | 30 +-
.../DocumentBeginFeatureGeneratorFactory.java | 18 +-
.../tools/util/featuregen/GeneratorFactory.java | 829 ++++++++-------------
.../POSTaggerNameFeatureGeneratorFactory.java | 28 +-
.../PosTaggerFeatureGeneratorFactory.java | 18 +-
.../featuregen/PrefixFeatureGeneratorFactory.java | 28 +-
.../PreviousMapFeatureGeneratorFactory.java | 18 +-
.../SentenceFeatureGeneratorFactory.java | 30 +-
.../featuregen/SuffixFeatureGeneratorFactory.java | 28 +-
.../TokenClassFeatureGeneratorFactory.java | 32 +-
.../featuregen/TokenFeatureGeneratorFactory.java | 18 +-
.../TokenPatternFeatureGeneratorFactory.java | 18 +-
.../TrigramNameFeatureGeneratorFactory.java | 19 +-
.../featuregen/WindowFeatureGeneratorFactory.java | 66 +-
.../WordClusterFeatureGeneratorFactory.java | 32 +-
.../namefind/ner-default-features_classic.xml | 36 -
.../tools/postag/pos-default-features_classic.xml | 38 -
.../FeatureGenWithSerializerMapping.java | 55 --
.../GeneratorFactoryClassicFormatTest.java | 147 ----
.../tools/namefind/ner-pos-features_classic.xml | 36 -
.../CustomClassLoadingWithSerializers_classic.xml | 22 -
.../util/featuregen/CustomClassLoading_classic.xml | 22 -
...ureGeneratorConfigWithUnkownElement_classic.xml | 26 -
...ctionarySerializerMappingExtraction_classic.xml | 22 -
.../TestFeatureGeneratorConfig_classic.xml | 25 -
...estTokenClassFeatureGeneratorConfig_classic.xml | 24 -
37 files changed, 362 insertions(+), 1668 deletions(-)
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerFactory.java
index f8e4017c..c9be3053 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerFactory.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerFactory.java
@@ -68,8 +68,8 @@ public class POSTaggerFactory extends BaseToolFactory {
* Initializes a {@link POSTaggerFactory} from a given set of the resources.
*
* @param featureGeneratorBytes The bytes for feature generation.
- * @param resources Additional resources as key-value map.
- * @param posDictionary A {@link TagDictionary} used for the new instance.
+ * @param resources Additional resources as key-value map.
+ * @param posDictionary A {@link TagDictionary} used for the new
instance.
*/
public POSTaggerFactory(byte[] featureGeneratorBytes, final Map<String,
Object> resources,
TagDictionary posDictionary) {
@@ -94,7 +94,8 @@ public class POSTaggerFactory extends BaseToolFactory {
}
// reduced visibility to ensure deprecation is respected in future versions
- @Deprecated // will be removed when only 8 series models are supported
+ @Deprecated
+ // will be removed when only 8 series models are supported
void init(Dictionary ngramDictionary, TagDictionary posDictionary) {
this.ngramDictionary = ngramDictionary;
this.posDictionary = posDictionary;
@@ -114,7 +115,7 @@ public class POSTaggerFactory extends BaseToolFactory {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
InputStream resource = POSTaggerFactory.class.getResourceAsStream(
- "/opennlp/tools/postag/pos-default-features.xml");
+ "/opennlp/tools/postag/pos-default-features.xml");
if (resource == null) {
throw new IllegalStateException("Classpath must contain
'pos-default-features.xml' file!");
}
@@ -125,8 +126,7 @@ public class POSTaggerFactory extends BaseToolFactory {
while ((len = in.read(buf)) > 0) {
bytes.write(buf, 0, len);
}
- }
- catch (IOException e) {
+ } catch (IOException e) {
throw new IllegalStateException("Failed reading from
'pos-default-features.xml' file on classpath!");
}
@@ -154,15 +154,12 @@ public class POSTaggerFactory extends BaseToolFactory {
featureGeneratorBytes = loadDefaultFeatureGeneratorBytes();
}
- InputStream descriptorIn = new ByteArrayInputStream(featureGeneratorBytes);
-
AdaptiveFeatureGenerator generator;
- try {
+ try (InputStream descriptorIn = new
ByteArrayInputStream(featureGeneratorBytes)) {
generator = GeneratorFactory.create(descriptorIn, key -> {
if (artifactProvider != null) {
return artifactProvider.getArtifact(key);
- }
- else {
+ } else {
return resources.get(key);
}
});
@@ -178,7 +175,7 @@ public class POSTaggerFactory extends BaseToolFactory {
// that this can only be caused by a programming mistake and therefore
// throwing a Runtime Exception is reasonable
- throw new IllegalStateException(); // FeatureGeneratorCreationError(e);
+ throw new IllegalStateException(e); // FeatureGeneratorCreationError(e);
} catch (IOException e) {
throw new IllegalStateException("Reading from mem cannot result in an
I/O error", e);
}
@@ -202,11 +199,13 @@ public class POSTaggerFactory extends BaseToolFactory {
public Map<String, Object> createArtifactMap() {
Map<String, Object> artifactMap = super.createArtifactMap();
- if (posDictionary != null)
+ if (posDictionary != null) {
artifactMap.put(TAG_DICTIONARY_ENTRY_NAME, posDictionary);
+ }
- if (ngramDictionary != null)
+ if (ngramDictionary != null) {
artifactMap.put(NGRAM_DICTIONARY_ENTRY_NAME, ngramDictionary);
+ }
return artifactMap;
}
@@ -216,7 +215,6 @@ public class POSTaggerFactory extends BaseToolFactory {
*
* @param dictionary The {@link File} used for creating the dictionary.
* @return A valid {@link TagDictionary} ready for use.
- *
* @throws IOException Thrown if IO errors occurred during creation.
*/
public TagDictionary createTagDictionary(File dictionary)
@@ -229,7 +227,6 @@ public class POSTaggerFactory extends BaseToolFactory {
*
* @param in The {@link InputStream} used for creating the dictionary.
* @return A valid {@link TagDictionary} ready for use.
- *
* @throws IOException Thrown if IO errors occurred during creation.
*/
public TagDictionary createTagDictionary(InputStream in)
@@ -267,15 +264,17 @@ public class POSTaggerFactory extends BaseToolFactory {
* @return The {@link TagDictionary} used.
*/
public TagDictionary getTagDictionary() {
- if (this.posDictionary == null && artifactProvider != null)
+ if (this.posDictionary == null && artifactProvider != null) {
this.posDictionary =
artifactProvider.getArtifact(TAG_DICTIONARY_ENTRY_NAME);
+ }
return this.posDictionary;
}
@Deprecated(forRemoval = true) // will be removed when only 8 series models
are supported
private Dictionary getDictionary() {
- if (this.ngramDictionary == null && artifactProvider != null)
+ if (this.ngramDictionary == null && artifactProvider != null) {
this.ngramDictionary =
artifactProvider.getArtifact(NGRAM_DICTIONARY_ENTRY_NAME);
+ }
return this.ngramDictionary;
}
@@ -302,7 +301,7 @@ public class POSTaggerFactory extends BaseToolFactory {
return new DefaultPOSContextGenerator(cacheSize, getDictionary());
}
}
-
+
return new ConfigurablePOSContextGenerator(cacheSize,
createFeatureGenerators());
}
@@ -333,7 +332,7 @@ public class POSTaggerFactory extends BaseToolFactory {
}
protected void validatePOSDictionary(POSDictionary posDict, AbstractModel
posModel)
- throws InvalidFormatException {
+ throws InvalidFormatException {
Set<String> dictTags = new HashSet<>();
for (String word : posDict) {
@@ -392,7 +391,7 @@ public class POSTaggerFactory extends BaseToolFactory {
// reduced visibility to ensure deprecation is respected in future versions
@Deprecated
static POSTaggerFactory create(String subclassName,
- Dictionary ngramDictionary, TagDictionary posDictionary)
+ Dictionary ngramDictionary, TagDictionary
posDictionary)
throws InvalidFormatException {
if (subclassName == null) {
// will create the default factory
@@ -413,15 +412,14 @@ public class POSTaggerFactory extends BaseToolFactory {
/**
* Instantiates a {@link POSTaggerFactory} via a given {@code subclassName}.
*
- * @param subclassName The class name used for instantiation. If {@code
null}, an
- * instance of {@link POSTaggerFactory} will be returned
- * per default. Otherwise, the {@link ExtensionLoader}
mechanism
- * is applied to load the requested {@code subclassName}.
+ * @param subclassName The class name used for instantiation. If
{@code null}, an
+ * instance of {@link POSTaggerFactory} will be
returned
+ * per default. Otherwise, the {@link
ExtensionLoader} mechanism
+ * is applied to load the requested {@code
subclassName}.
* @param featureGeneratorBytes The bytes for feature generation.
- * @param resources Additional resources as key-value map.
- * @param posDictionary A {@link TagDictionary} used for the new instance.
+ * @param resources Additional resources as key-value map.
+ * @param posDictionary A {@link TagDictionary} used for the new
instance.
* @return @return A valid {@link POSTaggerFactory} instance.
- *
* @throws InvalidFormatException Thrown if the {@link ExtensionLoader}
mechanism failed to
* load the factory via the {@code
subclassName}.
*/
@@ -435,8 +433,7 @@ public class POSTaggerFactory extends BaseToolFactory {
// will create the default factory
theFactory = new POSTaggerFactory();
theFactory.init(featureGeneratorBytes, resources, posDictionary);
- }
- else {
+ } else {
try {
theFactory =
ExtensionLoader.instantiateExtension(POSTaggerFactory.class, subclassName);
} catch (Exception e) {
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeatureGeneratorFactory.java
index 442eba4d..a3f3595c 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeatureGeneratorFactory.java
@@ -18,63 +18,31 @@
package opennlp.tools.util.featuregen;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see AggregatedFeatureGenerator
*/
public class AggregatedFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public AggregatedFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- Collection<AdaptiveFeatureGenerator> aggregatedGenerators = new
LinkedList<>();
-
- NodeList childNodes = generatorElement.getChildNodes();
-
- for (int i = 0; i < childNodes.getLength(); i++) {
- Node childNode = childNodes.item(i);
- if (childNode instanceof Element) {
- Element aggregatedGeneratorElement = (Element) childNode;
- aggregatedGenerators.add(
- GeneratorFactory.createGenerator(aggregatedGeneratorElement,
resourceManager));
- }
- }
-
- return new AggregatedFeatureGenerator(aggregatedGenerators.toArray(
- new AdaptiveFeatureGenerator[0]));
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("generators", new AggregatedFeatureGeneratorFactory());
- }
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
List<AdaptiveFeatureGenerator> aggregatedGenerators = new ArrayList<>();
- for (Map.Entry<String, Object> arg: args.entrySet()) {
+ for (Map.Entry<String, Object> arg : args.entrySet()) {
if (arg.getKey().startsWith("generator#")) {
- aggregatedGenerators.add((AdaptiveFeatureGenerator)arg.getValue());
+ aggregatedGenerators.add((AdaptiveFeatureGenerator) arg.getValue());
}
}
return new AggregatedFeatureGenerator(aggregatedGenerators.toArray(
- new AdaptiveFeatureGenerator[0]));
+ new AdaptiveFeatureGenerator[0]));
}
}
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/ArtifactToSerializerMapper.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/ArtifactToSerializerMapper.java
deleted file mode 100644
index f4723188..00000000
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/ArtifactToSerializerMapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package opennlp.tools.util.featuregen;
-
-import java.util.Map;
-
-import opennlp.tools.util.model.ArtifactSerializer;
-
-@Deprecated // TODO: (OPENNLP-1174) remove back-compat support when it is
unnecessary
-public interface ArtifactToSerializerMapper {
- Map<String, ArtifactSerializer<?>> getArtifactSerializerMapping();
-}
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeatureGeneratorFactory.java
index c1f666a6..8b60d8ae 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeatureGeneratorFactory.java
@@ -17,32 +17,15 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
public class BigramNameFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public BigramNameFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
-
- return new BigramNameFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("bigram", new BigramNameFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new BigramNameFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterBigramFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterBigramFeatureGeneratorFactory.java
index 668a2b92..7c9ee952 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterBigramFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterBigramFeatureGeneratorFactory.java
@@ -20,8 +20,6 @@ package opennlp.tools.util.featuregen;
import java.util.HashMap;
import java.util.Map;
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.model.ArtifactSerializer;
@@ -29,39 +27,18 @@ import opennlp.tools.util.model.ArtifactSerializer;
* Generates Brown clustering features for token bigrams.
*/
public class BrownClusterBigramFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public BrownClusterBigramFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String dictResourceKey = generatorElement.getAttribute("dict");
-
- Object dictResource = resourceManager.getResource(dictResourceKey);
-
-
- if (!(dictResource instanceof BrownCluster)) {
- throw new InvalidFormatException("Not a BrownLexicon resource for key: "
+ dictResourceKey);
- }
-
- return new BrownBigramFeatureGenerator((BrownCluster) dictResource);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("brownclusterbigram", new
BrownClusterBigramFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
// if resourceManager is null, we don't instantiate
- if (resourceManager == null)
+ if (resourceManager == null) {
return null;
+ }
String dictResourceKey = getStr("dict");
Object dictResource = resourceManager.getResource(dictResourceKey);
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenClassFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenClassFeatureGeneratorFactory.java
index 905762b3..47bc8390 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenClassFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenClassFeatureGeneratorFactory.java
@@ -20,8 +20,6 @@ package opennlp.tools.util.featuregen;
import java.util.HashMap;
import java.util.Map;
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.model.ArtifactSerializer;
@@ -29,39 +27,18 @@ import opennlp.tools.util.model.ArtifactSerializer;
* Generates Brown clustering features for token classes.
*/
public class BrownClusterTokenClassFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public BrownClusterTokenClassFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String dictResourceKey = generatorElement.getAttribute("dict");
-
- Object dictResource = resourceManager.getResource(dictResourceKey);
-
-
- if (!(dictResource instanceof BrownCluster)) {
- throw new InvalidFormatException("Not a BrownLexicon resource for key: "
+ dictResourceKey);
- }
-
- return new BrownTokenClassFeatureGenerator((BrownCluster) dictResource);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("brownclustertokenclass", new
BrownClusterTokenClassFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
// if resourceManager is null, we don't instantiate
- if (resourceManager == null)
+ if (resourceManager == null) {
return null;
+ }
String dictResourceKey = getStr("dict");
Object dictResource = resourceManager.getResource(dictResourceKey);
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenFeatureGeneratorFactory.java
index 3d866ac8..fa3f834f 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenFeatureGeneratorFactory.java
@@ -20,8 +20,6 @@ package opennlp.tools.util.featuregen;
import java.util.HashMap;
import java.util.Map;
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.model.ArtifactSerializer;
@@ -29,39 +27,18 @@ import opennlp.tools.util.model.ArtifactSerializer;
* Generates Brown clustering features for current token.
*/
public class BrownClusterTokenFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public BrownClusterTokenFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String dictResourceKey = generatorElement.getAttribute("dict");
-
- Object dictResource = resourceManager.getResource(dictResourceKey);
-
-
- if (!(dictResource instanceof BrownCluster)) {
- throw new InvalidFormatException("Not a BrownLexicon resource for key: "
+ dictResourceKey);
- }
-
- return new BrownTokenFeatureGenerator((BrownCluster) dictResource);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("brownclustertoken", new
BrownClusterTokenFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
// if resourceManager is null, we don't instantiate
- if (resourceManager == null)
+ if (resourceManager == null) {
return null;
+ }
String dictResourceKey = getStr("dict");
Object dictResource = resourceManager.getResource(dictResourceKey);
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGeneratorFactory.java
index e59b4490..70c0610e 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGeneratorFactory.java
@@ -18,60 +18,21 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see CachedFeatureGenerator
*/
public class CachedFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public CachedFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- Element cachedGeneratorElement = null;
-
- NodeList kids = generatorElement.getChildNodes();
-
- for (int i = 0; i < kids.getLength(); i++) {
- Node childNode = kids.item(i);
-
- if (childNode instanceof Element) {
- cachedGeneratorElement = (Element) childNode;
- break;
- }
- }
-
- if (cachedGeneratorElement == null) {
- throw new InvalidFormatException("Could not find containing generator
element!");
- }
-
- AdaptiveFeatureGenerator cachedGenerator =
- GeneratorFactory.createGenerator(cachedGeneratorElement,
resourceManager);
-
- return new CachedFeatureGenerator(cachedGenerator);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("cache", new CachedFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
- AdaptiveFeatureGenerator generator =
(AdaptiveFeatureGenerator)args.get("generator#0");
+ AdaptiveFeatureGenerator generator = (AdaptiveFeatureGenerator)
args.get("generator#0");
if (generator == null) {
throw new InvalidFormatException("Could not find containing generator
element!");
}
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGeneratorFactory.java
index b3756262..f449f8db 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGeneratorFactory.java
@@ -17,55 +17,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see CharacterNgramFeatureGenerator
*/
public class CharacterNgramFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public CharacterNgramFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String minString = generatorElement.getAttribute("min");
-
- int min;
-
- try {
- min = Integer.parseInt(minString);
- } catch (NumberFormatException e) {
- throw new InvalidFormatException("min attribute '" + minString + "' is
not a number!", e);
- }
-
- String maxString = generatorElement.getAttribute("max");
-
- int max;
-
- try {
- max = Integer.parseInt(maxString);
- } catch (NumberFormatException e) {
- throw new InvalidFormatException("max attribute '" + maxString + "' is
not a number!", e);
- }
-
- return new CharacterNgramFeatureGenerator(min, max);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("charngram", new CharacterNgramFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new CharacterNgramFeatureGenerator(getInt("min"), getInt("max"));
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CustomFeatureGenerator.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CustomFeatureGenerator.java
deleted file mode 100644
index d8f9c39d..00000000
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CustomFeatureGenerator.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package opennlp.tools.util.featuregen;
-
-import java.util.Map;
-
-import opennlp.tools.util.InvalidFormatException;
-
-@Deprecated // TODO: (OPENNLP-1174) remove back-compat support when it is
unnecessary
-public abstract class CustomFeatureGenerator implements
AdaptiveFeatureGenerator {
-
- /**
- * Initializes {@link CustomFeatureGenerator} with defined properties and
loaded resources.
- *
- * @param properties The {@link Map} properties to use.
- * @param resourceProvider The {@link FeatureGeneratorResourceProvider} to
use.
- */
- public abstract void init(Map<String, String> properties,
FeatureGeneratorResourceProvider resourceProvider)
- throws InvalidFormatException;
-}
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DefinitionFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DefinitionFeatureGeneratorFactory.java
index e33bacb7..cbe8ce4f 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DefinitionFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DefinitionFeatureGeneratorFactory.java
@@ -17,18 +17,13 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see DefinitionFeatureGeneratorFactory
*/
public class DefinitionFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
private static final String ELEMENT_NAME = "definition";
@@ -36,17 +31,6 @@ public class DefinitionFeatureGeneratorFactory
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
- return new OutcomePriorFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put(ELEMENT_NAME, new DefinitionFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new OutcomePriorFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeatureGeneratorFactory.java
index 50b70e84..72b253b5 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeatureGeneratorFactory.java
@@ -20,8 +20,6 @@ package opennlp.tools.util.featuregen;
import java.util.HashMap;
import java.util.Map;
-import org.w3c.dom.Element;
-
import opennlp.tools.dictionary.Dictionary;
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.model.ArtifactSerializer;
@@ -31,40 +29,18 @@ import opennlp.tools.util.model.DictionarySerializer;
* @see DictionaryFeatureGenerator
*/
public class DictionaryFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public DictionaryFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String dictResourceKey = generatorElement.getAttribute("dict");
-
- Object dictResource = resourceManager.getResource(dictResourceKey);
-
- if (!(dictResource instanceof Dictionary)) {
- throw new InvalidFormatException("No dictionary resource for key: " +
dictResourceKey);
- }
-
- String prefix = generatorElement.getAttribute("prefix");
-
- return new DictionaryFeatureGenerator(prefix, (Dictionary) dictResource);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("dictionary", new DictionaryFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
// if resourceManager is null, we don't instantiate
- if (resourceManager == null)
+ if (resourceManager == null) {
return null;
+ }
String dictResourceKey = getStr("dict");
Object dictResource = resourceManager.getResource(dictResourceKey);
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeatureGeneratorFactory.java
index 8256f8ee..419d4b25 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeatureGeneratorFactory.java
@@ -17,31 +17,15 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
public class DocumentBeginFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public DocumentBeginFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
- return new DocumentBeginFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("docbegin", new DocumentBeginFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new DocumentBeginFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/GeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/GeneratorFactory.java
index 9b957af3..efbae0ec 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/GeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/GeneratorFactory.java
@@ -34,7 +34,6 @@ import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
@@ -42,10 +41,7 @@ import org.xml.sax.SAXException;
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.XmlUtil;
-import opennlp.tools.util.ext.ExtensionLoader;
import opennlp.tools.util.model.ArtifactSerializer;
-import opennlp.tools.util.model.DictionarySerializer;
-import opennlp.tools.util.model.POSModelSerializer;
/**
* Creates a set of feature generators based on a provided XML descriptor.
@@ -74,15 +70,11 @@ import opennlp.tools.util.model.POSModelSerializer;
* </generator>
* </featureGenerators>
* </p>
- *
- * Each XML element is mapped to a {@link
GeneratorFactory.XmlFeatureGeneratorFactory} which
+ * Each XML element is mapped to a {@link
GeneratorFactory.AbstractXmlFeatureGeneratorFactory} which
* is responsible to process the element and create the specified
* {@link AdaptiveFeatureGenerator}. Elements can contain other
* elements in this case it is the responsibility of the mapped factory to
process
- * the child elements correctly. In some factories this leads to recursive
- * calls the
- * {@link GeneratorFactory.XmlFeatureGeneratorFactory#create(Element,
FeatureGeneratorResourceProvider)}
- * method.
+ * the child elements correctly.
* <p>
* In the example above the generators element is mapped to the
* {@link AggregatedFeatureGeneratorFactory} which then
@@ -95,25 +87,239 @@ import opennlp.tools.util.model.POSModelSerializer;
public class GeneratorFactory {
/**
- * The {@link XmlFeatureGeneratorFactory} is responsible to construct
- * an {@link AdaptiveFeatureGenerator} from an given XML {@link Element}
- * which contains all necessary configuration if any.
+ * Creates an {@link AdaptiveFeatureGenerator} from an provided XML
descriptor.
+ * <p>
+ * Usually this XML descriptor contains a set of nested feature generators
+ * which are then used to generate the features by one of the opennlp
+ * components.
+ *
+ * @param xmlDescriptorIn the {@link InputStream} from which the descriptor
+ * is read, the stream remains open and must be
closed by the caller.
+ * @param resourceManager the resource manager which is used to resolve
resources
+ * referenced by a key in the descriptor
+ * @return created feature generators
+ * @throws IOException if an error occurs during reading from the descriptor
+ * {@link InputStream}
*/
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- interface XmlFeatureGeneratorFactory {
+ public static AdaptiveFeatureGenerator create(InputStream xmlDescriptorIn,
+
FeatureGeneratorResourceProvider resourceManager)
+ throws IOException {
- /**
- * Creates an {@link AdaptiveFeatureGenerator} from a the describing
- * XML element.
- *
- * @param generatorElement the element which contains the configuration
- * @param resourceManager the resource manager which could be used
- * to access referenced resources
- *
- * @return the configured {@link AdaptiveFeatureGenerator}
- */
- AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException;
+ final org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn);
+ final Element generatorElement = xmlDescriptorDOM.getDocumentElement();
+
+ return createGenerator(generatorElement, resourceManager);
+ }
+
+ /**
+ * Creates an {@link AdaptiveFeatureGenerator} for the provided element.
+ * To accomplish this it looks up the corresponding factory by the
+ * element tag name. The factory is then responsible for the creation
+ * of the generator from the element.
+ *
+ * @param generatorElement must not be {@code null}
+ * @param resourceManager may be {@code null}
+ * @return an {@link AdaptiveFeatureGenerator}
+ * @throws IllegalArgumentException if the given {@link Element
generatorElement} is {@code null}.
+ * @throws IllegalStateException if the given {@link Element
generatorElement} has
+ * no {@code class} attribute.
+ */
+ private static AdaptiveFeatureGenerator buildGenerator(Element
generatorElement,
+
FeatureGeneratorResourceProvider resourceManager)
+ throws InvalidFormatException {
+
+ if (generatorElement == null) {
+ throw new IllegalArgumentException("generatorElement must not be NULL");
+ }
+
+ final String className = generatorElement.getAttribute("class");
+ if (className.isBlank()) {
+ throw new InvalidFormatException("generator must have class attribute");
+ } else {
+ try {
+ final Class<?> factoryClass = Class.forName(className);
+ try {
+ final Constructor<?> constructor = factoryClass.getConstructor();
+ final AbstractXmlFeatureGeneratorFactory factory =
+ (AbstractXmlFeatureGeneratorFactory) constructor.newInstance();
+ factory.init(generatorElement, resourceManager);
+ return factory.create();
+ } catch (NoSuchMethodException | InvocationTargetException |
InstantiationException
+ | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ /**
+ * Creates an {@link AdaptiveFeatureGenerator} for the provided element.
+ * To accomplish this it looks up the corresponding factory by the
+ * element tag name. The factory is then responsible for the creation
+ * of the generator from the element.
+ *
+ * @param generatorElement must not be {@code null}
+ * @param resourceManager may be {@code null}
+ * @return an {@link AdaptiveFeatureGenerator}
+ * @throws IllegalArgumentException if the given {@link Element
generatorElement} is {@code null}
+ */
+ private static AdaptiveFeatureGenerator createGenerator(Element
generatorElement,
+
FeatureGeneratorResourceProvider resourceManager)
+ throws InvalidFormatException {
+
+ if (generatorElement == null) {
+ throw new IllegalArgumentException("generatorElement must not be NULL");
+ }
+
+ final String elementName = generatorElement.getTagName();
+
+ // check it is new format?
+ if ("featureGenerators".equals(elementName)) {
+
+ final List<AdaptiveFeatureGenerator> generators = new ArrayList<>();
+ final NodeList childNodes = generatorElement.getChildNodes();
+ for (int i = 0; i < childNodes.getLength(); i++) {
+ final Node childNode = childNodes.item(i);
+ if (childNode instanceof Element elem) {
+ final String type = elem.getTagName();
+ if ("generator".equals(type)) {
+ generators.add(buildGenerator(elem, resourceManager));
+ } else {
+ throw new InvalidFormatException("Unexpected element: " +
elementName);
+ }
+ }
+ }
+
+ AdaptiveFeatureGenerator featureGenerator;
+ if (generators.size() == 1) {
+ featureGenerator = generators.get(0);
+ } else if (generators.size() > 1) {
+ featureGenerator = new AggregatedFeatureGenerator(generators.toArray(
+ new AdaptiveFeatureGenerator[0]));
+ } else {
+ throw new InvalidFormatException("featureGenerators must have one or
more generators");
+ }
+
+ // disallow manually specifying CachedFeatureGenerator
+ if (featureGenerator instanceof CachedFeatureGenerator) {
+ throw new InvalidFormatException("CachedFeatureGeneratorFactory cannot
be specified manually." +
+ "Use cache=\"true\" attribute in featureGenerators element
instead.");
+ }
+
+ // check cache usage
+ if (Boolean.parseBoolean(generatorElement.getAttribute("cache"))) {
+ return new CachedFeatureGenerator(featureGenerator);
+ } else {
+ return featureGenerator;
+ }
+ } else {
+ throw new IllegalArgumentException(
+ "[OPENNLP-1174] - Classic configuration format is no longer
supported!");
+ }
+ }
+
+ private static org.w3c.dom.Document createDOM(InputStream xmlDescriptorIn)
+ throws IOException {
+
+ final DocumentBuilder documentBuilder = XmlUtil.createDocumentBuilder();
+
+ org.w3c.dom.Document xmlDescriptorDOM;
+
+ try {
+ xmlDescriptorDOM = documentBuilder.parse(xmlDescriptorIn);
+ } catch (SAXException e) {
+ throw new InvalidFormatException("Descriptor is not valid XML!", e);
+ }
+ return xmlDescriptorDOM;
+ }
+
+ public static Map<String, ArtifactSerializer<?>>
extractArtifactSerializerMappings(
+ InputStream xmlDescriptorIn) throws IOException {
+
+ final org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn);
+ final Element element = xmlDescriptorDOM.getDocumentElement();
+
+ final String elementName = element.getTagName();
+
+ // check it is new format?
+ if ("featureGenerators".equals(elementName)) {
+ return addMappingsFromXmlChildren(element.getChildNodes(), new
HashMap<>());
+ } else {
+ throw new IllegalArgumentException(
+ "[OPENNLP-1174] - Classic configuration format is no longer
supported!");
+ }
+ }
+
+ private static void extractArtifactSerializerMappings(
+ Map<String, ArtifactSerializer<?>> mapping, Element element) {
+ final String className = element.getAttribute("class");
+ if (!className.isBlank()) {
+ try {
+ final Class<?> factoryClass = Class.forName(className);
+ try {
+ final Constructor<?> constructor = factoryClass.getConstructor();
+ final AbstractXmlFeatureGeneratorFactory factory =
+ (AbstractXmlFeatureGeneratorFactory) constructor.newInstance();
+ factory.init(element, null);
+ final Map<String, ArtifactSerializer<?>> map =
factory.getArtifactSerializerMapping();
+ if (map != null) {
+ mapping.putAll(map);
+ }
+ } catch (NoSuchMethodException | InvocationTargetException |
InstantiationException
+ | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidFormatException ignored) {
+ }
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ addMappingsFromXmlChildren(element.getChildNodes(), mapping);
+ }
+
+ private static Map<String, ArtifactSerializer<?>> addMappingsFromXmlChildren(
+ final NodeList nodes, final Map<String, ArtifactSerializer<?>> mapping) {
+ for (int i = 0; i < nodes.getLength(); i++) {
+ if (nodes.item(i) instanceof Element childElem) {
+ if ("generator".equals(childElem.getTagName())) {
+ extractArtifactSerializerMappings(mapping, childElem);
+ }
+ }
+ }
+ return mapping;
+ }
+
+ /**
+ * Provides a list with all the elements in the xml feature descriptor.
+ *
+ * @param xmlDescriptorIn the xml feature descriptor
+ * @return a list containing all elements
+ * @throws IOException if the given {@link InputStream} cannot be
open
+ * @throws InvalidFormatException if xml is not well-formed
+ */
+ public static List<Element> getDescriptorElements(InputStream
xmlDescriptorIn)
+ throws IOException {
+
+ final List<Element> elements = new ArrayList<>();
+ final org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn);
+ final XPath xPath = XPathFactory.newInstance().newXPath();
+ NodeList allElements;
+ try {
+ final XPathExpression exp = xPath.compile("//*");
+ allElements = (NodeList)
exp.evaluate(xmlDescriptorDOM.getDocumentElement(), XPathConstants.NODESET);
+ } catch (XPathExpressionException e) {
+ throw new InvalidFormatException("The hard coded XPath expression should
always be valid!");
+ }
+
+ for (int i = 0; i < allElements.getLength(); i++) {
+ if (allElements.item(i) instanceof Element customElement) {
+ elements.add(customElement);
+ }
+ }
+ return elements;
}
public static abstract class AbstractXmlFeatureGeneratorFactory {
@@ -128,8 +334,7 @@ public class GeneratorFactory {
args = new LinkedHashMap<>();
}
- public Map<String, ArtifactSerializer<?>>
- getArtifactSerializerMapping() throws InvalidFormatException {
+ public Map<String, ArtifactSerializer<?>> getArtifactSerializerMapping()
throws InvalidFormatException {
return null;
}
@@ -141,44 +346,30 @@ public class GeneratorFactory {
NodeList childNodes = generatorElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
- if (childNode instanceof Element) {
- Element elem = (Element)childNode;
+ if (childNode instanceof Element elem) {
String type = elem.getTagName();
if (type.equals("generator")) {
String key = "generator#" + generators.size();
AdaptiveFeatureGenerator afg = buildGenerator(elem,
resourceManager);
generators.add(afg);
- if (afg != null)
+ if (afg != null) {
args.put(key, afg);
- }
- else {
+ }
+ } else {
String name = elem.getAttribute("name");
Node cn = elem.getFirstChild();
- Text text = (Text)cn;
+ Text text = (Text) cn;
switch (type) {
- case "int" :
- args.put(name, Integer.parseInt(text.getWholeText()));
- break;
- case "long" :
- args.put(name, Long.parseLong(text.getWholeText()));
- break;
- case "float" :
- args.put(name, Float.parseFloat(text.getWholeText()));
- break;
- case "double" :
- args.put(name, Double.parseDouble(text.getWholeText()));
- break;
- case "str" :
- args.put(name, text.getWholeText());
- break;
- case "bool" :
- args.put(name, Boolean.parseBoolean(text.getWholeText()));
- break;
- default:
- throw new InvalidFormatException(
- "child element must be one of generator, int, long, float,
double," +
- " str or bool");
+ case "int" -> args.put(name,
Integer.parseInt(text.getWholeText()));
+ case "long" -> args.put(name,
Long.parseLong(text.getWholeText()));
+ case "float" -> args.put(name,
Float.parseFloat(text.getWholeText()));
+ case "double" -> args.put(name,
Double.parseDouble(text.getWholeText()));
+ case "str" -> args.put(name, text.getWholeText());
+ case "bool" -> args.put(name,
Boolean.parseBoolean(text.getWholeText()));
+ default -> throw new InvalidFormatException(
+ "child element must be one of generator, int, long, float,
double," +
+ " str or bool");
}
}
}
@@ -187,137 +378,117 @@ public class GeneratorFactory {
if (generators.size() > 1) {
AdaptiveFeatureGenerator aggregatedFeatureGenerator =
new AggregatedFeatureGenerator(generators.toArray(
- new AdaptiveFeatureGenerator[0]));
+ new AdaptiveFeatureGenerator[0]));
args.put("generator#0", aggregatedFeatureGenerator);
}
}
public int getInt(String name) throws InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
throw new InvalidFormatException("parameter " + name + " must be
set!");
- }
- else if (value instanceof Integer) {
- return (Integer)value;
- }
- else {
+ } else if (value instanceof Integer) {
+ return (Integer) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
integer!");
}
}
public int getInt(String name, int defValue) throws InvalidFormatException
{
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
return defValue;
- }
- else if (value instanceof Integer) {
- return (Integer)value;
- }
- else {
+ } else if (value instanceof Integer) {
+ return (Integer) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
integer!");
}
}
public long getLong(String name) throws InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
throw new InvalidFormatException("parameter " + name + " must be
set!");
- }
- else if (value instanceof Long) {
- return (Long)value;
- }
- else {
+ } else if (value instanceof Long) {
+ return (Long) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
long!");
}
}
public long getLong(String name, long defValue) throws
InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
return defValue;
- }
- else if (value instanceof Long) {
- return (Long)value;
- }
- else {
+ } else if (value instanceof Long) {
+ return (Long) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
long!");
}
}
public float getFloat(String name) throws InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
throw new InvalidFormatException("parameter " + name + " must be
set!");
- }
- else if (value instanceof Float) {
- return (Float)value;
- }
- else {
+ } else if (value instanceof Float) {
+ return (Float) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
float!");
}
}
public float getFloat(String name, float defValue) throws
InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
return defValue;
- }
- else if (value instanceof Float) {
- return (Float)value;
- }
- else {
+ } else if (value instanceof Float) {
+ return (Float) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
float!");
}
}
public double getDouble(String name) throws InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
throw new InvalidFormatException("parameter " + name + " must be
set!");
- }
- else if (value instanceof Double) {
- return (Double)value;
- }
- else {
+ } else if (value instanceof Double) {
+ return (Double) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
double!");
}
}
public double getDouble(String name, double defValue) throws
InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
return defValue;
- }
- else if (value instanceof Double) {
- return (Double)value;
- }
- else {
+ } else if (value instanceof Double) {
+ return (Double) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
double!");
}
}
public String getStr(String name) throws InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
throw new InvalidFormatException("parameter " + name + " must be
set!");
- }
- else if (value instanceof String) {
- return (String)value;
- }
- else {
+ } else if (value instanceof String) {
+ return (String) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
double!");
}
}
public String getStr(String name, String defValue) throws
InvalidFormatException {
- Object value = args.get(name);
+ final Object value = args.get(name);
if (value == null) {
return defValue;
- }
- else if (value instanceof String) {
- return (String)value;
- }
- else {
+ } else if (value instanceof String) {
+ return (String) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
String!");
}
}
@@ -326,11 +497,9 @@ public class GeneratorFactory {
Object value = args.get(name);
if (value == null) {
throw new InvalidFormatException("parameter " + name + " must be
set!");
- }
- else if (value instanceof Boolean) {
- return (Boolean)value;
- }
- else {
+ } else if (value instanceof Boolean) {
+ return (Boolean) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
boolean!");
}
}
@@ -339,425 +508,17 @@ public class GeneratorFactory {
Object value = args.get(name);
if (value == null) {
return defValue;
- }
- else if (value instanceof Boolean) {
- return (Boolean)value;
- }
- else {
+ } else if (value instanceof Boolean) {
+ return (Boolean) value;
+ } else {
throw new InvalidFormatException("parameter " + name + " must be
boolean!");
}
}
/**
- *
* @return null if the subclass uses {@link #resourceManager} to
instantiate
* @throws InvalidFormatException
*/
public abstract AdaptiveFeatureGenerator create() throws
InvalidFormatException;
}
-
- // TODO: We have to support custom resources here. How does it work ?!
- // Attributes get into a Map<String, String> properties
-
- // How can serialization be supported ?!
- // The model is loaded, and the manifest should contain all serializer
classes registered for the
- // resources by name.
- // When training, the descriptor could be consulted first to register the
serializers, and afterwards
- // they are stored in the model.
-
- // TODO: (OPENNLP-1174) just remove this class when back-compat is no longer
needed
- static class CustomFeatureGeneratorFactory implements
XmlFeatureGeneratorFactory {
-
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String featureGeneratorClassName =
generatorElement.getAttribute("class");
-
- AdaptiveFeatureGenerator generator =
- ExtensionLoader.instantiateExtension(AdaptiveFeatureGenerator.class,
featureGeneratorClassName);
-
- if (generator instanceof CustomFeatureGenerator) {
-
- CustomFeatureGenerator customGenerator = (CustomFeatureGenerator)
generator;
-
- Map<String, String> properties = new HashMap<>();
-
- NamedNodeMap attributes = generatorElement.getAttributes();
-
- for (int i = 0; i < attributes.getLength(); i++) {
- Node attribute = attributes.item(i);
- if (!"class".equals(attribute.getNodeName())) {
- properties.put(attribute.getNodeName(), attribute.getNodeValue());
- }
- }
-
- if (resourceManager != null) {
- customGenerator.init(properties, resourceManager);
- }
- }
-
- return generator;
- }
-
- static void register(Map<String, XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("custom", new CustomFeatureGeneratorFactory());
- }
- }
-
- // TODO: (OPENNLP-1174) just remove when back-compat is no longer needed
- private final static Map<String, XmlFeatureGeneratorFactory> factories = new
HashMap<>();
-
- // TODO: (OPENNLP-1174) just remove when back-compat is no longer needed
- static {
- AggregatedFeatureGeneratorFactory.register(factories);
- CachedFeatureGeneratorFactory.register(factories);
- CharacterNgramFeatureGeneratorFactory.register(factories);
- DefinitionFeatureGeneratorFactory.register(factories);
- DictionaryFeatureGeneratorFactory.register(factories);
- DocumentBeginFeatureGeneratorFactory.register(factories);
- PreviousMapFeatureGeneratorFactory.register(factories);
- SentenceFeatureGeneratorFactory.register(factories);
- TokenClassFeatureGeneratorFactory.register(factories);
- TokenFeatureGeneratorFactory.register(factories);
- BigramNameFeatureGeneratorFactory.register(factories);
- TokenPatternFeatureGeneratorFactory.register(factories);
- PosTaggerFeatureGeneratorFactory.register(factories);
- PrefixFeatureGeneratorFactory.register(factories);
- SuffixFeatureGeneratorFactory.register(factories);
- WindowFeatureGeneratorFactory.register(factories);
- WordClusterFeatureGeneratorFactory.register(factories);
- BrownClusterTokenFeatureGeneratorFactory.register(factories);
- BrownClusterTokenClassFeatureGeneratorFactory.register(factories);
- BrownClusterBigramFeatureGeneratorFactory.register(factories);
- CustomFeatureGeneratorFactory.register(factories);
- POSTaggerNameFeatureGeneratorFactory.register(factories);
- }
-
- /**
- * Creates a {@link AdaptiveFeatureGenerator} for the provided element.
- * To accomplish this it looks up the corresponding factory by the
- * element tag name. The factory is then responsible for the creation
- * of the generator from the element.
- *
- * @param generatorElement
- * @param resourceManager
- *
- * @return
- */
- @Deprecated // TODO: (OPENNLP-1174) remove back-compat support when it is
unnecessary
- static AdaptiveFeatureGenerator createGenerator(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String elementName = generatorElement.getTagName();
-
- // check it is new format?
- if (elementName.equals("featureGenerators")) {
-
- List<AdaptiveFeatureGenerator> generators = new ArrayList<>();
- NodeList childNodes = generatorElement.getChildNodes();
- for (int i = 0; i < childNodes.getLength(); i++) {
- Node childNode = childNodes.item(i);
- if (childNode instanceof Element) {
- Element elem = (Element)childNode;
- String type = elem.getTagName();
- if (type.equals("generator")) {
- generators.add(buildGenerator(elem, resourceManager));
- }
- else
- throw new InvalidFormatException("Unexpected element: " +
elementName);
- }
- }
-
- AdaptiveFeatureGenerator featureGenerator = null;
- if (generators.size() == 1)
- featureGenerator = generators.get(0);
- else if (generators.size() > 1)
- featureGenerator = new AggregatedFeatureGenerator(generators.toArray(
- new AdaptiveFeatureGenerator[0]));
- else
- throw new InvalidFormatException("featureGenerators must have one or
more generators");
-
- // disallow manually specifying CachedFeatureGenerator
- if (featureGenerator instanceof CachedFeatureGenerator)
- throw new InvalidFormatException("CachedFeatureGeneratorFactory cannot
be specified manually." +
- "Use cache=\"true\" attribute in featureGenerators element
instead.");
-
- // check cache usage
- if (Boolean.parseBoolean(generatorElement.getAttribute("cache")))
- return new CachedFeatureGenerator(featureGenerator);
- else
- return featureGenerator;
- }
- else {
- // support classic format
- XmlFeatureGeneratorFactory generatorFactory = factories.get(elementName);
- if (generatorFactory != null) {
- return generatorFactory.create(generatorElement, resourceManager);
- }
- else
- throw new InvalidFormatException("Unexpected element: " + elementName);
- }
- }
-
- static Element getFirstChild(Element elem) {
- NodeList nodes = elem.getChildNodes();
- for (int i = 0; i < nodes.getLength(); i++) {
- if (nodes.item(i) instanceof Element) {
- return (Element)nodes.item(i);
- }
- }
- return null;
- }
-
- /**
- * Creates a {@link AdaptiveFeatureGenerator} for the provided element.
- * To accomplish this it looks up the corresponding factory by the
- * element tag name. The factory is then responsible for the creation
- * of the generator from the element.
- *
- * @param generatorElement
- * @param resourceManager
- *
- * @return
- */
- static AdaptiveFeatureGenerator buildGenerator(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
- String className = generatorElement.getAttribute("class");
- if (className == null) {
- throw new InvalidFormatException("generator must have class attribute");
- }
- else {
- try {
- Class<?> factoryClass = Class.forName(className);
- try {
- Constructor<?> constructor = factoryClass.getConstructor();
- AbstractXmlFeatureGeneratorFactory factory =
- (AbstractXmlFeatureGeneratorFactory)constructor.newInstance();
- factory.init(generatorElement, resourceManager);
- return factory.create();
- } catch (NoSuchMethodException | InvocationTargetException |
InstantiationException
- | IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
- }
-
- private static org.w3c.dom.Document createDOM(InputStream xmlDescriptorIn)
- throws IOException {
-
- DocumentBuilder documentBuilder = XmlUtil.createDocumentBuilder();
-
- org.w3c.dom.Document xmlDescriptorDOM;
-
- try {
- xmlDescriptorDOM = documentBuilder.parse(xmlDescriptorIn);
- } catch (SAXException e) {
- throw new InvalidFormatException("Descriptor is not valid XML!", e);
- }
- return xmlDescriptorDOM;
- }
-
- /**
- * Creates an {@link AdaptiveFeatureGenerator} from an provided XML
descriptor.
- * <p>
- * Usually this XML descriptor contains a set of nested feature generators
- * which are then used to generate the features by one of the opennlp
- * components.
- *
- * @param xmlDescriptorIn the {@link InputStream} from which the descriptor
- * is read, the stream remains open and must be closed by the caller.
- *
- * @param resourceManager the resource manager which is used to resolve
resources
- * referenced by a key in the descriptor
- *
- * @return created feature generators
- *
- * @throws IOException if an error occurs during reading from the descriptor
- * {@link InputStream}
- */
- public static AdaptiveFeatureGenerator create(InputStream xmlDescriptorIn,
- FeatureGeneratorResourceProvider resourceManager) throws IOException {
-
- org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn);
-
- Element generatorElement = xmlDescriptorDOM.getDocumentElement();
-
- // TODO: (OPENNLP-1174) use #buildGenerator() after back-compat support is
gone
- return createGenerator(generatorElement, resourceManager);
- }
-
- public static Map<String, ArtifactSerializer<?>>
extractArtifactSerializerMappings(
- InputStream xmlDescriptorIn) throws IOException {
-
- org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn);
- Element element = xmlDescriptorDOM.getDocumentElement();
-
- String elementName = element.getTagName();
-
- // check it is new format?
- if (elementName.equals("featureGenerators")) {
- Map<String, ArtifactSerializer<?>> mapping = new HashMap<>();
- NodeList nodes = element.getChildNodes();
- for (int i = 0; i < nodes.getLength(); i++) {
- if (nodes.item(i) instanceof Element) {
- Element childElem = (Element)nodes.item(i);
- if (childElem.getTagName().equals("generator")) {
- extractArtifactSerializerMappings(mapping, childElem);
- }
- }
- }
- return mapping;
- }
- else {
- return extractArtifactSerializerMappingsClassicFormat(element);
- }
- }
-
- static void extractArtifactSerializerMappings(Map<String,
ArtifactSerializer<?>> mapping, Element element) {
- String className = element.getAttribute("class");
- if (className != null) {
- try {
- Class<?> factoryClass = Class.forName(className);
- try {
- Constructor<?> constructor = factoryClass.getConstructor();
- AbstractXmlFeatureGeneratorFactory factory =
- (AbstractXmlFeatureGeneratorFactory)constructor.newInstance();
- factory.init(element, null);
- Map<String, ArtifactSerializer<?>> map =
factory.getArtifactSerializerMapping();
- if (map != null)
- mapping.putAll(map);
- } catch (NoSuchMethodException | InvocationTargetException |
InstantiationException
- | IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch (InvalidFormatException ignored) {
- }
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
-
- NodeList nodes = element.getChildNodes();
- for (int i = 0; i < nodes.getLength(); i++) {
- if (nodes.item(i) instanceof Element) {
- Element childElem = (Element)nodes.item(i);
- if (childElem.getTagName().equals("generator")) {
- extractArtifactSerializerMappings(mapping, childElem);
- }
- }
- }
- }
-
- @Deprecated // TODO: (OPENNLP-1174) remove back-compat support when it is
unnecessary
- static Map<String, ArtifactSerializer<?>>
extractArtifactSerializerMappingsClassicFormat(
- Element elem) throws IOException {
- Map<String, ArtifactSerializer<?>> mapping = new HashMap<>();
-
- XPath xPath = XPathFactory.newInstance().newXPath();
-
- NodeList customElements;
- try {
- XPathExpression exp = xPath.compile("//custom");
- customElements = (NodeList) exp.evaluate(elem, XPathConstants.NODESET);
- } catch (XPathExpressionException e) {
- throw new IllegalStateException("The hard coded XPath expression should
always be valid!");
- }
-
- for (int i = 0; i < customElements.getLength(); i++) {
- if (customElements.item(i) instanceof Element) {
- Element customElement = (Element) customElements.item(i);
-
- // Note: The resource provider is not available at that point, to
provide
- // resources they need to be loaded first!
- AdaptiveFeatureGenerator generator = createGenerator(customElement,
null);
-
- if (generator instanceof ArtifactToSerializerMapper) {
- ArtifactToSerializerMapper mapper = (ArtifactToSerializerMapper)
generator;
- mapping.putAll(mapper.getArtifactSerializerMapping());
- }
- }
- }
-
- NodeList allElements;
- try {
- XPathExpression exp = xPath.compile("//*");
- allElements = (NodeList) exp.evaluate(elem, XPathConstants.NODESET);
- } catch (XPathExpressionException e) {
- throw new IllegalStateException("The hard coded XPath expression should
always be valid!");
- }
-
- for (int i = 0; i < allElements.getLength(); i++) {
- if (allElements.item(i) instanceof Element) {
- Element xmlElement = (Element) allElements.item(i);
-
- String dictName = xmlElement.getAttribute("dict");
- if (dictName != null) {
-
- switch (xmlElement.getTagName()) {
- case "wordcluster":
- mapping.put(dictName, new
WordClusterDictionary.WordClusterDictionarySerializer());
- break;
-
- case "brownclustertoken":
- mapping.put(dictName, new BrownCluster.BrownClusterSerializer());
- break;
-
- case "brownclustertokenclass"://, ;
- mapping.put(dictName, new BrownCluster.BrownClusterSerializer());
- break;
-
- case "brownclusterbigram": //, ;
- mapping.put(dictName, new BrownCluster.BrownClusterSerializer());
- break;
-
- case "dictionary":
- mapping.put(dictName, new DictionarySerializer());
- break;
- }
- }
-
- String modelName = xmlElement.getAttribute("model");
- if (modelName != null) {
-
- if ("tokenpos".equals(xmlElement.getTagName())) {
- mapping.put(modelName, new POSModelSerializer());
- }
- }
- }
- }
-
- return mapping;
- }
-
- /**
- * Provides a list with all the elements in the xml feature descriptor.
- * @param xmlDescriptorIn the xml feature descriptor
- * @return a list containing all elements
- * @throws IOException if inputstream cannot be open
- * @throws InvalidFormatException if xml is not well-formed
- */
- public static List<Element> getDescriptorElements(InputStream
xmlDescriptorIn)
- throws IOException {
-
- List<Element> elements = new ArrayList<>();
- org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn);
- XPath xPath = XPathFactory.newInstance().newXPath();
- NodeList allElements;
- try {
- XPathExpression exp = xPath.compile("//*");
- allElements = (NodeList)
exp.evaluate(xmlDescriptorDOM.getDocumentElement(), XPathConstants.NODESET);
- } catch (XPathExpressionException e) {
- throw new IllegalStateException("The hard coded XPath expression should
always be valid!");
- }
-
- for (int i = 0; i < allElements.getLength(); i++) {
- if (allElements.item(i) instanceof Element) {
- Element customElement = (Element) allElements.item(i);
- elements.add(customElement);
- }
- }
- return elements;
- }
}
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGeneratorFactory.java
index 627f932c..3f44c8c6 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGeneratorFactory.java
@@ -20,8 +20,6 @@ package opennlp.tools.util.featuregen;
import java.util.HashMap;
import java.util.Map;
-import org.w3c.dom.Element;
-
import opennlp.tools.postag.POSModel;
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.model.ArtifactSerializer;
@@ -31,39 +29,21 @@ import opennlp.tools.util.model.POSModelSerializer;
* @see POSTaggerNameFeatureGenerator
*/
public class POSTaggerNameFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public POSTaggerNameFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager)
- throws InvalidFormatException {
-
- String modelResourceKey = generatorElement.getAttribute("model");
-
- POSModel model = (POSModel)resourceManager.getResource(modelResourceKey);
-
- return new POSTaggerNameFeatureGenerator(model);
-
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("tokenpos", new POSTaggerNameFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
// if resourceManager is null, we don't instantiate
- if (resourceManager == null)
+ if (resourceManager == null) {
return null;
+ }
String modelResourceKey = getStr("model");
- POSModel model = (POSModel)resourceManager.getResource(modelResourceKey);
+ POSModel model = (POSModel) resourceManager.getResource(modelResourceKey);
return new POSTaggerNameFeatureGenerator(model);
}
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureGeneratorFactory.java
index db4a09a8..88624db7 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureGeneratorFactory.java
@@ -17,31 +17,15 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
public class PosTaggerFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public PosTaggerFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
- return new PosTaggerFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("postagger", new PosTaggerFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new PosTaggerFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGeneratorFactory.java
index 4bd73ddb..4f475ae9 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGeneratorFactory.java
@@ -17,44 +17,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-import java.util.Objects;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see PrefixFeatureGenerator
*/
public class PrefixFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public PrefixFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider
resourceManager) {
-
- String attribute = generatorElement.getAttribute("length");
-
- int prefixLength = PrefixFeatureGenerator.DEFAULT_MAX_LENGTH;
-
- if (!Objects.equals(attribute, "")) {
- prefixLength = Integer.parseInt(attribute);
- }
-
- return new PrefixFeatureGenerator(prefixLength);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("prefix", new PrefixFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new PrefixFeatureGenerator(getInt("length",
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatureGeneratorFactory.java
index 855197da..6bfa846a 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatureGeneratorFactory.java
@@ -18,34 +18,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see PreviousMapFeatureGenerator
*/
public class PreviousMapFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public PreviousMapFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
- return new PreviousMapFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("prevmap", new PreviousMapFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new PreviousMapFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGeneratorFactory.java
index 9977852c..3ffefaa6 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGeneratorFactory.java
@@ -17,46 +17,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see SentenceFeatureGenerator
*/
public class SentenceFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public SentenceFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
-
- String beginFeatureString = generatorElement.getAttribute("begin");
-
- boolean beginFeature = true;
- if (beginFeatureString.length() != 0)
- beginFeature = Boolean.parseBoolean(beginFeatureString);
-
- String endFeatureString = generatorElement.getAttribute("end");
- boolean endFeature = true;
- if (endFeatureString.length() != 0)
- endFeature = Boolean.parseBoolean(endFeatureString);
-
- return new SentenceFeatureGenerator(beginFeature, endFeature);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("sentence", new SentenceFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
String beginFeatureString = generatorElement.getAttribute("begin");
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGeneratorFactory.java
index 99c24548..ef730943 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGeneratorFactory.java
@@ -17,44 +17,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-import java.util.Objects;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see SuffixFeatureGenerator
*/
public class SuffixFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public SuffixFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
-
- String attribute = generatorElement.getAttribute("length");
-
- int suffixLength = SuffixFeatureGenerator.DEFAULT_MAX_LENGTH;
-
- if (!Objects.equals(attribute, "")) {
- suffixLength = Integer.parseInt(attribute);
- }
-
- return new SuffixFeatureGenerator(suffixLength);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("suffix", new SuffixFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new SuffixFeatureGenerator(getInt("length",
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeatureGeneratorFactory.java
index bcedf7fa..54540823 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeatureGeneratorFactory.java
@@ -17,48 +17,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-import java.util.Objects;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see TokenClassFeatureGenerator
*/
public class TokenClassFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public TokenClassFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
-
- String attribute = generatorElement.getAttribute("wordAndClass");
-
- // Default to true.
- boolean generateWordAndClassFeature = true;
-
- if (!Objects.equals(attribute, "")) {
- // Anything other than "true" sets it to false.
- if (!"true".equalsIgnoreCase(attribute)) {
- generateWordAndClassFeature = false;
- }
- }
-
- return new TokenClassFeatureGenerator(generateWordAndClassFeature);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("tokenclass", new TokenClassFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new TokenClassFeatureGenerator(getBool("wordAndClass", true));
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGeneratorFactory.java
index 66603051..51ca9ad8 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGeneratorFactory.java
@@ -17,31 +17,15 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
public class TokenFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public TokenFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
- return new TokenFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("token", new TokenFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new TokenFeatureGenerator(getBool("lowercase", true));
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatureGeneratorFactory.java
index 92a1d5a9..05d64441 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatureGeneratorFactory.java
@@ -17,34 +17,18 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see TokenPatternFeatureGenerator
*/
public class TokenPatternFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public TokenPatternFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) {
- return new TokenPatternFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("tokenpattern", new TokenPatternFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new TokenPatternFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatureGeneratorFactory.java
index e9a4c348..80f1abee 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatureGeneratorFactory.java
@@ -17,32 +17,15 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
public class TrigramNameFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public TrigramNameFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider
resourceManager) {
-
- return new TrigramNameFeatureGenerator();
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("trigram", new TrigramNameFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
return new TrigramNameFeatureGenerator();
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGeneratorFactory.java
index 21d76573..8f413b87 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGeneratorFactory.java
@@ -17,83 +17,21 @@
package opennlp.tools.util.featuregen;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
import opennlp.tools.util.InvalidFormatException;
/**
* @see WindowFeatureGenerator
*/
public class WindowFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public WindowFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- Element nestedGeneratorElement = null;
-
- NodeList kids = generatorElement.getChildNodes();
-
- for (int i = 0; i < kids.getLength(); i++) {
- Node childNode = kids.item(i);
-
- if (childNode instanceof Element) {
- nestedGeneratorElement = (Element) childNode;
- break;
- }
- }
-
- if (nestedGeneratorElement == null) {
- throw new InvalidFormatException("window feature generator must contain"
+
- " an aggregator element");
- }
-
- AdaptiveFeatureGenerator nestedGenerator =
- GeneratorFactory.createGenerator(nestedGeneratorElement,
resourceManager);
-
- String prevLengthString = generatorElement.getAttribute("prevLength");
-
- int prevLength;
-
- try {
- prevLength = Integer.parseInt(prevLengthString);
- } catch (NumberFormatException e) {
- throw new InvalidFormatException("prevLength attribute '" +
prevLengthString
- + "' is not a number!", e);
- }
-
- String nextLengthString = generatorElement.getAttribute("nextLength");
-
- int nextLength;
-
- try {
- nextLength = Integer.parseInt(nextLengthString);
- } catch (NumberFormatException e) {
- throw new InvalidFormatException("nextLength attribute '" +
nextLengthString
- + "' is not a number!", e);
- }
-
- return new WindowFeatureGenerator(nestedGenerator, prevLength, nextLength);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("window", new WindowFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
- AdaptiveFeatureGenerator generator =
(AdaptiveFeatureGenerator)args.get("generator#0");
+ AdaptiveFeatureGenerator generator = (AdaptiveFeatureGenerator)
args.get("generator#0");
if (generator == null) {
throw new InvalidFormatException("window feature generator must contain"
+
" an aggregator element");
diff --git
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatureGeneratorFactory.java
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatureGeneratorFactory.java
index 5ad99de8..4381f129 100644
---
a/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatureGeneratorFactory.java
+++
b/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatureGeneratorFactory.java
@@ -20,8 +20,6 @@ package opennlp.tools.util.featuregen;
import java.util.HashMap;
import java.util.Map;
-import org.w3c.dom.Element;
-
import opennlp.tools.util.InvalidFormatException;
import opennlp.tools.util.model.ArtifactSerializer;
@@ -31,42 +29,18 @@ import opennlp.tools.util.model.ArtifactSerializer;
* word2vec or clark pos induction systems.
*/
public class WordClusterFeatureGeneratorFactory
- extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory
- implements GeneratorFactory.XmlFeatureGeneratorFactory {
+ extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory {
public WordClusterFeatureGeneratorFactory() {
super();
}
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- public AdaptiveFeatureGenerator create(Element generatorElement,
- FeatureGeneratorResourceProvider resourceManager) throws
InvalidFormatException {
-
- String dictResourceKey = generatorElement.getAttribute("dict");
- boolean lowerCaseDictionary =
"true".equals(generatorElement.getAttribute("lowerCase"));
-
- Object dictResource = resourceManager.getResource(dictResourceKey);
-
-
- if (!(dictResource instanceof WordClusterDictionary)) {
- throw new InvalidFormatException("Not a WordClusterDictionary resource
for key: "
- + dictResourceKey);
- }
-
- return new WordClusterFeatureGenerator((WordClusterDictionary)
dictResource,
- dictResourceKey, lowerCaseDictionary);
- }
-
- @Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no
longer needed
- static void register(Map<String,
GeneratorFactory.XmlFeatureGeneratorFactory> factoryMap) {
- factoryMap.put("wordcluster", new WordClusterFeatureGeneratorFactory());
- }
-
@Override
public AdaptiveFeatureGenerator create() throws InvalidFormatException {
// if resourceManager is null, we don't instantiate
- if (resourceManager == null)
+ if (resourceManager == null) {
return null;
+ }
String dictResourceKey = getStr("dict");
boolean lowerCaseDictionary = getBool("lowerCase");
diff --git
a/opennlp-tools/src/main/resources/opennlp/tools/namefind/ner-default-features_classic.xml
b/opennlp-tools/src/main/resources/opennlp/tools/namefind/ner-default-features_classic.xml
deleted file mode 100644
index f5b91ee9..00000000
---
a/opennlp-tools/src/main/resources/opennlp/tools/namefind/ner-default-features_classic.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<!-- Default name finder feature generator configuration -->
-<generators>
- <cache>
- <generators>
- <window prevLength = "2" nextLength = "2">
- <tokenclass/>
- </window>
- <window prevLength = "2" nextLength = "2">
- <token/>
- </window>
- <definition/>
- <prevmap/>
- <bigram/>
- <sentence begin="true" end="false"/>
- </generators>
- </cache>
-</generators>
\ No newline at end of file
diff --git
a/opennlp-tools/src/main/resources/opennlp/tools/postag/pos-default-features_classic.xml
b/opennlp-tools/src/main/resources/opennlp/tools/postag/pos-default-features_classic.xml
deleted file mode 100644
index 0be1fc83..00000000
---
a/opennlp-tools/src/main/resources/opennlp/tools/postag/pos-default-features_classic.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-
-<!-- Default pos tagger feature generator configuration -->
-<generators>
- <cache>
- <generators>
- <definition/>
- <suffix/>
- <prefix/>
- <window prevLength = "2" nextLength = "2">
- <token/>
- </window>
- <window prevLength = "2" nextLength = "2">
- <sentence begin="true" end="false"/>
- </window>
- <tokenclass/>
- <postagger/>
- </generators>
- </cache>
-</generators>
diff --git
a/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/FeatureGenWithSerializerMapping.java
b/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/FeatureGenWithSerializerMapping.java
deleted file mode 100644
index 6117fb95..00000000
---
a/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/FeatureGenWithSerializerMapping.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package opennlp.tools.util.featuregen;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import opennlp.tools.util.model.ArtifactSerializer;
-
-@Deprecated // TODO: (OPENNLP-1174) remove back-compat support when it is
unnecessary
-public class FeatureGenWithSerializerMapping extends CustomFeatureGenerator
- implements ArtifactToSerializerMapper {
-
- @Override
- public void createFeatures(List<String> features, String[] tokens, int index,
- String[] previousOutcomes) {
- }
-
- @Override
- public void updateAdaptiveData(String[] tokens, String[] outcomes) {
- }
-
- @Override
- public void clearAdaptiveData() {
- }
-
- @Override
- public Map<String, ArtifactSerializer<?>> getArtifactSerializerMapping() {
- Map<String, ArtifactSerializer<?>> mapping = new HashMap<>();
- mapping.put("test.resource", new
WordClusterDictionary.WordClusterDictionarySerializer());
- return Collections.unmodifiableMap(mapping);
- }
-
- @Override
- public void init(Map<String, String> properties,
- FeatureGeneratorResourceProvider resourceProvider) {
- }
-}
diff --git
a/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/GeneratorFactoryClassicFormatTest.java
b/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/GeneratorFactoryClassicFormatTest.java
deleted file mode 100644
index 9f367f1a..00000000
---
a/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/GeneratorFactoryClassicFormatTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package opennlp.tools.util.featuregen;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Map;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-import opennlp.tools.util.InvalidFormatException;
-import
opennlp.tools.util.featuregen.WordClusterDictionary.WordClusterDictionarySerializer;
-import opennlp.tools.util.model.ArtifactSerializer;
-import opennlp.tools.util.model.DictionarySerializer;
-
-@Deprecated // TODO: (OPENNLP-1174) just remove when back-compat is no longer
needed
-public class GeneratorFactoryClassicFormatTest {
-
- @Test
- void testCreationWithTokenClassFeatureGenerator() throws Exception {
- InputStream generatorDescriptorIn = getClass().getResourceAsStream(
-
"/opennlp/tools/util/featuregen/TestTokenClassFeatureGeneratorConfig_classic.xml");
-
- // If this fails the generator descriptor could not be found
- // at the expected location
- Assertions.assertNotNull(generatorDescriptorIn);
-
- AggregatedFeatureGenerator aggregatedGenerator =
- (AggregatedFeatureGenerator)
GeneratorFactory.create(generatorDescriptorIn, null);
-
- Assertions.assertEquals(1, aggregatedGenerator.getGenerators().size());
- Assertions.assertEquals(TokenClassFeatureGenerator.class.getName(),
-
aggregatedGenerator.getGenerators().iterator().next().getClass().getName());
-
- }
-
- @Test
- void testCreationWihtSimpleDescriptor() throws Exception {
- InputStream generatorDescriptorIn = getClass().getResourceAsStream(
-
"/opennlp/tools/util/featuregen/TestFeatureGeneratorConfig_classic.xml");
-
- // If this fails the generator descriptor could not be found
- // at the expected location
- Assertions.assertNotNull(generatorDescriptorIn);
-
- Collection<String> expectedGenerators = new ArrayList<>();
- expectedGenerators.add(OutcomePriorFeatureGenerator.class.getName());
-
- AggregatedFeatureGenerator aggregatedGenerator =
- (AggregatedFeatureGenerator)
GeneratorFactory.create(generatorDescriptorIn, null);
-
-
- for (AdaptiveFeatureGenerator generator :
aggregatedGenerator.getGenerators()) {
-
- expectedGenerators.remove(generator.getClass().getName());
-
- // if of kind which requires parameters check that
- }
-
- // If this fails not all expected generators were found and
- // removed from the expected generators collection
- Assertions.assertEquals(0, expectedGenerators.size());
- }
-
- @Test
- void testCreationWithCustomGenerator() throws Exception {
- InputStream generatorDescriptorIn = getClass().getResourceAsStream(
- "/opennlp/tools/util/featuregen/CustomClassLoading_classic.xml");
-
- // If this fails the generator descriptor could not be found
- // at the expected location
- Assertions.assertNotNull(generatorDescriptorIn);
-
- AggregatedFeatureGenerator aggregatedGenerator =
- (AggregatedFeatureGenerator)
GeneratorFactory.create(generatorDescriptorIn, null);
-
- Collection<AdaptiveFeatureGenerator> embeddedGenerator =
aggregatedGenerator.getGenerators();
-
- Assertions.assertEquals(1, embeddedGenerator.size());
-
- for (AdaptiveFeatureGenerator generator : embeddedGenerator) {
- Assertions.assertEquals(TokenFeatureGenerator.class.getName(),
generator.getClass().getName());
- }
- }
-
- /**
- * Tests the creation from a descriptor which contains an unkown element.
- * The creation should fail with an {@link InvalidFormatException}
- */
- @Test
- void testCreationWithUnkownElement() {
-
- Assertions.assertThrows(IOException.class, () -> {
-
- try (InputStream descIn = getClass().getResourceAsStream(
-
"/opennlp/tools/util/featuregen/FeatureGeneratorConfigWithUnkownElement_classic.xml"))
{
- GeneratorFactory.create(descIn, null);
- }
- });
- }
-
- @Test
- void testArtifactToSerializerMappingExtraction() throws IOException {
- // TODO: Define a new one here with custom elements ...
- InputStream descIn = getClass().getResourceAsStream(
-
"/opennlp/tools/util/featuregen/CustomClassLoadingWithSerializers_classic.xml");
-
- Map<String, ArtifactSerializer<?>> mapping =
- GeneratorFactory.extractArtifactSerializerMappings(descIn);
-
- Assertions.assertTrue(mapping.get("test.resource") instanceof
WordClusterDictionarySerializer);
- }
-
- @Test
- void testDictionaryArtifactToSerializerMappingExtraction() throws
IOException {
-
- InputStream descIn = getClass().getResourceAsStream(
-
"/opennlp/tools/util/featuregen/TestDictionarySerializerMappingExtraction_classic.xml");
-
- Map<String, ArtifactSerializer<?>> mapping =
- GeneratorFactory.extractArtifactSerializerMappings(descIn);
-
- Assertions.assertTrue(mapping.get("test.dictionary") instanceof
DictionarySerializer);
- // TODO: if make the following effective, the test fails.
- // this is strange because DictionaryFeatureGeneratorFactory cast
dictResource to Dictionary...
- //Assert.assertTrue(mapping.get("test.dictionary") instanceof
- // opennlp.tools.dictionary.Dictionary);
- }
-}
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features_classic.xml
deleted file mode 100644
index 71c3bae9..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features_classic.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one or more
- ~ contributor license agreements. See the NOTICE file distributed with
- ~ this work for additional information regarding copyright ownership.
- ~ The ASF licenses this file to You under the Apache License, Version 2.0
- ~ (the "License"); you may not use this file except in compliance with
- ~ the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<generators>
- <cache>
- <generators>
- <window prevLength = "2" nextLength = "2">
- <tokenclass/>
- </window>
- <window prevLength = "2" nextLength = "2">
- <token/>
- </window>
- <window prevLength = "2" nextLength = "2">
- <tokenpos model="pos-model.bin"/>
- </window>
- <definition/>
- <prevmap/>
- <bigram/>
- <sentence begin="true" end="false"/>
- </generators>
- </cache>
-</generators>
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/CustomClassLoadingWithSerializers_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/CustomClassLoadingWithSerializers_classic.xml
deleted file mode 100644
index 4a6f36e0..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/CustomClassLoadingWithSerializers_classic.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<generators>
- <custom
class="opennlp.tools.util.featuregen.FeatureGenWithSerializerMapping"/>
-</generators>
\ No newline at end of file
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/CustomClassLoading_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/CustomClassLoading_classic.xml
deleted file mode 100644
index d22556af..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/CustomClassLoading_classic.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<generators>
- <custom class="opennlp.tools.util.featuregen.TokenFeatureGenerator"/>
-</generators>
\ No newline at end of file
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/FeatureGeneratorConfigWithUnkownElement_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/FeatureGeneratorConfigWithUnkownElement_classic.xml
deleted file mode 100644
index 7a67ea86..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/FeatureGeneratorConfigWithUnkownElement_classic.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<generators>
- <definition/>
- <unkown-element/>
-</generators>
-
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestDictionarySerializerMappingExtraction_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestDictionarySerializerMappingExtraction_classic.xml
deleted file mode 100644
index 334fd3f3..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestDictionarySerializerMappingExtraction_classic.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<generators>
- <dictionary dict="test.dictionary"/>
-</generators>
\ No newline at end of file
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestFeatureGeneratorConfig_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestFeatureGeneratorConfig_classic.xml
deleted file mode 100644
index 6518948a..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestFeatureGeneratorConfig_classic.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<generators>
- <definition/>
-</generators>
-
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestTokenClassFeatureGeneratorConfig_classic.xml
b/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestTokenClassFeatureGeneratorConfig_classic.xml
deleted file mode 100644
index c680248e..00000000
---
a/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestTokenClassFeatureGeneratorConfig_classic.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<generators>
- <tokenclass wordAndClass="true"/>
-</generators>