Ubuntu 22.04 安装 Apache OpenNLP 2.5.12 指南
Ubuntu 22.04 安装 Apache OpenNLP 2.5.12(Java 自然语言处理工具包)指南:JDK 17 环境准备、官方二进制包下载与 SHA512 校验、模型下载(UD 模型与传统 demo 模型)、CLI 验证与 JVM 堆限制,含 FAQ 与卸载,全程实测。
Ubuntu 22.04 安装 Apache OpenNLP 2.5.12 指南
目标:在 Ubuntu 22.04 服务器上完成 Apache OpenNLP 2.5.12(基于机器学习的 Java 自然语言处理工具包,含分词/分句/词性标注/命名实体识别等)的安装与验证。本文给出 JDK 17 环境准备、官方二进制包下载与 SHA512 校验、模型文件下载、CLI 验证回显与 JVM 堆限制方法。所有命令与回显均在 Ubuntu 22.04.5 + JDK 17 环境实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(VERSION_CODENAME=jammy)
- 架构:x86_64
- Java:OpenJDK 17.0.20.1(
openjdk-17-jdk-headless,Ubuntu 官方源) - 下载工具:curl / wget / unzip(apt 安装)
- OpenNLP 版本:2.5.12(2026-09-11 发布,Apache 官方 dlcdn 当前稳定版)
- 安装目录:
/opt/opennlp-2.5.12/ - 模型目录:
/opt/opennlp/models/ - 演示账号:root
💡 说明:Apache OpenNLP 是发布为 Java jar 库 + CLI 工具的 NLP 组件(
opennlp.tools.*),本身没有监听端口的守护进程,所谓「安装」就是准备 JDK、解压二进制包、下载模型,之后通过bin/opennlp命令行或 Java API 使用。
二、前置条件
2.1 更新软件源
apt-get update
2.2 安装 JDK 17 与下载工具
OpenNLP 2.5.x 编译目标为 Java 8+,官方在 JDK 17 上测试,Ubuntu 22.04 官方源内置:
apt-get install -y openjdk-17-jdk-headless wget curl unzip maven locales
locale-gen en_US.UTF-8 zh_CN.UTF-8
验证 JDK 与 Maven:
java -version
mvn -version
实测回显:
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 17.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-amd64
三、版本选型说明
通过 Apache 官方下载目录探测当前版本:
curl -s https://dlcdn.apache.org/opennlp/
实测目录下存在:opennlp-2.5.12/(当前稳定版)、opennlp-3.0.0-M6/(里程碑预发布版)、opennlp-1.9.5/(1.x 旧主线)、opennlp-models-1.3.0/(模型源码包)、models/(模型下载子目录)。
| 版本 | 形态 | 适用场景 | 结论 |
|---|---|---|---|
| 1.9.5 | 旧稳定版(2021 后停止开发) | 仅需 1.x API 的存量项目 | 不推荐新装 |
| 2.5.12 | 当前稳定版(2026-09-11) | 新项目、生产使用 | ✅ 本指南采用 |
| 3.0.0-M6 | 里程碑版(API 有破坏性变更) | 尝鲜/评估下一代 API | 慎用 |
💡 版本选择建议:生产环境选 2.5.12 稳定版;3.0.0-M6 处于里程碑阶段,API 与 2.x 差异较大,不建议生产使用。
四、部署步骤
4.1 下载官方二进制包并校验
mkdir -p /opt/opennlp/models
cd /opt
curl -O https://dlcdn.apache.org/opennlp/opennlp-2.5.12/apache-opennlp-2.5.12-bin.tar.gz
sha512sum apache-opennlp-2.5.12-bin.tar.gz
cat apache-opennlp-2.5.12-bin.tar.gz.sha512
实测校验结果(两个 SHA512 一致):
6bf8dc86b3efbe9b45b15035bcee4385dcbbfa792b3484fc6c4cda835083fe0b43540d824db5dd765cb41b274a03d080b5b65aaabbe44cd76d5904a11d98eedd apache-opennlp-2.5.12-bin.tar.gz
6bf8dc86b3efbe9b45b15035bcee4385dcbbfa792b3484fc6c4cda835083fe0b43540d824db5dd765cb41b274a03d080b5b65aaabbe44cd76d5904a11d98eedd *apache-opennlp-2.5.12-bin.tar.gz
4.2 解压安装
cd /opt
tar xzf apache-opennlp-2.5.12-bin.tar.gz
mv apache-opennlp-2.5.12 /opt/opennlp-2.5.12
安装后的目录结构(关键部分):
/opt/opennlp-2.5.12/
├── bin/ # opennlp、opennlp.bat、morfologik-addon 启动脚本
├── conf/ # log4j2.xml 日志配置
├── docs/ # apidocs(JavaDoc)、manual、opennlp.pdf
├── lang/ # 各语言词典 XML 与 ml/ 训练参数样例
├── lib/ # opennlp-tools-2.5.12.jar 等全部依赖 jar
├── LICENSE
└── NOTICE
4.3 配置环境变量
把 OpenNLP 加入 PATH 便于直接调用:
cat >> /etc/profile.d/opennlp.sh <<'EOF'
export OPENNLP_HOME=/opt/opennlp-2.5.12
export PATH=$OPENNLP_HOME/bin:$PATH
EOF
source /etc/profile.d/opennlp.sh
4.4 下载模型文件
OpenNLP 各任务需要对应模型(.bin 文件)。推荐两类官方来源:
来源 A:Apache 官方 UD 模型(dlcdn.apache.org/opennlp/models/ud-models-1.3/,适配 2.5.x,文件名 opennlp-<语言>-ud-<语料库>-<任务>-1.3-2.5.4.bin):
cd /opt/opennlp/models
curl -O https://dlcdn.apache.org/opennlp/models/ud-models-1.3/opennlp-en-ud-ewt-tokens-1.3-2.5.4.bin
curl -O https://dlcdn.apache.org/opennlp/models/ud-models-1.3/opennlp-en-ud-ewt-sentence-1.3-2.5.4.bin
curl -O https://dlcdn.apache.org/opennlp/models/ud-models-1.3/opennlp-en-ud-ewt-pos-1.3-2.5.4.bin
curl -O https://dlcdn.apache.org/opennlp/models/ud-models-1.3/opennlp-en-ud-ewt-lemmas-1.3-2.5.4.bin
curl -O https://dlcdn.apache.org/opennlp/models/langdetect/1.8.3/langdetect-183.bin
来源 B:传统 demo 模型(opennlp.sourceforge.net/models-1.5/,OpenNLP 官方 demo 模型站,与 2.5.12 兼容实测可用):
curl -O https://opennlp.sourceforge.net/models-1.5/en-token.bin
curl -O https://opennlp.sourceforge.net/models-1.5/en-sent.bin
curl -O https://opennlp.sourceforge.net/models-1.5/en-ner-person.bin
模型文件清单:
-rw-r--r-- 1 root root 5.0M en-ner-person.bin
-rw-r--r-- 1 root root 97K en-sent.bin
-rw-r--r-- 1 root root 430K en-token.bin
-rw-r--r-- 1 root root 509K opennlp-en-ud-ewt-lemmas-1.3-2.5.4.bin
-rw-r--r-- 1 root root 1.2M opennlp-en-ud-ewt-pos-1.3-2.5.4.bin
-rw-r--r-- 1 root root 20K opennlp-en-ud-ewt-sentence-1.3-2.5.4.bin
-rw-r--r-- 1 root root 319K opennlp-en-ud-ewt-tokens-1.3-2.5.4.bin
-rw-r--r-- 1 root root 141K langdetect-183.bin
⚠️ 注意:UD 模型(来源 A)词性标签为 UD 标签集(PROPN/NUM/NOUN/AUX/DET/ADP/ADJ/PUNCT 等),传统 demo 模型(来源 B)为 Penn Treebank 标签集(NN/NNP/VB 等),二者混用不影响安装验证,但标注结果标签体系不同,训练/评测时须保持标签集一致。
4.5 验证安装
运行主命令帮助:
cd /opt/opennlp-2.5.12 && ./bin/opennlp
实测回显(节选):
OpenNLP 2.5.12.
Usage: opennlp TOOL
where TOOL is one of:
Doccat Learned document categorizer
DoccatTrainer Trainer for the learnable document categorizer
...
SimpleTokenizer Character class tokenizer
TokenizerME Learnable tokenizer
TokenizerTrainer Trainer for the learnable tokenizer
...
SentenceDetector Learnable sentence detector
...
TokenNameFinder Learnable name finder
...
POSTagger Learnable part of speech tagger
...
LemmatizerME Learnable lemmatizer
...
LanguageDetector Learned language detector
...
All tools print help when invoked with help parameter
Example: opennlp SimpleTokenizer help
端到端验证:分词 + 词性标注 + 命名实体识别一次跑通:
cd /opt/opennlp-2.5.12
printf "Pierre Vinken, 61 years old, will join the board as a nonexecutive director on November 29. Mr. Vinken is chairman of Elsevier N.V., the Dutch publishing group.\n" | ./bin/opennlp TokenizerME /opt/opennlp/models/en-token.bin
实测回显:
Loading Tokenizer model ...
done (0.151s)
Pierre Vinken , 61 years old , will join the board as a nonexecutive director on November 29 . Mr. Vinken is chairman of Elsevier N.V. , the Dutch publishing group .
Average: 100.0 sent/s
Total: 1 sent
Runtime: 0.01s
Execution time: 0.179 seconds
词性标注:
printf "Pierre Vinken, 61 years old, will join the board as a nonexecutive director on November 29. Mr. Vinken is chairman of Elsevier N.V., the Dutch publishing group.\n" | ./bin/opennlp POSTagger /opt/opennlp/models/opennlp-en-ud-ewt-pos-1.3-2.5.4.bin
实测回显:
Loading POS Tagger model ...
done (0.266s)
Pierre_PROPN Vinken,_PROPN 61_NUM years_NOUN old,_PUNCT will_AUX join_VERB the_DET board_NOUN as_ADP a_DET nonexecutive_ADJ director_NOUN on_ADP November_PROPN 29._PUNCT Mr._PROPN Vinken_PROPN is_AUX chairman_NOUN of_ADP Elsevier_ADJ N.V.,_PROPN the_DET Dutch_PROPN publishing_VERB group._PUNCT
Average: 21.3 sent/s
Total: 1 sent
Runtime: 0.047s
Execution time: 0.365 seconds
命名实体识别:
printf "Pierre Vinken is the chairman of Elsevier N.V. He was born in Amsterdam in 1931. Alice Smith works at Google in New York.\n" | ./bin/opennlp TokenNameFinder /opt/opennlp/models/en-ner-person.bin
实测回显:
Loading Token Name Finder model ...
done (0.639s)
<START:person> Pierre Vinken <END> is the chairman of Elsevier N.V. He was born in Amsterdam in 1931. Alice Smith works at Google in New York.
Average: 17.5 sent/s
Total: 1 sent
Runtime: 0.057s
Execution time: 0.750 seconds
五、配置说明
5.1 JVM 堆内存限制
OpenNLP 的 Java 进程默认堆上限较大(取决于 JDK 对物理内存的估算),生产环境建议限制在 256–512 MB。CLI 启动脚本 bin/opennlp 第 56–61 行原生支持 JAVA_HEAP 环境变量:
unset HEAP
if [ -n "$JAVA_HEAP" ] ; then
HEAP="-Xmx$JAVA_HEAP"
fi
$JAVACMD $HEAP -Dlog4j.configurationFile="$OPENNLP_HOME/conf/log4j2.xml" -cp "$CLASSPATH" opennlp.tools.cmdline.CLI "$@"
用法示例(把堆限制为 256 MB):
cd /opt/opennlp-2.5.12
JAVA_HEAP=256m ./bin/opennlp TokenizerME /opt/opennlp/models/en-token.bin < /tmp/input.txt
验证实际生效的堆参数(另开终端抓进程参数):
ps -ef | grep "[o]pennlp.tools.cmdline.CLI" | grep -o "\-Xmx[^ ]*"
实测回显(JAVA_HEAP=256m 时):
-Xmx256m
💡 说明:Java API 方式使用时,在启动 JVM 的命令行加
-Xmx256m(或 Maven 工程用MAVEN_OPTS="-Xms256m -Xmx256m")即可,详见《Apache OpenNLP 2.5.12 构建并运行示例应用指南》篇。
5.2 日志配置
日志由 conf/log4j2.xml 控制(-Dlog4j.configurationFile 指定),默认将 INFO 级日志输出到控制台(模型加载 Loading ...、done (0.151s) 形式的耗时、性能统计 Average: 100.0 sent/s 等行)。
5.3 数据目录
- 模型目录:
/opt/opennlp/models/(按需组织,CLI 通过绝对路径引用模型文件) - 训练数据目录:
/opt/opennlp/train/(自建语料放此处便于管理)
六、注意事项
⚠️ 注意:
- OpenNLP 无服务端口与守护进程,验证方式为 CLI 管道或 Java 程序调用,无
systemctl服务单元。- 下载安装前务必核对
sha512sum与官方.sha512文件一致,防止包被篡改。- 模型文件按任务单独下载;
en-ner-person.bin只识别人名(person),识别机构/地点需en-ner-organization.bin、en-ner-location.bin(同一模型站)。- UD 模型(来源 A)与传统 demo 模型(来源 B)标签集不同,混用时注意标签体系。
- 首次运行 Java 程序可能出现
SLF4J(W): No SLF4J providers were found.告警,仅表示未绑定日志实现,不影响功能。
七、常见问题
Q1:sha512sum 与官方值不一致?
说明下载不完整或被篡改,删除后重新下载,并确认镜像为 dlcdn.apache.org 官方 CDN。
Q2:./bin/opennlp 报 Permission denied 或 command not found?
检查脚本可执行权限(ls -l bin/opennlp 应有 x),并用绝对路径 /opt/opennlp-2.5.12/bin/opennlp 调用;同时确认 java 在 PATH 中(java -version 可执行)。
Q3:ERROR: Can't find model file 或 NoSuchFileException?
模型路径写错或未下载。确认 /opt/opennlp/models/ 下存在对应 .bin 文件,CLI 命令中模型参数使用绝对路径。
Q4:Invalid format: ...(LemmatizerME)?
词形还原输入必须是 词_词性(下划线连接)的 POSSample 格式,如 running_VERB;普通纯文本会报该错误,详见《Apache OpenNLP 2.5.12 常用工具与 API 详解》篇。
Q5:JVM 内存占用偏高?
CLI 用 JAVA_HEAP=256m(设 -Xmx256m)限制;Java API 场景在启动命令加 -Xmx256m 或 MAVEN_OPTS="-Xms256m -Xmx256m",并用 ps -ef | grep "[o]pennlp" | grep -o "\-Xmx[^ ]*" 复核生效值。
八、卸载方式
删除安装目录、环境变量与模型:
rm -rf /opt/opennlp-2.5.12 /opt/apache-opennlp-2.5.12-bin.tar.gz /opt/opennlp/models /opt/apache-opennlp-2.5.12-src.tar.gz
rm -f /etc/profile.d/opennlp.sh
如需同时移除 JDK 17 与下载工具:
apt-get remove -y openjdk-17-jdk-headless wget curl unzip maven locales
apt-get autoremove -y
九、参考链接
- Apache OpenNLP 官方下载目录:
https://dlcdn.apache.org/opennlp/ - OpenNLP 官方文档:
https://opennlp.apache.org/docs/ - OpenNLP 模型下载(UD 模型):
https://dlcdn.apache.org/opennlp/models/ud-models-1.3/ - OpenNLP demo 模型站:
https://opennlp.sourceforge.net/models-1.5/ - OpenNLP 各历史版本:
https://archive.apache.org/dist/opennlp/