////
   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.   
////
= Get Involved
:jbake-type: page
:jbake-tags: download
:jbake-status: published
:idprefix:


The Apache OpenNLP project is developed by volunteers and is always looking for new contributors
to work on all parts of the project. Every contribution is welcome and needed to make it better.
A contribution can be anything from a small documentation typo fix to a new component.

Before you start to contribute we suggest to join the user and development mailing lists.

A contribution is always done through https://issues.apache.org/jira/browse/OPENNLP[Apache OpenNLP JIRA].
Please https://issues.apache.org/jira/secure/CreateIssue.jspa?pid=12311215&issuetype=4[create a JIRA issue]
which describes the change and attach a patch to it.
Every received patch will be reviewed and then either be committed or we give appropriate feedback
to change it.

Bigger contributions can eventually only be accepted when an
https://www.apache.org/licenses/icla.txt[ICLA], https://www.apache.org/licenses/cla-corporate.txt[CCLA]
or https://www.apache.org/licenses/software-grant.txt[software grant] is on file.

Contributors who have a history of successful participation are invited to join
the project as a committer from the https://incubator.apache.org/guides/ppmc.html[PPMC].

## Contributions wanted

* https://issues.apache.org/jira/browse/OPENNLP-941[OPENNLP-941]: Add eval support to detokenizer
* https://issues.apache.org/jira/browse/OPENNLP-912[OPENNLP-912]: Add a rule based sentence detector
* https://issues.apache.org/jira/browse/OPENNLP-892[OPENNLP-892]: Add a Entity-Relationship Extraction component
* https://issues.apache.org/jira/browse/OPENNLP-780[OPENNLP-780]: Add formats support for NKJP
* https://issues.apache.org/jira/browse/OPENNLP-712[OPENNLP-712]: Creating a date time recognizer
* https://issues.apache.org/jira/browse/OPENNLP-565[OPENNLP-565]: Add MASC format support
* https://issues.apache.org/jira/browse/OPENNLP-547[OPENNLP-547]: Add a dependency parser component
* https://issues.apache.org/jira/browse/OPENNLP-546[OPENNLP-546]: Add TokenizerPTB
* https://issues.apache.org/jira/browse/OPENNLP-244[OPENNLP-244]: Write documentation for the BIONLP converter
* https://issues.apache.org/jira/browse/OPENNLP-217[OPENNLP-217]: Add Detokenizer Dictionary section
* https://issues.apache.org/jira/browse/OPENNLP-216[OPENNLP-216]: Add Detokenizer API section
* https://issues.apache.org/jira/browse/OPENNLP-198[OPENNLP-198]: Develop a demonstration web app for our website 
* https://issues.apache.org/jira/browse/OPENNLP-108[OPENNLP-108]: Write the OpenNLP White Paper
* https://issues.apache.org/jira/browse/OPENNLP-49[OPENNLP-49]: Write documentation for the uima integration
* https://issues.apache.org/jira/browse/OPENNLP-47[OPENNLP-47]: Rewrite the CONLL06 documentation based on the tutorial
* https://issues.apache.org/jira/browse/OPENNLP-32[OPENNLP-32]: Write more documentation for the parser

