HanLP 基于SVM支持向量机 训练 文本分类

news2024/11/15 11:26:50

一、HanLP 基于SVM支持向量机分类器

上篇文章通过朴素贝叶斯文本分类器,训练测试了 搜狗文本分类语料库迷你版 ,本篇继续测试SVM支持向量机分类器。

由于HanLP 官方给出的 SVM 分类器依赖了第三方库,没有集成在主项目中,需要拉取 text-classification-svm 项目:

git clone https://github.com/hankcs/text-classification-svm.git

拉取项目后,发现 pom 依赖的 hanlp 版本是 portable-1.5.2,前面我们用的都是portable-1.8.3,这里就保持保本一致,将 pom 中 hannlp 的版本升级为 portable-1.8.3
在这里插入图片描述
升级后会有两点不兼容,需要修改 LinearSVMClassifier 类:

在这里插入图片描述

然后将该项目打包到本地 Maven 中方便其他项目使用:

mvn clean install -DskipTests

下面在自己的 Maven 项目中添加依赖:

<!-- svm 分类器扩展包-->
<dependency>
   <groupId>com.hankcs.nlp</groupId>
   <artifactId>text-classification</artifactId>
   <version>1.0.1</version>
</dependency>
<!-- svm 依赖 liblinear-->
<dependency>
   <groupId>de.bwaldvogel</groupId>
   <artifactId>liblinear</artifactId>
   <version>1.95</version>
</dependency>

有关于 HanLP 环境的搭建,可以参考下面这篇文章:

https://xiaobichao.blog.csdn.net/article/details/128271909

SVM 文本分类器,利用liblinear实现HanLP中的文本分类接口,因此对预料库的要求还是 将数据集根据分类放到不同的目录中:

在这里插入图片描述
下面还是使用 搜狗文本分类语料库迷你版 进行测试。

准备语料库

下载数据集:

http://file.hankcs.com/corpus/sogou-text-classification-corpus-mini.zip

下载加压后数据格式:

在这里插入图片描述
文本样例:

在这里插入图片描述

训练数据

public class ClassifyTrain {

    public static void main(String[] args) throws IOException {
        //语料库的地址
        String dataPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/搜狗文本分类语料库迷你版";
        //模型保存路径
        String modelPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/svm-classification-model.ser";
        //训练数据
        trainData(dataPath, modelPath);
    }

    private static void trainData(String dataPath, String modelPath) throws IOException {
        File corpusFolder = new File(dataPath);
        if (!corpusFolder.exists() || !corpusFolder.isDirectory())  {
            System.err.println("没有文本分类语料");
            return;
        }
        // FileDataSet省内存,可加载大规模数据集,支持不同的ITokenizer,详见源码中的文档
        // 使用前90% 的数据作为训练集
        IDataSet trainingCorpus = new FileDataSet()
                .setTokenizer(new HanLPTokenizer())
                .load(dataPath, "UTF-8", 0.9);
        // 创建SVM分类器
        IClassifier classifier = new LinearSVMClassifier();
        // 训练数据
        classifier.train(trainingCorpus);
        // 获取训练模型
        AbstractModel model = classifier.getModel();
        // 使用后10% 的数据作为测试集
        IDataSet testingCorpus = new MemoryDataSet(model)
                .load(dataPath, "UTF-8", -0.1);
        // 计算准确率
        FMeasure result = Evaluator.evaluate(classifier, testingCorpus);
        System.out.println("测试集准确度:");
        System.out.println(result);
        // 保存模型
        IOUtil.saveObjectTo(model, modelPath);
    }

}

查看训练日志:

在这里插入图片描述

查看训练模型:

在这里插入图片描述

测试模型

public class TestClassify {

    public static void main(String[] args) {
        String modelPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/svm-classification-model.ser";
        testModel(modelPath);
    }

    private static void testModel(String modelPath){
        LinearSVMModel model = (LinearSVMModel) IOUtil.readObjectFrom(modelPath);
        IClassifier classifier = new LinearSVMClassifier(model);
        // 测试分类
        String text1 = "研究生考录模式亟待进一步专业化";
        System.out.printf("《%s》 属于分类 【%s】\n", text1, classifier.classify(text1));

        String text2 = "C罗获2018环球足球奖最佳球员 德尚荣膺最佳教练";
        System.out.printf("《%s》 属于分类 【%s】\n", text2, classifier.classify(text2));

        String text3 = "英国造航母耗时8年仍未服役 被中国速度远远甩在身后";
        System.out.printf("《%s》 属于分类 【%s】\n", text3, classifier.classify(text3));

        String text4 = "如果真想用食物解压,建议可以食用燕麦";
        System.out.printf("《%s》 属于分类 【%s】\n", text4, classifier.classify(text4));

    }

}

测试结果:

在这里插入图片描述

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

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

相关文章

问题解决(1)——VS中scanf报错怎么解决

目录 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 各位好&#xff0c;博主新建了个公众号《自学编程村》&#xff0c;拉到底部即可看到&#xff0c;有情趣可以关注看看哈哈&#xff0c;关注后还可以加博主wx呦~~~&#xff08;公众号拉到底部就能看到呦~~&am…

Redis【13】-修改数据库后,如何保证Redis与数据库的数据一致性

一、需求起因 在高并发的业务场景下&#xff0c;数据库大多数情况都是用户并发访问最薄弱的环节。所以&#xff0c;就需要使用redis做一个缓冲操作&#xff0c;让请求先访问到redis&#xff0c;而不是直接访问MySQL等数据库。 这个业务场景&#xff0c;主要是解决读数据从Redi…

ARM 代码重定位实战

前言 任务 在 SRAM 中将代码从 0xd0020010 重定位到 0xd0024000。任务解释&#xff1a;本来代码是运行在0xd0020010的&#xff0c;但是因为一些原因我们又希望代码实际是在0xd0024000位置运行 的。这时候就需要重定位了。注解&#xff1a;本练习对代码本身运行无实际意义&…

你都工作两年半了,还不会RabbitMQ?

What is rabbitMQ &#xff1f; RabbitMQ 是一个由 Erlang 语言开发的 AMQP(高级消息队列协议) 的开源实现。 RabbitMQ 是轻量级且易于部署的&#xff0c;能支持多种消息协议。 RabbitMQ 可以部署在分布式和联合配置中&#xff0c;以满足高规模、高可用性的需求。 具体特点包括…

ADI Blackfin DSP处理器-BF533的开发详解29:TOUCH_LINE(屏幕画线)(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 功能介绍 代码实现了读取触摸屏坐标&#xff0c;并将触摸屏坐标换算为液晶屏的显示坐标&#xff0c;将像素点显示到触摸坐标的位…

学习Python中turtle模块的基本用法(4:绘制科赫曲线和谢尔宾斯基三角形)

科赫曲线和谢尔宾斯基三角形是常见的分形图形&#xff08;详细介绍见参考文献1&#xff09;&#xff0c;本文使用turtle库绘制这两类图形。 科赫曲线 科赫曲线的详细介绍见参考文献2&#xff0c;其中的绘图思路是“画正三角形&#xff0c;并把每一边三等分,取三等分后的一边中…

【LeetCode】Day194-超级丑数

题目 313. 超级丑数【中等】 题解 之前做过丑数&#xff0c;规定丑数是质因数只包含2,3,5的正整数&#xff0c;而这道题丑数升级为超级丑数&#xff0c;规定为包含的质因数是在primes数组中的正整数 丑数的题解用动态规划&#xff0c;那么超级丑数也可以利用相同的方法解答…

CSS -- CSS元素显示模式总结(块元素,行内元素,行内块元素)

文章目录CSS 的元素显示模式1 什么是元素显示模式2 块元素3 行内元素4 行内块元素5 元素的显示模式总结CSS 的元素显示模式 1 什么是元素显示模式 作用&#xff1a;网页的标签非常多&#xff0c;在不同地方会用到不同类型的标签&#xff0c;了解他们的特点可以更好的布局我们…

[附源码]JAVA毕业设计-学生宿舍故障报修管理信息系统-(系统+LW)

[附源码]JAVA毕业设计-学生宿舍故障报修管理信息系统-&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff…

开源即巅峰,《Java程序性能优化实战》GitHub三小时标星已超34k

蓦然回首自己做开发已经十年了&#xff0c;这十年中我获得了很多&#xff0c;技术能力、培训、出国、大公司的经历&#xff0c;还有很多很好的朋友。但再仔细一想&#xff0c;这十年中我至少浪费了五年时间&#xff0c;这五年可以足够让自己成长为一个优秀的程序员&#xff0c;…

项目设置分页条件查询接口

一、分页 1、HospPlusConfig中配置分页插件1 /** 2 * 分页插件 3 */ 4 Bean 5 public PaginationInterceptor paginationInterceptor() { 6 return new PaginationInterceptor(); 7 }2、分页Controller方法 HospitalSetController中添加分页方法1 ApiOperation(value "分…

Python学习基础笔记四十二——序列化模块

1、序列化的概念&#xff1a; 序列&#xff1a;就是字符串。 序列化&#xff1a;将原本的字典、列表等内容转换成一个字符串数据类型的过程就叫做序列化。 反序列化&#xff1a;从字符串到数据类型的过程。 2、序列化的目的&#xff1a; 1、以某种存储形式使自定义的数据持…

servlet+Mysql实现的校园论坛管理系统(功能包含登录,首页帖子查看、发帖、个人帖子删除编辑、帖子评论回复、用户管理等)

博客目录servletMysql实现的校园论坛管理系统实现功能截图系统功能使用技术代码完整源码servletMysql实现的校园论坛管理系统 本系统是一个简单的校园论坛系统&#xff0c;学生可以在线发帖并进行帖子评论回复&#xff0c;同同时管理员可以对用户进行管理。 (文末查看完整源码…

win11: cmake+glfw+imgui

下载源码&#xff1a;imgui github地址 将需要的文件拖拽入项目外部库的imgui文件夹 backends文件夹里选择与环境适配的文件&#xff0c;我这里用了glfw和opengl3 目录结构&#xff1a; CMakeLists.txt cmake_minimum_required(VERSION 3.24) project(proforlearn) set(CM…

基于java+springmvc+mybatis+jsp+mysql的实验室计算机故障报修系统

项目介绍 本系统采用java语言开发&#xff0c;后端采用ssm框架&#xff0c;前端采用jsp技术&#xff0c;数据库采用mysql进行数据存储。 前端页面&#xff1a; 功能&#xff1a;首页、设备信息、公告资讯、个人中心、后台管理、联系客服 管理员后台页面&#xff1a; 功能&…

电子学会2020年12月青少年软件编程(图形化)等级考试试卷(二级)答案解析

目录 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题【该题由测评师线下评分】&#xff08;共2题&#xff0c;共30分&#xff09; 青少年软件…

业务流程监控:让多维度监控有了灵魂

需求 《可视化业务流程监控&#xff0c;是解决方案更是运维之道&#xff01;》一文让我们知道可以借助Grafana 两个插件&#xff1a;Diagram、FlowCharting&#xff0c;满足我们对于图形数据业务流程的可视化监控&#xff0c;但是在使用前需要我们做好以下两点工作&#xff1a…

修复自定义标题word题注错误:错误,文档中没有指定样式的文字以及编号无法随章节变化问题

一、单个修复指定章节号 假设采用自定义样式“毕业”&#xff0c;如果出现类似提示&#xff0c;可以具体操作如下&#xff1a; 光标定位与错误题注的位置&#xff0c;按shift F9 {STYLEREF 1 \s} - 2 将内容修改为 图 {STYLEREF "毕业" \s} - 2 右击&#xff0c;更…

被人叫做砖家模拟器的ChatGPT,它真的靠谱吗?

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 前言 最近很热门的聊天机器人ChatGPT&#xff0c;据说五天时间用户就破了百万&#xff0c;这几天在体验过程中发现了一些问题&#xff0c;今天我就以下列几个方面来跟大家简单的交流下ChatGPT。 ChatGPT怎么注册国…

【博客555】prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响

prometheus的step&#xff0c;durations&#xff0c;rate interval&#xff0c;scrape interval对数据查询结果的影响 1、场景&#xff1a;在查询prometheus数据时出现很多诡异的现象 1、为什么同样的查询语句在不同的时间点查询&#xff0c;对过去某一时刻的数据展示却不一样…