<?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.    
-->

<casConsumerDescription xmlns="http://uima.apache.org/resourceSpecifier">
	<frameworkImplementation>org.apache.uima.java
	</frameworkImplementation>
	<implementationName>opennlp.uima.namefind.NameFinderTrainer</implementationName>
	<processingResourceMetaData>
		<name>Person Name Finder Trainer</name>
		<description></description>
		<version>${pom.version}</version>
		<vendor>Apache Software Foundation</vendor>
		<configurationParameters>
			<configurationParameter>
				<name>opennlp.uima.ModelName</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.SentenceType</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.TokenType</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.NameType</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>

			<configurationParameter>
				<name>opennlp.uima.TrainingParamsFile</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.AdditionalTrainingDataFile</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.AdditionalTrainingDataEncoding</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.SampleTraceFile</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.SampleTraceFileEncoding</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.FeatureGeneratorFile</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.FeatureGeneratorResources</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>false</mandatory>
			</configurationParameter>
			
			<configurationParameter>
				<name>opennlp.uima.Language</name>
				<type>String</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>
		</configurationParameters>

		<configurationParameterSettings>
			
			<nameValuePair>
				<name>opennlp.uima.TokenType</name>
				<value>
					<string>org.apache.opennlp.annotations.Token</string>
				</value>
			</nameValuePair>
			
			<nameValuePair>
				<name>opennlp.uima.SentenceType</name>
				<value>
					<string>org.apache.opennlp.annotations.Sentence</string>
				</value>
			</nameValuePair>
			<nameValuePair>
				<name>opennlp.uima.NameType</name>
				<value>
					<string>org.apache.opennlp.annotations.Person</string>
				</value>
			</nameValuePair>

			<nameValuePair>
				<name>opennlp.uima.SampleTraceFileEncoding</name>
				<value>
					<string>UTF-8</string>
				</value>
			</nameValuePair>
		</configurationParameterSettings>
		<typeSystemDescription>
			<imports>
				<import location="../../wikinews-importer/samples/TypeSystem.xml" />
			</imports>
		</typeSystemDescription>
		<typePriorities />
		<fsIndexCollection />
		<capabilities />
		<operationalProperties>
			<modifiesCas>false</modifiesCas>
			<multipleDeploymentAllowed>false</multipleDeploymentAllowed>
		</operationalProperties>
	</processingResourceMetaData>
</casConsumerDescription>
