java 使用HanLP 入门教程

1. 安装 HanLP

Maven 依赖
<dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.4</version> <!-- 最新版本请查看官网 -->
</dependency>

注意:portable 版本内置小型词典,适合基础任务;若需完整功能,需下载完整数据包。


2. 基础功能

(1) 分词
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;public class BasicDemo {public static void main(String[] args) {String text = "你好,欢迎使用HanLP!这是一段测试文本。";// 标准分词List<Term> termList = HanLP.segment(text);System.out.println(termList);// 输出: [你好/vl, ,/w, 欢迎/v, 使用/v, HanLP/nx, !/w, 这是/r, 一段/m, 测试/vn, 文本/n, 。/w]}
}
(2) 词性标注

HanLP 的分词结果已包含词性(如 n=名词,v=动词):

for (Term term : termList) {System.out.println(term.word + " : " + term.nature);
}

常用词性标记

  • n:名词
  • v:动词
  • w:标点符号
  • nx:外文单词

3. 进阶功能

(1) 关键词提取
import com.hankcs.hanlp.summary.TextRankKeyword;List<String> keywords = HanLP.extractKeyword(text, 5); // 提取前5个关键词
System.out.println(keywords); // 输出: [文本, 测试, HanLP, 欢迎, 使用]
(2) 命名实体识别(NER)
List<Term> termList = HanLP.segment("马云在阿里巴巴工作。");
for (Term term : termList) {if (term.nature.toString().startsWith("nr")) { // nr=人名System.out.println("人名: " + term.word);} else if (term.nature.toString().startsWith("ns")) { // ns=地名System.out.println("地名: " + term.word);}
}
// 输出: 人名: 马云  地名: 阿里巴巴
(3) 自定义词典
// 方式1:临时添加单词
HanLP.Config.CustomDictionaryPath = new String[]{"data/dictionary/custom/CustomDictionary.txt"};
HanLP.Config.enableDebug();// 方式2:动态添加
CustomDictionary.add("量子计算", "n 1024");
CustomDictionary.insert("神经网络", "n 1024");// 使用自定义词典分词
System.out.println(HanLP.segment("量子计算是未来趋势"));
// 输出: [量子计算/n, 是/v, 未来/t, 趋势/n]

4. 高级配置

(1) 切换分词模式
// 极速词典分词(不标注词性)
List<String> fastSegResult = HanLP.segmentFaster(text);// 标准分词(带词性)
List<Term> stdSegResult = HanLP.segment(text);// NLP分词(高精度,需完整数据包)
List<Term> nlpSegResult = HanLP.newSegment().enableNameRecognize(true).seg(text);
(2) 加载完整数据包
  1. 下载数据包并解压。
  2. 配置 hanlp.properties
    root=path/to/hanlp-data
    

5. 完整示例

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;
import java.util.List;public class HanLPFullDemo {public static void main(String[] args) {String text = "清华大学位于北京市海淀区。";// 分词 + 词性标注List<Term> terms = HanLP.segment(text);System.out.println("分词结果: " + terms);// 命名实体识别terms = HanLP.newSegment().enablePlaceRecognize(true).seg(text);for (Term term : terms) {if (term.nature.toString().startsWith("ns")) {System.out.println("地名: " + term.word);}}// 关键词提取List<String> keywords = HanLP.extractKeyword(text, 3);System.out.println("关键词: " + keywords);}
}

输出

分词结果: [清华大学/nt, 位于/v, 北京市/ns, 海淀区/ns, 。/w]
地名: 北京市
地名: 海淀区
关键词: [海淀区, 北京市, 清华大学]

6. 常见问题

  1. 词典加载失败:检查 hanlp.properties 中的 root 路径是否正确。
  2. 内存不足:使用 portable 版本或增加 JVM 内存:-Xms512m -Xmx1024m
  3. 性能优化:对长文本使用 HanLP.segmentFaster()

官方资源

  • GitHub
  • 文档

HanLP 功能强大且灵活,适合中文 NLP 的各种场景!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vm虚拟机添加虚拟机无反应,获取所有权

问题描述 虚拟机忘记关机&#xff0c;就把电脑关了&#xff0c;早上打开用不了了&#xff0c;重新添加&#xff0c;也没反应&#xff0c;获取所有权后就没了 问题解决 将虚拟机文件目录下的.lck文件夹&#xff0c;删除&#xff0c;或者改个名&#xff0c;我是改为了.backup方…

为何选择Spring框架学习设计模式与编码技巧?

&#x1f4cc; 结论先行 推荐项目&#xff1a;Spring Framework 推荐理由&#xff1a;设计模式覆盖全面 编码技巧教科书级实现 Java 生态基石地位 &#x1f3c6; 三维度对比分析 维度SpringMyBatisXXL-JOB设计模式⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐代码抽象⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐生态价…

MySQL 索引:聚集索引与二级索引

在数据库性能优化的征途中&#xff0c;索引无疑扮演着至关重要的角色。正确理解和使用索引&#xff0c;能够显著提升查询效率&#xff0c;为应用带来丝滑般的操作体验。今天&#xff0c;我们将深入 MySQL 的心脏&#xff0c;重点探讨 InnoDB 存储引擎中两种核心的索引类型&…

【Elasticsearch】映射:详解 _source store 字段

映射&#xff1a;详解 _source & store 字段 1._source 字段1.1 特点1.2 示例 2.store 字段2.1 特点2.2 示例 3.两者对比3.1 使用建议3.2 实际应用示例 1._source 字段 _source 是 Elasticsearch 中一个特殊的元字段&#xff0c;它存储了文档在索引时的原始 JSON 内容。 …

新建网站部署流程

1. 新建 Node 服务&#xff0c;指定端口并代理前端静态资源 操作步骤&#xff1a; 初始化 Node 项目mkdir my-website && cd my-website npm init -y npm install express创建 app.js&#xff08;示例代码&#xff09;const express require(express); const app e…

时序数据库IoTDB结合SeaTunnel实现高效数据同步

益、基本概念介绍 1.1 Apache IoTDB Apache IoTDB是一款专为工业物联网设计的时序数据库管理系统&#xff0c;集数据收集、存储、管理与分析于一体&#xff0c;满足海量数据存储、高速读取及复杂数据分析需求。其架构包括时序文件&#xff08;TsFile&#xff09;、数据库引擎…

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…

RFID推动新能源汽车零部件生产系统管理应用案例

RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域&#xff0c;电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式&#xff0c;存在单点位单独头溯源、网关布线…

C#封装HttpClient:HTTP请求处理最佳实践

C#封装HttpClient&#xff1a;HTTP请求处理最佳实践 在现代的.NET应用程序开发中&#xff0c;与外部服务进行HTTP通信是一项常见需求。HttpClient作为.NET框架中处理HTTP请求的核心组件&#xff0c;为我们提供了强大而灵活的API。然而&#xff0c;直接使用原生的HttpClient可能…

【Redis/2】核心特性、应用场景与安装配置

文章目录 一、初识 Redis1.1 Redis 概述1. Redis 简介2. Redis 的发展历程 1.2 Redis 核心特性1. 高性能2. 丰富的数据类型3. 持久化4. 原子操作5. 主从复制6. 高可用性与分布式7. 内存存储与低延迟8. 灵活的过期策略9. 事务支持10. 简单的 API总结 1.3 Redis 应用场景Redis 适…

AI大模型在测试领域应用案例拆解:AI赋能的软件测试效能跃迁的四大核心引擎(顺丰科技)

导语 5月份QECon深圳大会已经结束&#xff0c;继续更新一下案例拆解&#xff0c;本期是来自顺丰科技。 文末附完整版材料获取方式。 首先来看一下这个案例的核心内容&#xff0c;涵盖了测四用例设计、CI/CD辅助、测试执行、监控预警四大方面&#xff0c;也是算大家比较熟悉的…

【HTML】HTML 与 CSS 基础教程

作为 Java 工程师&#xff0c;掌握 HTML 和 CSS 也是需要的&#xff0c;它能让你高效与前端团队协作、调试页面元素&#xff0c;甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML&#xff0c;网页骨架搭建 核心概念&#xff1a;HTML通过标签定义内…

Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot

Redis 集群报错 CROSSSLOT Keys in request dont hash to the same slot 的原因及解决方案 1. 错误原因 在 Redis 集群模式下&#xff0c;数据根据 哈希槽&#xff08;Slot&#xff09; 分散存储在不同的节点上&#xff08;默认 16384 个槽&#xff09;。当执行涉及多个 key …

.Net Framework 4/C# LINQ*

一、什么是 LINQ LINQ 是一种在 C# 等编程语言中集成的查询功能&#xff0c;它允许开发者使用编程语言本身的语法进行数据查询&#xff0c;而不是嵌入式的字符串 SQL 语句。LINQ 查询可以应用于对象、XML 和数据库等多种数据源。 二、LINQ 查询的基本构成 LINQ 查询通常包含以…

【docker】容器技术如何改变软件开发与部署格局

在当今数字化时代&#xff0c;软件开发与部署的效率和灵活性至关重要。就像古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。”Docker 作为一款强大的容器技术&#xff0c;正如同软件开发领域的一把利器&#xff0c;极大地改变了应用的开发、交付和运行方式。本文将深入…

MySQL的优化部分介绍

1、定期维护表&#xff1a; ANALYZE TABLE t_order_package; OPTIMIZE TABLE t_order_package; -- 每月在低峰期执行 2、数据归档&#xff08;如果create_time较旧&#xff09;&#xff1a; -- 归档旧数据到历史表 INSERT INTO t_order_package_archive SELECT * FROM t_or…

Go基本语法——go语言中的四种变量定义方法

前言 在go语言中&#xff0c;定义一个变量有四种方式&#xff0c;本文单从语法的层面来介绍这几种方式 单变量定义方法 1.var 变量名 类型&#xff0c;不进行初始化 例如&#xff0c;定义一个变量a后为其赋值&#xff0c;并且打印其值&#xff0c;运行结果如下 //1.不进行…

C++ 对 C 的兼容性

C 对 C 语言的兼容性是有限且有条件的&#xff0c;并非完全无缝兼容。这种兼容性主要体现在语法、标准库和运行时特性上&#xff0c;但存在一些关键差异和不兼容点。以下是详细分析&#xff1a; 一、C 对 C 的兼容性表现 1. 语法兼容&#xff1a;大部分 C 代码可直接编译 基…

ES6 核心语法手册

ES6 核心语法手册 一、变量声明 关键字作用域是否可重定义是否可修改特性let块级作用域❌✅替代 var 的首选const块级作用域❌❌声明常量&#xff08;对象属性可修改&#xff09; // 示例 let name "Alice"; name "Bob"; // ✅const PI 3.14; // PI …

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…