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

<cpeDescription>
	<collectionReader>
		<collectionIterator>
			<descriptor>
				<import location="CSQueueCollectionReader.xml" />
			</descriptor>
			<configurationParameterSettings>
				<nameValuePair>
					<name>CorpusName</name>
					<value>
						<string>enwikinews</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>SearchQuery</name>
					<value>
						<string>status-person:true</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>QueueName</name>
					<value>
						<string>enwikinews-ner-training-queue</string>
					</value>
				</nameValuePair>
			</configurationParameterSettings>
		</collectionIterator>
	</collectionReader>
	<casProcessors casPoolSize="2" processingUnitThreadCount="1">
		<casProcessor deployment="integrated" name="PersonNameFinderTrainer">
			<descriptor>
				<import location="PersonFinderTrainer.xml" />
			</descriptor>
			<configurationParameterSettings>
				<nameValuePair>
					<name>opennlp.uima.ModelName</name>
					<value>
						<string>en-wikinews-ner-person.bin</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>opennlp.uima.Language</name>
					<value>
						<string>en</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>opennlp.uima.SampleTraceFile</name>
					<value>
						<string>en-wikinews-ner-person.train</string>
					</value>
				</nameValuePair>
			</configurationParameterSettings>
			<deploymentParameters />
			<filter></filter>
			<errorHandling>
				<errorRateThreshold action="terminate" value="100/1000" />
				<maxConsecutiveRestarts action="terminate"
					value="30" />
				<timeout max="100000" />
			</errorHandling>
			<checkpoint batch="10000" />
		</casProcessor>
	</casProcessors>
	<cpeConfig>
		<numToProcess>-1</numToProcess>
		<deployAs>immediate</deployAs>
		<checkpoint file="" time="300000" />
		<timerImpl></timerImpl>
	</cpeConfig>
</cpeDescription>
