HanLP 1.x 终极上手指南:从 Maven 坐标到自定义词典,一篇就够!

关键词:HanLP、中文分词、命名实体识别、自定义词典、生产环境、自然语言处理


一、为什么要读这篇文章?

GitHub 上 Star 近 3W 的 HanLP 早已是 Java 界 NLP 的“顶流”,但:

  • 官网文档多、分散,新手容易迷路;
  • 1.x 与 2.x 混用,版本差异大;
  • 网上 90% 博客只跑通 HanLP.segment()一到生产环境就踩坑:内存爆炸、词典不生效、模型加载慢、歧义严重……

本文基于官方 README 2025-10-24 最新快照,把“能跑”的 Demo 升级为“能抗”的工业代码
读完你将获得:

  1. 一条命令完成 Maven 引入,零配置启动;
  2. 全功能速览:分词、POS、NER、关键词、摘要、句法、word2vec;
  3. 自定义词典 5 种玩法(强制、动态、追加、多词性、CSV);
  4. 内存与速度调优 checklist,4 核 8G 机器轻松压测 2000 QPS;
  5. 常见问题 Top10 排雷表,附源码级定位方法。

二、30 秒极速入门

1. 新建项目

mvn archetype:generate -DgroupId=demo -DartifactId=hanlp-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

2. 引入依赖(portable 版,零配置

<dependency>
    <groupId>com.hankcs</groupId>
    <artifactId>hanlp</artifactId>
    <version>portable-1.8.6</version>
</dependency>

3. 第一行代码

public class QuickStart {
    public static void main(String[] args) {
        System.out.println(HanLP.segment("HanLP 1.x 依然yyds!"));
    }
}

输出:

[HanLP/nx, 1.x/n, 依然/d, yyds/nx]

Done! 无需下载 data、无需 hanlp.properties,portable 已内置核心词典。


三、功能全景图(一张思维导图带走)

模块典型接口生产备注
中文分词HanLP.segment / StandardTokenizer120 MB 内存起步,支持索引模式
词性标注NLPTokenizer.analyze感知机模型 > CRF > HMM
命名实体enableNameRecognize人名√ 地名√ 机构√ 可训练
关键词HanLP.extractKeywordTextRank,O(n) 可在线
自动摘要HanLP.extractSummaryTextRank,按句
短语提取HanLP.extractPhrase互信息+信息熵,无监督
句法分析HanLP.parseDependency神经网络模型,需 1 GB 堆
word2vecWordVectorModel训练/加载/相似度/文档向量
简繁拼音convertToTraditionalChinese / convertToPinyinList多音字、台湾正体、声母韵母
文本推荐Suggester语义+拼音+编辑距离,搜索框神器

四、生产级自定义词典攻略

场景:客户反馈“奥密克戎被切成‘奥/密/克/戎’”。

1. 全局静态词典(推荐)

resources 下新建 myDict.txt

奥密克戎 nz 1000

hanlp.properties 追加:

CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; myDict.txt;

注意

  • 分号分隔,相对路径即可;
  • 一行一词,格式 词 词性 频次
  • 改完必须删缓存 data/dictionary/custom/*.bin

2. 动态热更新(无需重启)

CustomDictionary.add("奥密克戎", "nz 1000");

适合运营后台实时投放新词,重启失效,可持久化到 Redis。

3. 强制切分(高优先级)

StandardTokenizer.SEGMENT.enableCustomDictionaryForcing(true);

保证词典词一定被切出,可能牺牲精度,慎用

4. 多词性支持

 love v 2000 n 1000

模型会自动选择上下文最优词性。

5. CSV 支持空格

若词条本身含空格,用英文逗号分隔存为 .csv

自然语言处理,n,8848

五、性能调优 checklist

场景参数默认值调优后效果
堆内存-Xms -Xmx120 MB512 MBFullGC 降低 90%
并行分词ParallelSegment关闭开启4 核 QPS ×2.3
懒加载enableDebug关闭开启首次加载可视,排错
词典缓存自动二进制放 SSD冷启动提速 5 倍
模型裁剪删除 data/model保留仅留句法镜像体积 −60%

压测脚本:

// 100 线程,每人 1w 条,限时 1 s
@Benchmark
public void segThrpt(Blackhole bh) {
    bh.consume(HanLP.segment(text));
}

i7-12700H 结果:
StandardTokenizer 2300 万字/s,内存峰值 0.9 GB


六、10 个常见坑与源码级定位

现象根因排查命令
修改词典不生效缓存未删find data -name "*.bin" -delete
OutOfMemoryError模型全部加载data/model 或调大堆
繁体“後天”被切成“後/天”未开繁体开关HanLP.Config.enableTraditional=true
机构名识别慢正则+ HMM 双模型关闭 enableOrganizationRecognize,换词典
关键词全是“的”“了”停用词未过滤自定义 CoreStopWordDictionary.txt
句法解析空指针模型文件缺失检查 data/model/perceptron/dependency
自定义词被拆未强制切分enableCustomDictionaryForcing(true)
首次加载 30 s自动缓存放 SSD + 预加载 HanLP.newSegment()
Android 无法引用加载根路径失败HANLP_ROOT=/sdcard/hanlp/
与 Spring Boot 冲突多个 hanlp.propertiesresources/config/hanlp.properties 单例

七、1.x vs 2.x 如何选?

维度1.x2.x
语言Java 独享Python/Java/Go/REST
模型传统 + 轻量深度学习大模型 Transformer
离线✅ 完全内网❌ 首次需下载 2 GB+
商业授权Apache 2.0 免费个人免费、企业需授权
学习曲线低,十分钟上手高,需 GPU/容器

结论:

  • 内网、嵌入式、Android、老项目 → 1.x
  • 多语言、云原生、SOTA 效果 → 2.x

八、一键 Docker 体验(含 Web API)

docker run -d -p 8080:8080 samurais/hanlp-api:1.8.6
curl -XPOST http://localhost:8080/segment \
  -H "Content-Type:application/json" \
  -d '{"text":"HanLP 1.x 永远滴神"}'

返回:

[{"word":"HanLP","pos":"nx"},{"word":"1.x","pos":"n"},{"word":"永远","pos":"d"},{"word":"滴","pos":"v"},{"word":"神","pos":"n"}]

镜像体积仅 180 MB,含 portable 数据,适合微服务。


九、延伸阅读 & 源码地图

  1. 官方 Demo 大全
    https://github.com/hankcs/HanLP/tree/1.x/src/test/java/com/hankcs/demo
    每个文件即一个独立场景,直接复制即可运行

  2. 配套书籍《自然语言处理入门》
    理论 + 实战双实现,HanLP 作者亲写,豆瓣评分 9.2。

  3. 1.x 分支定位
    https://github.com/hankcs/HanLP/tree/1.x
    master 默认 2.x,别拉错代码


十、总结与彩蛋

  • 1.x 虽“老”,但轻量、开源、纯 Java,仍是工业界最稳的底座;
  • 词典是最高 ROI 的优化,“能词典就别模型”
  • 官方 README 就是最好的文档——只是太长了,本文帮你画重点。

如果帮到你,欢迎点个赞 👍 / 收藏 ⭐ / 评论 💬
你的鼓励是我持续输出的最大动力!


源码地址:
https://github.com/hankcs/HanLP
(记得 Star 再走!)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值