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的进一步优化 可 ...
随机推荐
- softmax、cross entropy和softmax loss学习笔记
之前做手写数字识别时,接触到softmax网络,知道其是全连接层,但没有搞清楚它的实现方式,今天学习Alexnet网络,又接触到了softmax,果断仔细研究研究,有了softmax,损失函数自然不可 ...
- POJ 1063 Flip and Shift 最详细的解题报告
题目来源:Flip and Shift 题目大意:一个椭圆形的环形容器中有黑色和白色两种盘子,问你是否可以将黑色的盘子连续的放在一起.你可以有以下两种操作: 1.顺时针旋转所有的盘子 2.顺时针旋转3 ...
- Quartz.Net系列(十六):通过Plugins模式使用Xml方式配置Job和Trigger和自定义LogPrivider
1.简单介绍 Quarz.Net中采用插件式来实现配置文件配置,通过XMLSchedulingDataProcessor类进行Xml数据处理 默认配置文件命名:quart_jobs.xml publi ...
- MacOS系统隐藏文件操作
显示或关闭隐藏文件 显示:defaults write com.apple.finder AppleShowAllFiles -bool true ; killall Finder隐藏:default ...
- 软件测试面试题,十年HR面试经验分享
WeChat[代码小姐],快和我们一起进大厂,挑战高薪吧. 问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决. 1.将问题提交到缺陷管理库里面进行备案.2. ...
- .net core https 双向验证
文章来自:https://www.cnblogs.com/axzxs2001/p/10070562.html 关于https双向认证的知识可先行google,这时矸接代码. 为了双向认证,我们首先得准 ...
- ElasticSearch(二)Kibana、版本控制
Kibana简介: Kibana可视化界面 Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作. 你用Kibana来搜索,查看,并和存储在Elasticsearch ...
- 趣学Python编程PDF高清完整版免费下载|百度网盘
百度网盘:趣学Python编程PDF高清完整版免费下载 提取码:ts47 内容简介 python是一款解释型.面向对象.动态数据类型的高级程序设计语言.python语法简捷而清晰,具有丰富和强大的类库 ...
- 跟老刘学运维day02~新手必须掌握的Linux命令(2)
第2章 Linux命令 1.Shell 计算机硬件:由运算器.控制器.存储器.输入/输出设备等共同组成 Shell:人与硬件的翻译官,人要想使用硬件,需要服务程序 Bash四大好处: (1)通过上下方 ...
- Android集成Zxing
1.在build文件中添加依赖 dependencies { //ZXing implementation 'com.google.zxing:core:3.3.3' implementation(' ...