本文目录导读:

我来为您介绍几个Java分词的使用案例,主要使用HanLP和Jieba这两个流行的分词工具。
HanLP分词案例
依赖配置(Maven)
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.4</version>
</dependency>
基础分词示例
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.NLPTokenizer;
import com.hankcs.hanlp.tokenizer.StandardTokenizer;
import java.util.List;
public class HanLPDemo {
public static void main(String[] args) {
String text = "我爱自然语言处理技术,Java编程很有趣";
// 1. 标准分词
System.out.println("标准分词:");
List<Term> termList = StandardTokenizer.segment(text);
for (Term term : termList) {
System.out.println(term.word + "/" + term.nature);
}
// 2. NLP分词(更准确,但速度较慢)
System.out.println("\nNLP分词:");
List<Term> nlpTerms = NLPTokenizer.segment(text);
for (Term term : nlpTerms) {
System.out.println(term.word + "/" + term.nature);
}
// 3. 快速获取分词结果
System.out.println("\n简洁分词结果:");
System.out.println(HanLP.segment(text));
}
}
Jieba分词案例
依赖配置(Maven)
<dependency>
<groupId>com.huaban</groupId>
<artifactId>jieba-analysis</artifactId>
<version>1.0.2</version>
</dependency>
基础分词示例
import com.huaban.analysis.jieba.JiebaSegmenter;
import com.huaban.analysis.jieba.SegToken;
import com.huaban.analysis.jieba.WordDictionary;
import java.io.*;
import java.util.List;
public class JiebaDemo {
public static void main(String[] args) {
JiebaSegmenter segmenter = new JiebaSegmenter();
String text = "我来到北京清华大学学习人工智能";
// 1. 精确模式
System.out.println("精确模式分词:");
List<SegToken> tokens = segmenter.process(text, JiebaSegmenter.SegMode.INDEX);
for (SegToken token : tokens) {
System.out.println(token.word + " (" + token.startOffset + "-" + token.endOffset + ")");
}
// 2. 搜索引擎模式
System.out.println("\n搜索引擎模式分词:");
List<SegToken> searchTokens = segmenter.process(text, JiebaSegmenter.SegMode.SEARCH);
for (SegToken token : searchTokens) {
System.out.println(token.word + " (" + token.startOffset + "-" + token.endOffset + ")");
}
}
}
完整的分词工具类
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.NLPTokenizer;
import java.util.*;
import java.util.stream.Collectors;
public class ChineseTokenizerUtil {
/**
* 分词并获取词性
*/
public static List<WordWithPOS> segmentWithPOS(String text) {
List<Term> termList = NLPTokenizer.segment(text);
return termList.stream()
.map(term -> new WordWithPOS(term.word, term.nature.toString()))
.collect(Collectors.toList());
}
/**
* 获取关键词
*/
public static List<String> extractKeywords(String text, int topN) {
return HanLP.extractKeyword(text, topN);
}
/**
* 获取摘要
*/
public static List<String> extractSummary(String text, int sentenceCount) {
return HanLP.extractSummary(text, sentenceCount);
}
/**
* 去除停用词
*/
public static List<String> removeStopWords(String text, Set<String> stopWords) {
List<Term> termList = NLPTokenizer.segment(text);
return termList.stream()
.map(term -> term.word)
.filter(word -> !stopWords.contains(word))
.filter(word -> word.length() > 1) // 过滤单字
.collect(Collectors.toList());
}
// 内部类
public static class WordWithPOS {
private String word;
private String pos;
public WordWithPOS(String word, String pos) {
this.word = word;
this.pos = pos;
}
@Override
public String toString() {
return word + "/" + pos;
}
}
}
实际应用案例
文本分析示例
public class TextAnalysisDemo {
public static void main(String[] args) {
String text = "华为公司在深圳发布了最新款的Mate 60 Pro智能手机,"
+ "该产品搭载了麒麟9000S处理器,支持卫星通信功能。";
// 1. 分词并分析
System.out.println("=== 分词结果 ===");
List<ChineseTokenizerUtil.WordWithPOS> words =
ChineseTokenizerUtil.segmentWithPOS(text);
words.forEach(System.out::println);
// 2. 提取关键词
System.out.println("\n=== 关键词提取 ===");
List<String> keywords = ChineseTokenizerUtil.extractKeywords(text, 5);
keywords.forEach(System.out::println);
// 3. 提取摘要
System.out.println("\n=== 摘要提取 ===");
List<String> summary = ChineseTokenizerUtil.extractSummary(text, 2);
summary.forEach(System.out::println);
// 4. 自定义停用词过滤
System.out.println("\n=== 去停用词结果 ===");
Set<String> stopWords = new HashSet<>(Arrays.asList("的", "了", "在"));
List<String> filteredWords =
ChineseTokenizerUtil.removeStopWords(text, stopWords);
filteredWords.forEach(System.out::println);
}
}
性能对比测试
public class PerformanceTest {
public static void main(String[] args) {
String text = "自然语言处理是人工智能领域中的一个重要方向。";
int iterations = 10000;
// HanLP测试
long startTime = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
HanLP.segment(text);
}
long hanlpTime = System.currentTimeMillis() - startTime;
System.out.println("HanLP 耗时:" + hanlpTime + "ms");
// Jieba测试
JiebaSegmenter segmenter = new JiebaSegmenter();
startTime = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
segmenter.process(text, JiebaSegmenter.SegMode.INDEX);
}
long jiebaTime = System.currentTimeMillis() - startTime;
System.out.println("Jieba 耗时:" + jiebaTime + "ms");
}
}
使用建议
- HanLP:适合需要词性标注、命名实体识别等高级功能的场景
- Jieba:轻量级,适合简单的分词需求,性能较好
- 实际开发中:建议根据具体需求选择合适的分词工具,并做好性能测试
这些案例涵盖了Java分词的主要应用场景,您可以根据实际需求选择合适的实现方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播