上一篇
如何用Java实现中文分词
- 后端开发
- 2025-06-21
- 3805
使用Java进行中文分词可借助第三方库如HanLP、IK Analyzer或jieba-java,首先引入依赖,加载词典模型,创建分词器实例,调用分词方法处理文本即可获得分词结果,需注意选择适合场景的分词粒度与停用词过滤。
怎么使用Java进行中文分词
中文分词是中文自然语言处理的基础环节,它将连续的中文字符序列切分为有意义的词语组合(我爱编程”切分为“我/爱/编程”),以下是使用Java实现中文分词的详细方法:
常用Java中文分词工具
-
HanLP
- 开源地址:https://github.com/hankcs/HanLP
- 特点:支持多种分词模式,词性标注,命名实体识别
- Maven依赖:
<dependency> <groupId>com.hankcs</groupId> <artifactId>hanlp</artifactId> <version>portable-1.8.4</version> </dependency>
-
Ansj分词
- 开源地址:https://github.com/NLPchina/ansj_seg
- 特点:轻量高效,支持自定义词典
- Maven依赖:
<dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>5.1.6</version> </dependency>
-
jieba结巴分词(Java版)
- 开源地址:https://github.com/huaban/jieba-analysis
- 特点:移植自Python,支持新词发现
- Maven依赖:
<dependency> <groupId>com.huaban</groupId> <artifactId>jieba-analysis</artifactId> <version>1.0.2</version> </dependency>
使用HanLP分词的完整示例
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;
import java.util.List;
public class HanLPDemo {
public static void main(String[] args) {
// 待分词的文本
String text = "清华大学坐落在北京中关村科技园区";
// 标准分词(含词性)
List<Term> termList = HanLP.segment(text);
// 输出结果
System.out.println("分词结果:");
for (Term term : termList) {
System.out.printf("%s/%s ", term.word, term.nature);
}
}
}
输出:

清华大学/nt 坐落/v 在/p 北京/ns 中关村科技园区/ns
Ansj分词实战代码
import org.ansj.domain.Result;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.ansj.domain.Term;
public class AnsjDemo {
public static void main(String[] args) {
String text = "自然语言处理是人工智能的核心技术之一";
// 基础分词模式
Result result = ToAnalysis.parse(text);
System.out.println("分词结果:");
for (Term term : result.getTerms()) {
System.out.print(term.getName() + "/");
}
}
}
高级功能与优化策略
-
自定义词典(以HanLP为例)
在src/main/resources下创建custom.dic文件:区块链 1000 n 深度学习 1000 n代码加载词典:
HanLP.Config.CustomDictionaryPath = new String[]{"custom.dic"}; -
停用词过滤
移除无意义的词(的、了、是):List<Term> filtered = termList.stream() .filter(term -> !"的|了|是".contains(term.word)) .collect(Collectors.toList()); -
性能优化

- 预加载模型(避免首次调用延迟):
HanLP.preload(); // 初始化分词器
- 多线程环境下使用
ThreadLocal重用分词器实例
- 预加载模型(避免首次调用延迟):
常见问题处理
-
新词识别失败
解决方案:添加自定义词典或使用支持新词发现的工具(如jieba)
-
专业术语切分错误
- 示例:”机器学习”被拆分为”机器/学习”
- 处理:在词典中强制添加”机器学习”
-
歧义消解

- 如”乒乓球拍卖完了”
- 优化:选择支持N-最短路径分词的算法(HanLP默认支持)
分词工具选型建议
| 工具 | 适用场景 | 优势 |
|---|---|---|
| HanLP | 学术研究、复杂NLP任务 | 功能全面,精度高 |
| Ansj | 高并发生产环境 | 速度快,内存占用低 |
| Jieba | 迁移Python项目,简单分词需求 | 新词发现能力强 |
Java中文分词可通过成熟的开源工具快速实现,选择时需平衡精度、速度与业务需求,建议初次使用者从HanLP开始,其完善的文档和社区支持能显著降低学习门槛,生产环境部署需注意词典热更新、线程安全等工程细节。
引用说明
本文代码基于HanLP 1.8.4、Ansj 5.1.6官方文档实现,开源项目地址:
- HanLP: https://github.com/hankcs/HanLP
- Ansj: https://github.com/NLPchina/ansj_seg
词典数据来源于各项目默认词典及互联网公开语料库。
