在 Spring Boot 项目中实现分词功能,可根据需求选择以下四种主流方案:
1. Ansj 中文分词(轻量级首选)
1.1. 依赖引入
<dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>5.1.6</version> </dependency>
1.2. 分词工具类
import org.ansj.domain.Result; import org.ansj.splitWord.analysis.ToAnalysis; public class AnsjUtil { public static List<String> segment(String text) { Result result = ToAnalysis.parse(text); return result.getTerms().stream() .map(term -> term.getName()) .collect(Collectors.toList()); } } // 调用:List<String> words = AnsjUtil.segment("自然语言处理");
支持新词识别与词性标注,无需额外配置。
2. IK 分词器(Lucene 生态)
2.1. 依赖配置
<dependency> <groupId>com.github.magese</groupId> <artifactId>ik-analyzer</artifactId> <version>8.5.0</version> </dependency>
2.2. 分词实现
import org.wltea.analyzer.core.IKSegmenter; public List<String> ikSegment(String text) throws IOException { List<String> words = new ArrayList<>(); try (StringReader reader = new StringReader(text)) { IKSegmenter ik = new IKSegmenter(reader, true); // true启用智能切分 Lexeme lex; while ((lex = ik.next()) != null) { words.add(lex.getLexemeText()); } } return words; }
2.3. 自定义词典
支持扩展自定义词典。
IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!-- 配置是否加载默认词典 --> <entry key="use_main_dict">true</entry> <!-- 配置自己的扩展字典,多个用分号分隔 --> <entry key="ext_dict">ext.dic;</entry> <!-- 配置自己的扩展停止词字典,多个用分号分隔 --> <entry key="ext_stopwords">stopword.dic;</entry> </properties>
该配置文件放在classes下,同时扩展字典和停词字典都放在一起,字典用UTF-8无bom格式打开,一个词一行。
3. Elasticsearch + IK 分词(搜索场景)
版本注意:Spring Boot 2.x 需搭配 ES 7.x;Spring Boot 3.x 需选 ES 8.x+。
3.1. ES 集成配置
spring: elasticsearch: uris: http://localhost:9200
3.2. 索引映射配置
@Document(indexName = "articles") public class Article { @Field(type = FieldType.Text, analyzer = "ik_max_word") private String content; // 使用IK分词 }
3.3. 搜索时高亮分词结果
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); queryBuilder.withQuery(QueryBuilders.matchQuery("content", "关键词")); queryBuilder.withHighlightFields(new HighlightBuilder.Field("content")); SearchHits<Article> hits = elasticsearchRestTemplate.search(queryBuilder.build(), Article.class);
支持聚合统计与高亮显示。
4. DL4J 深度学习分词(NLP 场景)
适用于序列标注等复杂任务:
// 使用Jieba分词预处理(需额外依赖) import com.huaban.analysis.jieba.JiebaSegmenter; public List<String> jiebaSegment(String text) { return new JiebaSegmenter().process(text, JiebaSegmenter.SegMode.INDEX) .stream().map(segment -> segment.word).collect(Collectors.toList()); } // 结合DL4J构建神经网络模型(如BiLSTM-CRF) MultiLayerNetwork network = new TransferLearning.Builder(baseModel) .setFeatureExtractor("lstmLayer", new GravesLSTM.Builder().build()) .build();
适合实体识别等高级任务。
5. 方案选型建议
场景 | 推荐方案 | 特点 |
简单文本处理 | Ansj | 零配置、启动快、资源占用低 |
全文检索系统 | ES + IK | 分布式支持、高亮/聚合查询 |
专业搜索功能 | IK | 精准控制分词粒度 |
NLP复杂任务 | DL4J + Jieba | 支持自定义模型训练 |
0条评论
点击登录参与评论