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

<fields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="../../main/resources/lucas.xsd">

	<field name="headline" index="yes" stored="no">
		<annotations>
			<annotation type="org.apache.opennlp.annotations.Headline" tokenizer="standard">
				<filters>
					<filter name="lowercase"/>
				</filters>
			</annotation>
		</annotations>
	</field>
	
	<field name="text" index="yes" stored="no">
		<annotations>
			<annotation type="uima.tcas.DocumentAnnotation" tokenizer="standard">
				<filters>
					<filter name="lowercase"/>
				</filters>
			</annotation>
			
		</annotations>
	</field>
	
	<field name="person" index="yes" stored="no">
		<annotations>
			<annotation type="org.apache.opennlp.annotations.Person" tokenizer="standard">
				<filters>
					<filter name="lowercase"/>
				</filters>
			</annotation>
			
		</annotations>
	</field>
	
	<field name="organization" index="yes" stored="no">
		<annotations>
			<annotation type="org.apache.opennlp.annotations.Organization" tokenizer="standard">
				<filters>
					<filter name="lowercase"/>
				</filters>
			</annotation>
			
		</annotations>
	</field>
	
	<field name="status-sentence" index="yes" stored="no" termVector="no">
		<annotations>
			<annotation type="bumblebee.annotations.AnnotationStatus" tokenizer="standard">
				<features>
					<feature name="sentence"/>
				</features>
			</annotation>
		</annotations>
	</field>
	
	<field name="status-token" index="yes" stored="no" termVector="no">
		<annotations>
			<annotation type="bumblebee.annotations.AnnotationStatus">
				<features>
					<feature name="token"/>
				</features>
			</annotation>
		</annotations>
	</field>
	
	<field name="status-person" index="yes" stored="yes">
		<annotations>
			<annotation type="bumblebee.annotations.AnnotationStatus">
				<features>
					<feature name="token"/>
				</features>
			</annotation>
		</annotations>
	</field>
	
	<field name="status-organization" index="yes">
		<annotations>
			<annotation type="bumblebee.annotations.AnnotationStatus">
				<features>
					<feature name="token"/>
				</features>
			</annotation>
		</annotations>
	</field>
</fields>
