Hanlp的学习
参考:HanLP 自然语言处理使用总结-CSDN博客
参考:Sprint Boot 工程中HanLP配置相对路径,始终有问题的解决方案_springboot hanlp-CSDN博客
<!--hanlp 依赖--><dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.4</version></dependency>

public class ResourceFileIoAdapter implements IIOAdapter {@Overridepublic InputStream open(String path) throws IOException {ClassPathResource resource = new ClassPathResource(path);// return Files.newInputStream(resource.getFile().toPath());// Linux环境下跑要把open()里改成这样:return resource.getInputStream();}@Overridepublic OutputStream create(String path) throws IOException {ClassPathResource resource = new ClassPathResource(path);OutputStream os = new FileOutputStream(resource.getFile());return os;}
}
http://nlp.hankcs.com/download.php?file=data
下载后


其中数据分为词典和模型,其中词典是词法分析必需的,模型是句法分析必需的,用户可以自行增删替换,如果不需要句法分析等功能的话,随时可以删除model文件夹
实践使用
从文本中提取关键字
// 提取名词关键字
public static String extractOptimizedKeywords(String text, int keywordCount) {// 获取短语List<String> termList = HanLP.extractPhrase(text, 100);// 只保留都是名词的短语List<String> termNounsList = filterOnlyNounsFromPhrases(termList);System.out.println(termNounsList);// 计算TF-IDF值并排序Map<String, Double> tfidfMap = calculateTfidf(termNounsList, text);List<Map.Entry<String, Double>> sortedKeywords = tfidfMap.entrySet().stream().sorted(Map.Entry.<String, Double>comparingByValue().reversed()).collect(Collectors.toList());// 返回出现次数最多的前keywordCount个复合关键字List<String> keywords = sortedKeywords.stream().limit(keywordCount).map(Map.Entry::getKey).collect(Collectors.toList());// 将关键词列表转换为逗号分隔的字符串return String.join(", ", keywords);}// 获取名词短语
public static List<String> filterOnlyNounsFromPhrases(List<String> phrases) {List<String> nounOnlyPhrases = new ArrayList<>();for (String phrase : phrases) {// 对每个短语进行分词和词性标注List<Term> terms = HanLP.segment(phrase);// 检查短语中是否所有词都是名词boolean allNouns = terms.stream().allMatch(term -> term.nature.toString().startsWith("n"));// 如果短语中所有词都是名词,则保留该短语if (allNouns) {nounOnlyPhrases.add(phrase);}}return nounOnlyPhrases;}// 计算TF-IDF值并排序
private static Map<String, Double> calculateTfidf(List<String> terms, String corpus) {Map<String, Integer> termFrequency = terms.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(v -> 1)));Map<String, Integer> documentFrequency = calculateDocumentFrequency(corpus);Map<String, Double> tfidf = new HashMap<>();for (Map.Entry<String, Integer> entry : termFrequency.entrySet()) {String term = entry.getKey();int freq = entry.getValue();int df = documentFrequency.getOrDefault(term, 1); // 确保df至少为1,避免log(0)double tf = (double) freq / terms.size();double idf = Math.log((double) 1 + corpus.length() / df); // 调整idf公式,用语料库长度作为文档数量的代理double tfidfValue = tf * idf;tfidf.put(term, tfidfValue);}return tfidf;}private static Map<String, Integer> calculateDocumentFrequency(String corpus) {List<Term> docTerms = HanLP.segment(corpus);return docTerms.stream().filter(term -> term.nature.toString().startsWith("n")) // 使用startsWith("n")匹配任何名词性质.collect(Collectors.groupingBy(term -> term.word, Collectors.summingInt(v -> 1)));}
相关文章:
Hanlp的学习
参考:HanLP 自然语言处理使用总结-CSDN博客 参考:Sprint Boot 工程中HanLP配置相对路径,始终有问题的解决方案_springboot hanlp-CSDN博客 <!--hanlp 依赖--><dependency><groupId>com.hankcs</groupId><artifa…...
Excel中函数SIGN()的用法
Excel中函数SIGN的用法 1. 函数详细讲解1.1 函数解释1.2 使用格式1.3 参数定义1.4 要点 2. 实用演示示例2.1 函数需求2.2 公式编写 3. 注意事项4. 文档下载5. 其他文章6. 获取全部Excel练习素材快来试试吧🥰 函数练习素材👈点击即可进行下载操作操作注意…...
如何将本地电脑上的文件夹设置为和服务器的共享文件夹
将本地电脑上的文件夹设为与服务器共享的文件夹,通常是在本地开启文件共享,并配置相应的权限,使服务器可以访问该文件夹。以下以 Windows 系统为例说明具体操作步骤: 一、在本地电脑上设置共享文件夹 选择文件夹 找到需要共享的文…...
智能建筑时代的核心选择——基于SAIL-RK3576核心板的AI边缘计算网关方案
随着智能建筑技术的不断发展,建筑设备正日益向“智慧化”迈进。传统的建筑管理系统往往依赖中央服务器和云端平台进行数据处理和控制,但在实时监控、安防及能耗管理等关键环节,延迟和数据安全问题依然存在。此外,物联网设备数量激…...
08、如何预防SQL注入
目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…...
【时时三省】(C语言基础)柔性数组
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 柔性数组 C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做 柔性数组 成员。 例如: 这里把arr就称为柔性数组 有的编译器上是写成int arr&…...
mongodb详解二:基础操作
基础操作 数据库操作collection操作查看表插入数据查找数据 数据库操作 1.创建数据库 use test_db;如果没有数据库,use命令会新建一个;有的话,会切换到这个数据库 2.查看数据库 show dbs;collection操作 查看表 show tables;插入数据 …...
【数据分享】1929-2024年全球站点的逐月平均气温数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…...
管理口令安全和资源(一)
学习目标 Manage passwords using profiles: 使用配置文件(profiles)来管理密码。这意味着你应该能够设置和修改密码策略,比如密码的复杂性、有效期、尝试次数限制等。在Oracle数据库中,配置文件是一组可以应用于所有用户的预定义…...
【Linux】【Vim】vim编辑器的用法
一、vim简介 Vim是一款功能强大且高度可定制的文本编辑器,广泛应用于Linux 和 Unix系统中。 它不仅继承了vi编辑器的所有特性,还增加了许多新的功能,如语法高亮、代码折叠、多级撤销等。 Vim有三种主要的工作模式: 命令模式&am…...
Golang Gin系列-3:Gin Framework的项目结构
在Gin教程的第3篇,我们将讨论如何设置你的项目。这不仅仅是把文件扔得到处都是,而是要对所有东西的位置做出明智的选择。相信我,这些东西很重要。如果你做得对,你的项目会更容易处理。当你以后不再为了找东西或添加新功能而绞尽脑…...
LabVIEW实车四轮轮速信号再现系统
开发了一个基于LabVIEW的实车四轮轮速信号再现系统。该系统解决现有电机驱动传感器成本高、重复性差、真实性差和精度低等问题,提供一种高精度、低成本的轮速信号再现解决方案。 项目背景 ABS轮速传感器在现代汽车安全系统中发挥着至关重要的作用。为保证其准确性和…...
2025.1.16——六、BabySQL 双写绕过|联合注入
题目来源:buuctf [极客大挑战 2019]BabySQL 1 目录 一、打开靶机,分析已知信息 二、手工注入解题 step 1:万能密码 step 2:正常注入,判断字段数 step 3:绕过 step 4:查数据库 step 5&am…...
Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比
先说结论: Swgger 3.0 与Swagger 2.0 区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。 就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原…...
【已解决】git clone报错:Failed to connect to github.com port 443: Timed out
1.问题原因1 报错信息1: fatal: unable to access https://github.com/microsoft/xxx/: Failed to connect to github.com port 443: Timed out 报错信息2: fatal: unable to access https://github.com/xxx/xx/: OpenSSL SSL_read: Connection was …...
Qt 程序 DPI 适配方法归纳
方案1:通过 Windows api 处理 缺点:放大之后界面会模糊。 通过调用api实现 #include <ShellScalingAPI.h> #pragma comment(lib, "Shcore.lib")HRESULT hr SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE);或者使用qt.conf 实现 在…...
AI刷题-小R的随机播放顺序、不同整数的计数问题
目录 一、小R的随机播放顺序 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、 不同整数的计数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终…...
windows 极速安装 Linux (Ubuntu)-- 无需虚拟机
1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…...
【影刀_常规任务计划_API调用】
影刀_常规任务计划 1、在常规任务计划被关闭或者设置了定时任务的情况下(非手动执行),通过API的方式启动任务,任务仍然可以被正常执行。 2、如果在常规任务计划里面应用中填写的参数的话, 如果通过api执行ÿ…...
参数校验 Spring Validation框架
后端参数校验 解决:校验前端传入的参数是否符合预期 1、引入依赖 使用Spring Validation框架 <!-- validation参数校验框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validatio…...
Z-Image-GGUF完整教程:阿里通义文生图模型从安装到出图
Z-Image-GGUF完整教程:阿里通义文生图模型从安装到出图 你是不是也想过,要是能用几句话就让电脑画出你想象中的画面,那该多酷?比如,你想看“樱花树下的古寺,夕阳西下,电影感十足”,…...
MogFace人脸检测模型评测:对比传统方法,看看它强在哪里
MogFace人脸检测模型评测:对比传统方法,看看它强在哪里 1. 引言:从“找脸”的烦恼说起 你有没有试过在手机相册里,想快速找到所有包含某个朋友的合影?或者,在开发一个需要识别人脸的应用程序时࿰…...
终极指南:如何用Fara-7B实现智能电脑自动操作
终极指南:如何用Fara-7B实现智能电脑自动操作 【免费下载链接】fara Fara-7B: An Efficient Agentic Model for Computer Use 项目地址: https://gitcode.com/gh_mirrors/fara/fara Fara-7B是微软推出的首个专门为电脑自动操作设计的7B参数智能代理模型&…...
阿里通义Qwen3-Coder 多场景集成指南
1. Qwen3-Coder 核心能力与适用场景 第一次接触阿里通义Qwen3-Coder时,最让我惊讶的是它对代码上下文的理解深度。记得有次我随手输入"写个带缓存的斐波那契函数",它不仅生成了正确的Python实现,还主动添加了LRU缓存装饰器的使用说…...
AI头像生成器与SpringBoot集成实战:企业级应用开发指南
AI头像生成器与SpringBoot集成实战:企业级应用开发指南 你有没有想过,为什么现在很多电商平台的新用户注册后,头像都那么有个性,而且风格还挺统一?这背后其实不是设计师在加班加点,而是AI头像生成器在默默…...
OptiScaler终极指南:一键解锁三大显卡厂商的免费超采样神器
OptiScaler终极指南:一键解锁三大显卡厂商的免费超采样神器 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 还在为游戏…...
mmdetection2.11.0实战:如何用VOC和COCO数据集精准计算每个类别的mAP(附避坑指南)
mmdetection2.11.0实战:VOC与COCO数据集mAP计算全解析与避坑指南 在目标检测领域,mAP(mean Average Precision)是衡量模型性能的核心指标。但不同数据集(如VOC和COCO)的评估标准差异,常常让研究…...
3个步骤掌握AI音乐创作:语音模型驱动的开源工具实践指南
3个步骤掌握AI音乐创作:语音模型驱动的开源工具实践指南 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen AI翻…...
大厂面试必问:Nacos 灵魂 18 问,这篇文章帮你彻底搞定!
从基础概念到CAP原理,从心跳机制到集群部署,一篇搞定Nacos面试在微服务架构大行其道的今天,Nacos 作为阿里巴巴开源的动态服务发现、配置和服务管理平台,已经成为面试中的必考知识点。无论你是刚入行的初级工程师,还是…...
OpenClaw+Qwen3.5-4B-Claude:3个提升开发效率的自动化技巧
OpenClawQwen3.5-4B-Claude:3个提升开发效率的自动化技巧 1. 为什么开发者需要OpenClaw? 作为一名长期奋战在代码一线的开发者,我一直在寻找能够真正减轻重复劳动的工具。直到遇到OpenClaw与Qwen3.5-4B-Claude的组合,才发现原来…...
