////
   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.
////
= Documentation
:jbake-type: page
:jbake-tags: documentation
:jbake-status: published
:idprefix:

WARNING: This page contains the archived documentation. Please refer to link:/docs/index.html[Apache OpenNLP Manual] for the current documentation.

There exists a manual and Javadoc API documentation for Apache OpenNLP. The manual
explains how the various OpenNLP components can be used and trained.

### Apache OpenNLP 1.9.2 documentation
* link:/docs/1.9.2/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.9.2/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.9.2/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.9.2/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.9.2/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.9.1 documentation
* link:/docs/1.9.1/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.9.1/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.9.1/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.9.1/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.9.1/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.9.0 documentation

* link:/docs/1.9.0/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.9.0/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.9.0/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.9.0/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.9.0/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.8.4 documentation

* link:/docs/1.8.4/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.8.4/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.8.4/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.8.4/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.8.4/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.8.3 documentation

* link:/docs/1.8.3/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.8.3/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.8.3/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.8.3/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.8.3/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.8.2 documentation

* link:/docs/1.8.2/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.8.2/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.8.2/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.8.2/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.8.2/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.8.1 documentation

* link:/docs/1.8.1/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.8.1/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.8.1/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.8.1/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.8.1/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.8.0 documentation

* link:/docs/1.8.0/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.8.0/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.8.0/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.8.0/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.8.0/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.7.2 documentation

* link:/docs/1.7.2/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.7.2/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.7.2/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.7.2/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.7.2/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.7.1 documentation

* link:/docs/1.7.1/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.7.1/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.7.1/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.7.1/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.7.1/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.7.0 documentation

* link:/docs/1.7.0/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.7.0/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.7.0/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/1.7.0/apidocs/opennlp-brat-annotator/index.html[Apache OpenNLP BRAT Annotator Javadoc]
* link:/docs/1.7.0/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

### Apache OpenNLP 1.6.0 documentation

* link:/docs/1.6.0/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.6.0/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.6.0/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]

### Apache OpenNLP 1.5.3 documentation

* link:/docs/1.5.3/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/1.5.3/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/1.5.3/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
