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 与卸载,全程实测。

Apache OpenNLPApache OpenNLP2026/10/12

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/(自建语料放此处便于管理)

六、注意事项

⚠️ 注意:

  1. OpenNLP 无服务端口与守护进程,验证方式为 CLI 管道或 Java 程序调用,无 systemctl 服务单元。
  2. 下载安装前务必核对 sha512sum 与官方 .sha512 文件一致,防止包被篡改。
  3. 模型文件按任务单独下载;en-ner-person.bin 只识别人名(person),识别机构/地点需 en-ner-organization.bin、en-ner-location.bin(同一模型站)。
  4. UD 模型(来源 A)与传统 demo 模型(来源 B)标签集不同,混用时注意标签体系。
  5. 首次运行 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/