2025-06-03 17:22

springboot项目如何进行中文分词?

王姐姐

Java后端

(49)

(0)

收藏

在 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条评论

点击登录参与评论