情感分析系统的预处理工作
来源:互联网 发布:淘宝网店名称大全 编辑:程序博客网 时间:2024/05/22 13:55
老板给了个情感分析系统的任务,一开始各种纠结不知道怎么入手。再三拖延后看了篇论文,知道了有个SVMLight的现成系统可以用,但是要把文件处理成它规定的格式,于是就是这篇文章的主要内容了。
主要工作就是将一个文件夹下的源文件转换成单个词存在另一个文件夹下边。最终目标当然是转换成SVMLight要求的格式。这块后边看看特征采集再实现。
主要工作就是将一个文件夹下的源文件转换成单个词存在另一个文件夹下边。最终目标当然是转换成SVMLight要求的格式。这块后边看看特征采集再实现。
整个结构就是将文件夹下边的文件依次读出,经过wordProcess后再经历stopwordList剔除。统计数目存入目标文件夹。都是些stl,网上搜的,没啥技术含量,鼓捣了半天竟然有些成就感,真是太扯淡了。
遇到的新知识有:
1.读取文件夹下的所有文件然后处理。用到了afx.h这个头文件下的CFileFind。记住需要设置project-》settings-》general-》use MFC as a shared DLL。文件名操作各种无力吐槽。
2.fstream多次读取文件时,调用完close还要调用个clear。。。没用上,几下备用吧
ifstream类使用心得一则
为了方便stopwordlist和final处理,停止词和处理文本用map存储。
#include<iostream>#include<fstream>#include<string>#include<map>#include<cctype>#include<afx.h>using namespace std;map<string,int> stoplist;map<string,int> punc;map<string,int> final;string filenames[60000];void FindAllFile(string path,string * filenames,int & count){ CFileFind finder; bool working = finder.FindFile((path+"\\*.*").c_str()); while (working) { working = finder.FindNextFile(); if (finder.IsDots()) continue; if (finder.IsDirectory()) { //FindAllFile(finder.GetFilePath(), filenames, count); } else { string filename = finder.GetFileName(); filenames[count++] = filename; } }}//wordProcess将首字母小写+去掉末尾标点void wordProcess(string &str){ if(!str.empty()) { if(isalpha(str[0])&&isupper(str[0])) str[0]=tolower(str[0]); if(isalpha(str[0])&&!isalpha(str[str.size()-1])) str.erase(str.end()-1); if(!isalpha(str[0])) //遇到中文字符会出错 str.erase(str.begin()); }}void process(){ /*初始化stop词典后续添加positive和negative词典*/ string temp; int count=0; ifstream fin("../stopwordlist.txt",ios::in); while(fin>>temp) stoplist.insert(pair<string,int>(temp,++count)); fin.close();//连续打开文件 fin.clear(ios::goodbit); //*********************************************************************循环读取文件夹下的文件 int i; int fileNum=0; FindAllFile("../source",filenames,fileNum);/***********************处理每一个文件*************************/ for(i=0;i<fileNum;++i) {//source 后边的\\必须加上,理解为文件夹下了下边destination一样 ifstream fin(("../source\\"+(string)filenames[i]).c_str()); ofstream fout(("../destination\\"+(string)filenames[i]).c_str()); string str; final.erase(final.begin(),final.end()); while(fin>>str) { wordProcess(str); if(isdigit(str[0])) continue; if(stoplist.find(str)==stoplist.end()) { if(final.find(str)==stoplist.end()) final.insert(pair<string,int>(str,1)); else final[str]++; } } //将处理过的文件输出,这里可以添加向量转换 for(map<string,int>::iterator iter=final.begin();iter!=final.end();++iter) fout<<(*iter).first<<" "<<(*iter).second<<endl; }}int main(int argc,char * argv[]){ process(); return 0;}
- 情感分析系统的预处理工作
- 情感分析的新方法
- [情感分析的新方法]
- 图片情感分析(1):图像数据预处理
- 预处理器的工作
- C的预处理工作
- 情感分析的词典资源
- 情感分析的学习资源
- 基于情感分析的mapreduce
- 工作三年了的情感发泄
- 基于情感字典的文本情感极性分析
- 干货:完全基于情感词典的文本情感分析
- 情感分析
- 情感分析
- 情感分析
- 情感分析
- 情感分析
- 情感分析
- iOS 7新功能汇总!
- JavaScript学习笔记
- Web开发框架 WebBuilder 开源了!
- 修改rc.local后,出现循环登录问题
- XML学习笔记
- 情感分析系统的预处理工作
- 链表存储二进制,并且把此二进制数加1
- 9.URl全排序
- 0到n-1数组的排序
- one piece_路飞_01
- 1) 获取类型特征typeTraits [原创,泛型编程,自由下载转载,需注明出处]
- 2013-09-24
- ORALCE基于用户管理恢复的处理
- OCP-1Z0-053-V12.02-316题