Hi all, I have posted a first release candidate for the Apache OpenNLP 3.0.0-M5 release and it is ready for testing.
The 3.x release line of Apache OpenNLP introduces no known breaking changes while significantly modularizing the project to improve library usage and future extensibility. The core API remains stable and fully compatible with 2.x, so existing projects can continue using the opennlp-tools artifact without modifications. ###### This milestone delivers 33 resolved issues, headlined by a major overhaul of Unicode handling and text normalization. The centerpiece of this release is a new Unicode-aware normalization and tokenization stack. A new normalization engine (CharClass, Dimension, and confusables support) is paired with an offset/alignment layer (Alignment, AlignedText) that correctly tracks character offsets through length-changing folds such as expansions and contractions. On top of this, OpenNLP now ships a UAX #29 compliant word tokenizer (WordSegmenter, WordTokenizer, WordType), a layered Term model with TermAnalyzer, and a per-language NormalizationProfile registry. Full Unicode case folding has been added to text normalization, whitespace handling is now aligned with the Unicode White_Space property, and the deep-learning components support offset-safe input normalization. A new emoji annotation layer is wired into the Sentiment, Name Finder, and Doccat components, with offset-aware bidirectional emoji and emoticon expansion/contraction. Performance and robustness also received attention: legacy CharSequenceNormalizers replace regex matching with cursor scans, Tag patterns are precompiled to avoid repeated compilation, and normalization/tokenization hot paths saw non-breaking performance improvements. Stemmers are now thread-safe, with a new StemmerFactory and per-thread stem caching, and previously unexecuted stemmer tests have been brought back into the build. On the security side, class instantiation in GeneratorFactory, StreamFactory, and StringInterners is now allowlist-based, and deserialization in BaseModel has been hardened. Housekeeping updates include moving to Apache Parent 39, JUnit 6.1.2, gRPC 1.82.2, ONNX Runtime 1.27.0, and Log4j 2.26.1, plus a fix to the binary distribution LICENSE to include the BSD section for the bundled stopword lists. Documentation improvements cover the Entity Linker framework, the BioNLP converter, and a new Dev Manual section on Unicode normalization and the UAX #29 tokenizer. ###### Thank you to everyone who contributed to this release, including all of our users and the people who submitted bug reports, contributed code or documentation enhancements. The release was made using the OpenNLP release process, documented on the website: https://opennlp.apache.org/release.html Maven Repo: https://repository.apache.org/content/repositories/orgapacheopennlp-1071 <repositories> <repository> <id>opennlp-3.0.0-M5-RC1</id> <name>Testing OpenNLP 3.0.0-M5 release candidate</name> <url> https://repository.apache.org/content/repositories/orgapacheopennlp-1071 </url> </repository> </repositories> Binaries & Source: https://dist.apache.org/repos/dist/dev/opennlp/opennlp-3.0.0-M5-rc1/ Tag: https://github.com/apache/opennlp/releases/tag/opennlp-3.0.0-M5 Tag Hash: 936db0e9b79c9150afcf2c06e107b2b958ab536d Release notes: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311215&version=12357221 The results of the eval tests for the aforementioned tag can be found here: https://ci-builds.apache.org/job/OpenNLP/job/eval-tests-releases/36/ Reminder: The up-2-date KEYS file for signature verification can be found here: https://dist.apache.org/repos/dist/release/opennlp/KEYS Checklist for reference: [ ] Both source (tar.gz/zip) and binary artifacts (tar.gz/zip) are present, along with .asc and .sha512 files for each. [ ] PGP signatures are valid for the release artifacts using the KEYS file from dist.apache.org [ ] SHA512 checksums are correct and verified. [ ] LICENSE and NOTICE files exist and are accurate. [ ] No unexpected binary files in the source release. [ ] All source files have appropriate ASF headers (excluding generated files and legacy files). [ ] Build completes successfully from source and the instruction to do so are clear. Please vote on releasing these packages as Apache OpenNLP 3.0.0-M5 The vote is open for at least the next 72 hours. Only votes from OpenNLP PMC are binding, but everyone is welcome to check the release candidate and vote. The vote passes if at least three binding +1 votes are cast. Please VOTE [+1] go ship it [+0] meh, don't care [-1] stop, there is a ${showstopper} Thanks! Martin | mawiesne
