当前位置: 首页 > 编程日记 > 正文

文本分类step by step(二)

(注:如有转载请标明作者:finallyliuyu, 和出处:博客园)

文本分类 step by step(一)

  在《文本分类step by step(一》中,我们从处理语料库开始讲起,一直讲到利用分类器进行分类。文章末尾还随机抽取了一篇文章,给出了这篇文章的标题、正文、实际类别,分类器所分类别等信息。在此篇博客中我们将介绍分类器的评估,以及代码的一些介绍,最后给出程序和实验语料库的下载地址。

(一)分类器评估

关于查准率,查全率,F值的定义以及的代码实现见博文《评估分类器》

主函数调用如下:

 

ExpandedBlockStart.gif计算准确率,召回率,F值
map<string,vector<double> >evaluation;
for(vector<string>::iterator it=labels.begin();it!=labels.end();it++)
{
    
double precision=p.getPrecision(*it,classifyResults,"TestingCorpus");
    
double recall=p.getRecall(*it,classifyResults,"TestingCorpus");
    
double F=p.getFscore(*it,classifyResults,"TestingCorpus");
    vector
<double>temp;
    temp.push_back(precision);
    temp.push_back(recall);
    temp.push_back(F);
    evaluation[
*it]=temp;
    temp.clear();
}
for(map<string,vector<double> >::iterator it=evaluation.begin();it!=evaluation.end();it++)
{
    cout
<<it->first<<endl;
    cout
<<"precison"<<(it->second)[0]<<endl;
    cout
<<"recall"<<(it->second)[1]<<endl;
    cout
<<"Fscore"<<(it->second)[2]<<endl;
    cout
<<"*************************"<<endl;
}
double avaP=0.;//平均准确率
double avaR=0.;//平均召回率
double avaF=0.;//平均F值

for(map<string,vector<double> >::iterator  it=evaluation.begin();it!=evaluation.end();it++)
{
    avaP
+=(it->second)[0];
    avaR
+=(it->second)[1];
    avaF
+=(it->second)[2];
    
}
cout
<<evaluation.size();
avaP
/=evaluation.size();
avaR
/=evaluation.size();
avaF
/=evaluation.size();
cout
<<"平均准确率为"<<avaP<<endl;
cout
<<"平均召回率"<<avaR<<endl;
cout
<<"平均F值"<<avaF<<endl;

实验结果:

 

(二)代码说明:

运行的时候,采用release模式运行,debug模式下运行速度很慢

1.       涉及数据库交互函数:数据库的链接字符串写死在了下列函数中,如果需要改变所链接数据库则在下列函数中修改链接字符串

ExpandedBlockStart.gif涉及数据库交互操作的函数
int ConstructDictionary(DICTIONARY& mymap,FUNCSEG seg,string tablename);
int GetArticleIdinEachClass(vector<string > labels,string tablename,map<string,vector<int> >&articleIdinEachClass );
        vector
<string >GetClassification(string articleIds);//获得该篇文章对应的类别
string GetCategorizationInfoById(int articleId,string tablename);
int  Preprocess::GetManyVSM(int begin,int end,string tablename,DICTIONARY& mymap,DOCMATRIX& testingsetVSM,char*keywordsaddress)

2.       涉及硬盘存取交互函数

 

ExpandedBlockStart.gif涉及硬盘IO交互操作的函数
//保存词袋子到硬盘
        void SaveDictionary(DICTIONARY& mymap,char *address);
        
//从内存中加载词袋子模型
        void LoadDictionary(DICTIONARY& mymap,char *address);
void SaveContingencyTable(CONTINGENCY& contingencyTable,char *address);
        
void LoadContingencyTable(CONTINGENCY& contingencyTable,char *address);
        
void SaveVSM(DOCMATRIX& VSMmatrix,char *dest);
        
void LoadVSM(DOCMATRIX& VSMmatrix,char *dest);
vector
<string> GetFinalKeyWords(char* address);
void ChiSquareFeatureSelection(vector<string > classLabels,DICTIONARY& mymap,CONTINGENCY& contingencyTable,int N,char * address);
oid DFcharicteristicWordSelection(DICTIONARY
& mymap,int DFthreshold,char * address);

3.       分词

头文件中定义了一个指向指向类的成员函数的指针,分别指向两种不同的切分模式。其中一种切分模式调用计算所的ICTCLAS;另一种切分模式以空格作为分界符进行分割,对应的函数如下:

 

vector<string>goodWordsinPieceArticle(string rawtext,set<string> stopwords);
vector
<string> mySplit(string s,set<string> stopwords);//分割关键词

(三)资源下载地址(资源作者:finallyliuyu,空间提供方:博客园)

 1.语料库资源 下载地址 注意:语料库为MSSQL2000备份格式,如何还原请大家自己查阅相关资料,网络上有很多这方面的知识也就不赘述了。

2. 程序资源 下载地址   程序包中目前有DF,chi-square特征词选择算法,以及KNN分类算法。如果时间允许,我会继续往程序包中添加 IG,point-wise MI特征词选择算法,以及多项式贝叶斯分类器。另外再次声明我是一个C++新手,编程有很多不规范的地方,希望不要误人子弟。另外,如果有高手愿意指教我会非常高兴。 目前程序是控制台程序,如果有人愿意用MFC编写演示界面,那就最好不过了。呵呵。

相关文章:

Centos7.4 版本环境下安装Mysql5.7操作记录

Centos7.x版本下针对Mysql的安装和使用多少跟之前的Centos6之前版本有所不同的&#xff0c;废话就不多赘述了&#xff0c;下面介绍下在centos7.x环境里安装mysql5.7的几种方法&#xff1a;一、yum方式安装 Centos7.x版本下针对Mysql的安装和使用多少跟之前的Centos6之前版本有所…

叫你一声“孙悟空”,敢答应么?

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;随着自然语言理解等技术的发展&#xff0c;对话机器人如今盛行&#xff0c;而基于此的智能音箱产品的发展也异常火热。很多开发者一般热衷于在一些对话机器人平台上开发相应的语音技能&#xff0c;但也有不…

【linux】Matchbox(一):启动脚本

脚本执行顺序 启动X服务器 /etc/rc5.d/S01xserver-nodm --> …/init.d/xserver-nodm–> 对应进程&#xff1a; /bin/sh /etc/rc5.d/S01xserver-nodm start background xinit /etc/X11/Xsession–> 对应进程&#xff1a; xinit /etc/X11/Xsession – /usr/bin/Xorg …

java试用(1)hello world

设置环境变量path H:\soft\j2sdk1.4.2_17\bin;H:\soft\eclipse;%path%set CLASSPATH.;H:\soft\j2sdk1.4.2_17\jre\lib;JAVA_HOME: D:\jdk1.5.0PATH: D:\jdk1.5.0\bin;编写程序 Noname1.java (注意&#xff1a;文件名要和class名一样)class Noname1 { public static void…

GAN性能不稳?这九大技术可“镇住”四类缺陷

作者 | Bharath Raj译者 | ang010ela编辑 | 一一出品 | AI科技大本营尽管 GAN 领域的进步令人印象深刻&#xff0c;但其在应用过程中仍然存在一些困难。本文梳理了 GAN 在应用过程中存在的一些难题&#xff0c;并提出了最新的解决方法。使用 GAN 的缺陷众所周知&#xff0c;GAN…

java正则表达式获取指定两个字符串之间内容

xml解析利用正则表达式获取指定两个字符串之间内容 在遇到解析复杂xml的时候&#xff0c;想到大家所想到的都是利用dom4j作为首发工具&#xff0c;但是当遇到层次很多&#xff0c;较为复杂&#xff0c;我们难道还需要从根节点一层一层的解析下去吗&#xff1f;此时不仅代码繁琐…

【linux】Matchbox(二):基本概念

X server X server是Linux系统里面图形接口服务器的简称。Windows系统的界面是这个系统不可分割的一部分&#xff0c;各种窗口操作界面显示都是由系统核心直接管理的&#xff0c;而Linux的图形界面并不是系统的必要组成部分&#xff0c;它可以在无界面的条件下运行。当需要Lin…

Android 控件之ImageSwitcher图片切换器

ImageSwitcher是Android中控制图片展示效果的一个控件&#xff0c;如&#xff1a;幻灯片效果...&#xff0c;颇有感觉啊。做相册一绝 源码下载 一、重要方法 setImageURI(Uri uri)&#xff1a;设置图片地址 setImageResource(int resid)&#xff1a;设置图片资源库 setImageDra…

【Qt】Qt5.x移植后的环境配置(imx6)

1、环境配置脚本如下 #!/bin/shexport QTDIR=/usr/lib/qt5 export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins export QT_QPA_PLATFORM=eglfs:fb=/dev/fb0 export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1 export QT_QPAFONTDIR=/usr/lib/fonts export QML2_IM…

程序员如何避免“滴滴式裁员”悲剧?

作者 | 徐麟转载自数据森麟&#xff08;ID:shujusenlin&#xff09;滴滴于2月15日正式发表裁员公告&#xff0c;想必很多互联网人的朋友圈都已经被这条消息刷屏了&#xff0c;其中最常见的莫过于下面这张图了&#xff1a;此图一出&#xff0c;广大互联网吃瓜群众不禁后背发凉&a…

windows服务搭建及命令总结

1、图解FTP服务器搭建(Windows Server 2008) https://wenku.baidu.com/view/803bdc1759eef8c75fbfb361.html?fromsearch https://www.cnblogs.com/john2017/p/6269671.html 2、WindowsServer2008下搭建ApachePHPMySQL https://wenku.baidu.com/view/2e82b99ea1116c175f0e7cd18…

Linux下的CST和UTC时间的区别

在linux中&#xff0c;用date查看时间的时候显示&#xff1a;2008年 12月 17日 星期三 09:04:14 CSTCST China Standard Time UTC8:00 中国沿海时间(北京时间)世界协调时间(Universal Time Coordinated,UTC)GPS 系统中有两种时间区分&#xff0c;一为UTC&#xff0c;另一为LT&a…

Python之父重回决策层,未来如何发展?

作者 | 豌豆花下猫来源 | Python猫&#xff08;ID&#xff1a;python_cat&#xff09;春节假期结束了&#xff0c;大家陆续地重回到原来的生活轨道上。假期是一个很好的休息与调节的机会&#xff0c;同时&#xff0c;春节还有辞旧迎新的本意&#xff0c;它是新的轮回的开端。在…

【Android】adb命令总结

1、adb version 显示ADB工具版本 2、adb devices 查询设备&#xff0c;显示设备序列号 3、adb sideload < file_location> 通过USB进行ROM刷机 4、adb install < apk文件路径> 安装APK 5、adb uninstall <软件名> 卸载软件 6、adb push <本地路径>…

MySQL中char与varchar的区别

字符与字节的区别 一个字符由于所使用的字符集的不同&#xff0c;会并存储在一个或多个字节中&#xff0c;所以一个字符占用多少个字节取决于所使用的字符集注意&#xff1a;char与varchar后面接的数据大小为存储的字符数&#xff0c;而不是字节数&#xff08;其实是5.0版本以上…

怎样在Red Hat Enterprise Linux 5.4版本上安装GCC?

注意&#xff1a;如果打算使用GUI的方式安装&#xff0c;需要导入GPG-Key(否则在使用GUI时会出现public key for *.rpm is not installed) 请切换到安装光盘目录下&#xff1a; cd /media 可以看到 RHEL* 的目录&#xff0c;然后切换到这个目录中&#xff1a; cd RHEL* 你需要运…

【C++】mingw32-make+cmake:error: ‘nullptr‘ was not declared in this scope解决方法

###问题 使用cmake成功&#xff08;Configuring done Generating done&#xff09;后&#xff0c;在cmd终端中执行 mingw32-make报错&#xff1a; error: nullptr was not declared in this scope###原因 nullptr是在c11的新内容。编译时&#xff0c;没有添加对C11的支持。 解…

喜得爱女,吴恩达深情撰文:欢迎你来到新世界!

整理 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;一个月前&#xff0c;吴恩达冷不丁在Twitter放出了重磅消息&#xff1a; “我们的最新‘成果’ Baby Ng 即将诞生&#xff01;2019 年 2 月见面&#xff01;”果然&#xff0c;昨日吴恩达公开了首个小公主降…

FastJson 简单使用

对象、List转JsonUser user new User(); /*JSON 序列化&#xff0c;默认序列化出的JSON字符串中键值对是使用双引号&#xff0c;如果需要单引号的JSON字符串&#xff0c; [eg:String jsonString JSON.toJSONString(map, SerializerFeature.UseSingleQuotes);] *fastjson序…

【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除

根据新浪报道&#xff0c;据新华社10月14日电 利用当网管的机会&#xff0c;破解密码&#xff0c;非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露&#xff0c;当地某公司员工程尚军因涉嫌破坏计算机信息系统罪&#xff0c;已于10月初被依…

开源,还能走多远?

【编者按】在各大厂纷纷拥抱开源的当口&#xff0c;“开源代码面临可持续发展危机”的言论也甚嚣尘上。早期&#xff0c;技术爱好者们“用爱发电”&#xff0c;“他们知道在出问题前&#xff0c;没人会注意到他们&#xff0c;没人会重视他们”。但遗憾的是&#xff0c;很长一段…

使用axis开发web service服务端

一、axis环境搭建 1.安装环境 JDK、Tomcat或Resin、eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4 下载Axis的jar包 3.将Axis的jar包放入WEB-INF/lib目录下 二、编写web service服务端 1.编写服务 package com.webservice;public class HelloWebservice {…

【Qt】qt打印文件名、函数名、行号

#include <QDebug> #define MyDebug qDebug()<<"[FILE:"<<__FILE__<<",LINE"<<__LINE__<<",FUNC"<<__FUNCTION__<<"]

【Qt】Qt项目常用代码总结

路径 获取当前路径 #include <QCoreApplication> QString appDirPath QCoreApplication::applicationDirPath(); 转换成对应系统路径 返回路径名&#xff0c;使分隔符转换为适合底层操作系统的分隔符。 windows下为“\”; linux下为“/” #include <QDir> a…

滴滴裁员补偿丰厚,员工称裁出幸福感?

整理 | 一一出品 | AI科技大本营&#xff08;rgznai100&#xff09;滴滴裁员的“靴子”正在逐步落地。据《财经》报道&#xff0c;滴滴近日已给出裁员的具体赔偿方案&#xff1a;补偿一般为 N1 个月&#xff0c;如果本周能确认&#xff0c;再额外给一个月补偿——这一个月补偿是…

shell编程基础

1. 程序的执行风格 程序编程风格&#xff1a;过去式&#xff1a;以指令为中心&#xff0c;数据服务于指令。对象式&#xff1a;以数据为中心&#xff0c;指令服务于数据。过程式编程有以下特点&#xff1a;1&#xff09; 顺序执行&#xff1a;指程序在执行的过程中&#xff0c;…

【Qt】QImage使用总结

图像格式转换 由 RGB 格式转换成 BGR 格式 QImage::rgbSwapped() 返回一个QImage,其中所有像素的红色和蓝色组件的值被交换,有效地将RGB图像转换为BGR图像。 QImage image(fileName); QImage bgr = image.rgbSwapped();将彩色图转换成 灰度图 使用QImage::convertToForma…

访问量最高超7百万的Stack Overflow问题竟然是...

整理 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;Stack Overflow&#xff0c;一个面向开发者的 IT 技术问答网站&#xff0c;很多程序员都会在上面提问&#xff0c;浏览问题&#xff0c;查找技术知识。在 Top Question 页面&#xff0c;我…

CentOS 6.9下配置安装KVM

注意&#xff1a;KVM一切安装和运行都是在root用户下完成的&#xff0c;并且只有root才能支持某些软件。 一、准备工作&#xff1a; 1、查看系统版本、内核版本 ##查看系统版本 # cat /etc/redhat-release CentOS release 6.4 (Final) ##查看内核版本 # uname -a Linux KVM 2.6…

感觉要大病一场了

呵呵&#xff0c;这两天很累&#xff0c;再加上天气的原因&#xff0c;整个人晕乎乎的&#xff0c;其实很累&#xff0c;可就是睡不着&#xff0c; 其实我不知道是身体的累&#xff0c;还是心累了&#xff0c;总之&#xff0c;整个人就是提不起做事的激情来一个人就这样浑浑噩噩…