////
   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.
////
= Apache OpenNLP 2.2.0 released
Apache OpenNLP
2023-04-22
:jbake-type: post
:jbake-tags: community
:jbake-status: published
:category: news
:idprefix:

The Apache OpenNLP team is pleased to announce the release of Apache OpenNLP 2.2.0.

The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text.

It supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, and coreference resolution.

Apache OpenNLP 2.2.0 binary and source distributions are available for download from our download page: link:/download.html[download page]

The OpenNLP library is distributed by Maven Central as well. See the Maven Dependency page for more details: link:/maven-dependency.html[Maven Dependency]

# What's new in Apache OpenNLP 2.2.0

This version contains improvements to logging by introducing SLF4J to replace logging using System.out. ONNX Runtime support for sentence-transformers was also introduced. This version also includes fixes for stemming, documentation, and unit tests.

For a full list please see the list of items addressed in link:https://issues.apache.org/jira/browse/OPENNLP-1483?jql=project%20%3D%20OPENNLP%20AND%20status%20in%20(Resolved%2C%20Closed)%20AND%20fixVersion%20%3D%202.2.0[Jira].

--The Apache OpenNLP Team
