Libsvm java工程实践
在上篇文章中对libsvm的流程和简单的java代码测试做了说明,本篇简单对libsvm如何在工程中实践进行简短说明,不当的地方欢迎大家指正。
第一步是对libsvm的预测函数进行调整,我是从svm_predict类中抽取部分代码组成预测防范,代码如下:
/**
* 对传入的文本特征根据训练好的分类模型进行分类
* @param model 已经训练好的模型
* @param contentFeature 传入的计算好的文本分词后的特征
* @return
*/
public static int libSvmPredict(svm_model model, String contentFeature){
//默认分类类别为-1
int label = -1;
//判断传入的文本特征是否为空
if (contentFeature == null) return label;
//对传入的特征进行切分
StringTokenizer st = new StringTokenizer(contentFeature," \t\n\r\f:");
//这里target用不到,测试中会用到,即我们测试语料的类别标签
// double target = atof(st.nextToken());
int m = st.countTokens()/2;
svm_node[] x = new svm_node[m];
for(int j=0;j<m;j++)
{
x[j] = new svm_node();
x[j].index = atoi(st.nextToken());
x[j].value = atof(st.nextToken());
} double v = svm.svm_predict(model,x);
label = (int) v;
return label;
}
第二步对待分类的文本按照上篇文章中讲到的方法根据terms词表生成libsvm需要的格式,注意我这里为了方便仅做了词的tf,idf默认都为1,代码如下:
/**
* 获取模型分词用的term词表
* @param termsPath
* @return
*/
public static Map<String, Integer> getModelTerms(String termsPath){
Map<String, Integer> termsMap = new HashMap<String, Integer>( );
try {
String termsStr = FileOptionUtil.readFile( termsPath, "UTF-8" );
if (termsStr != null){
String[] terms = termsStr.split( "\r\n" );
if (terms!=null && terms.length>0){
for (int i=0; i<terms.length; i++){
String term = terms[i];
String[] termM = term.split( "\t" );
if (termM!=null && termM.length==2){
termsMap.put( termM[0], Integer.parseInt(termM[1]) );
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return termsMap;
} public static String getContentFeature(String content, Map<String, Integer> terms){
String contentFature = "";
//对传入的文本进行分词
Map<String, Integer> contentTermsMap = HanLPAnalyser.segString( content );
Map<Integer, Double> contentTfIdf = new TreeMap<Integer, Double>( new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo( o2 );
}
} );
//计算tf-idf,这里我们就用单存的tf代替tf-idf,idf值均为1
for (String word : contentTermsMap.keySet()){
if (terms.containsKey( word )){
contentTfIdf.put( terms.get( word ), getWordTF( word, contentTermsMap ) );
}
} for (Integer key : contentTfIdf.keySet()){
contentFature += key + ":" + contentTfIdf.get( key ) + " ";
} return contentFature.trim();
}
第三步根据上述方法进行分类计算,main方法代码如下:
public static void main(String[] args){
String s = "    依照上海证券交易所发布的《关于证券公司创设白云机场权证有关事项的\n" +
"通知》,光大证券股份有限公司向上海证券交易所申请注销白云机场认沽权证并\n" +
"已获核准,中国证券登记结算有限责任公司上海分公司已办理相应登记手续。本\n" +
"公司此次获准注销的白云机场认沽权证数量为1,500万份,该权证的条款与原白\n" +
"云机场认沽权证(交易简称机场JTP1、交易代码580998、行权代码582998)的条\n" +
"款完全相同。\n" +
"    \n";
Map<String, Integer> terms = LibSvmDataProcess.getModelTerms( "/Users/zhouyh/work/yanfa/xunlianji/UTF8/heji/terms.txt" );
String contentFeature = LibSvmDataProcess.getContentFeature( s, terms);
svm_model model = GetSvmModel.getSvmModelInstance().getModel( "/Users/zhouyh/work/yanfa/xunlianji/UTF8/heji/model.txt" );
int label = libSvmPredict(model, contentFeature);
System.out.println(label);
}
测试结果如图,财经类和我们选择的语料类别也一致,如下图所示:

最后,此代码仅为将libsvm如何在工程中实践做了下流程走通,后续要在工程中使用,还需要做很多的调整。
Libsvm java工程实践的更多相关文章
- Quartz应用实践入门案例二(基于java工程)
在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...
- 大型网站系统与Java中间件实践
大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著 ISBN 978-7-121-22761-5 2014年4 ...
- Eclipse使用Maven创建普通Java工程时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:RELEASE from any of the configured repositories.
报错信息如下: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:RELEASE f ...
- Maven学习(2) - Maven构建多模块Java工程
概述 项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程. 软件环境 Java:1.6.0_26 Maven:3.1.1 OS:WindowXP SP3 项 ...
- 工程实践:给函数取一个"好"的名字
工程实践:给函数取一个"好"的名字 早在2013年,国外有个程序员做了一个有意思的投票统计(原始链接请见:<程序员:你认为最难做的事情是什么?>),该投票是让程序员从以 ...
- 《大型网站系统与JAVA中间件实践》读书笔记-消息中间件
消息中间件 1.消息中间件的价值 1.1 透过示例看消息中间件对应用的解耦 1.1.1.通过服务调用让其他系统感知事件发生的方式 假设我们要做一个用户登录系统,其中需要支持的一个功能是,用户登录成功 ...
- AES加密原理和AOE工程实践
在AI业务的开发的过程中,我们常常需要对模型文件进行加密.我们从以下几个方面来说一说AES的加密原理以及AOE里的工程实践. 常见的加密算法 AOE对模型加密需求的思考 AES的加密原理 AOE工程实 ...
- java工程打成jar包 - 使用maven assembly插件打包及手动打包
在java工程打包的过程中遇到过不少问题,现在总结一下.一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便:另一种是依赖了本机jar包(不能通过pom.xml ...
- 基于menu小插件探索工程实践
目录 一.准备工作 1.C/C++环境搭建 2.VSCode的配置 (1) 安装插件: (2) 设置配置文件: 二.工程化编程实战 1.模块化设计 2.可重用设计:进一步抽象 menu的进一步优化 可 ...
随机推荐
- 对掌机游戏Pokemon的一部分系统的拆解流程图
整体系统拆解 POKEMON系统拆解 属性.技能.进化形态 属性提升系统 种族值说明: 所有Pokemon都拥有自己的种族的种族值,且固定(例如:小火龙:309, 皮卡丘: 320) 种族值是各项属性 ...
- vpp之clib.h分析
vpp代码中有一个clib.h,其中封装了很一些很经典的位运算: //计算以2为底的对数,log2(x) //也就是计算2的N次方为x.x为uint32类型 #if defined (count_le ...
- Spring AOP里的静态代理和动态代理,你真的了解嘛?
什么是代理? 为某一个对象创建一个代理对象,程序不直接用原本的对象,而是由创建的代理对象来控制原对象,通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为 ...
- vue : 无法加载文件 C:\Users\ui61895076\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
说白了就是这个编辑器不能用罢了 执行以下代码 1.鼠标右击以管理员身份运行vscode; 2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的; 3. 执行: ...
- 将终结点图添加到你的ASP.NET Core应用程序中
在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章中所示),可以使用Gra ...
- PyQt5布局管理器
布局分类 绝对定位:使用move方法将空间直接定死在某个坐标,不会随着窗口大小的改变而改变 可变布局:使用各种布局管理器,实现组件的位置和大小随着窗口的变化而变化 布局管理器 QHBoxLayout: ...
- xmake从入门到精通12:通过自定义脚本实现更灵活地配置
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 本文主要详细讲解下,如何通过添加自定义的脚本,在脚 ...
- 题解 CF585F 【Digits of Number Pi】
考虑用数位 \(DP\) 来统计数字串个数,用 \(SAM\) 来实现子串的匹配. 设状态 \(f(pos,cur,lenth,lim,flag)\),表示数位的位数,在 \(SAM\) 上的节点,匹 ...
- 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘
百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...
- SSM框架整合的最新打开方式(打造最详细的SSM整合教程)
SSM整合 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! SSM 一.创建一个Maven项目 File ...