亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eigenvectorselect.cpp

?? 貝葉斯公式
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************
*  工程: 	自然語言處理綜合系統
*  作者:	李赟(liyun@nlu.caai.cn)
*  修改者	李衛
*  描述:	特征抽取的部分實現    
*  主要函數:IDFEigentVector 、FindClassNames 、CHIEigentVector
			G_UpdateKeyWords、G_UpdateIDVector、G_UpdateDocs
			G_LoadKeyWords 等
*  版本:	1.0
*  修改:	遍歷文件夾下所有目錄內文件
*  參考文獻:
**************************************************************/

#include "EigenVectorSelect.h"
//-----------------------------------------------------------//
//   功能:	單個類別DF特征抽取并以詞的形式保存特征文件
//   參數:     
//  (入口)const string &classname,類別名稱
//			unsigned int kwdnum	該類別需要抽取的的特征數
//			const string& vecfiledir  類別文件存放路徑
//			文件輸入vecfiledir+"\\"+classname+".vec"
//  (出口) map<string,unsigned int> &allwords,
//			 用于編號的總詞表,執行該函數時更新
//			 文件輸出vecfiledir+"\\df\\"+classname+".vei"	   
//    返回: 正常true 錯誤false    
//   主要思路:DF特征抽取
//   調用方法:全局函數
//   日期:	2006年3月
//----------------------------------------------------------//
bool IDFEigentVector(const string &classname,map<string,unsigned int> &allwords,unsigned int kwdnum,const string& vecfiledir){
	//一個用于排序的map表 key為Doc數 value為Doc為key的特征列表
	map<unsigned int,vector<string>,greater<unsigned int> > wordmap;
	//特征抽取前的特征列表	格式為:詞:篇章數
	string ifilename = vecfiledir+"\\"+classname+".vec";
	//特征抽取后的詞表	格式為:詞:篇章數
	string ofilename = vecfiledir+"\\df\\"+classname+".vei";
	ifstream fin(ifilename.c_str());
	ofstream fout(ofilename.c_str());
	if(!fin || !fout){
		cout<<"vec/eivfile can not open "<<endl;
		return false;
	}
	pair<unsigned int,string> wordpair;
	unsigned int count =0;
	unsigned int totaldocnum;
	fin>>totaldocnum;
	//更新wordmap用于排序
	while(fin>>wordpair.second>>wordpair.first){
		count++;
		map<unsigned int,vector<string>,greater<unsigned int> > ::iterator itmv =
			wordmap.find(wordpair.first);
		if(itmv==wordmap.end()){
			pair<unsigned int,vector<string> > tmpwordpair;
			tmpwordpair.first = wordpair.first;
			tmpwordpair.second.push_back(wordpair.second);
			wordmap.insert(tmpwordpair);
		}else{
			itmv->second.push_back(wordpair.second);
		}
	}
	fin.close();
	if(totaldocnum==0 || count ==0){
// 		cout<<"Error! totaldocnum ="<<totaldocnum<<",wordcount ="<<count<<endl;
		return false;
	}else{
// 		cout<<count<<"words in. wordlist.size() = "<<wordmap.size()<<endl;
	}
	int kwdnum_count =kwdnum;
	//輸出總Doc數
	fout<<totaldocnum<<endl;
	//抽取DF靠前的kwdnum_count個特征詞并輸出
	for(map<unsigned int,vector<string>,greater<unsigned int> >::const_iterator 
		itc=wordmap.begin();itc!=wordmap.end();itc++){
		//cout<<itc->first<<" ";
		for(vector<string>::const_iterator itcvs =itc->second.begin();itcvs!=itc->second.end();itcvs++)
		if(kwdnum_count-- >0){
//				fout<<itc->second<<" "<<itc->first/totaldocnum<<endl;
			//cout<<*itcvs<<" ";
			//更新用于生成序號的特征列表
			allwords.insert(pair<string,unsigned int>(*itcvs,0));
			//
			fout<<*itcvs<<" "<<itc->first<<endl;		
		}
		//cout<<endl;
	}
	fout.close();
	return true;
}


//-----------------------------------------------------------//
//   功能:	尋找某目錄包含的訓練類別名稱
//   參數:     
//  (入口)const string& vecfiledir	類別文件路徑
//			const string& extstr		擴展名
//			文件輸入vecfiledir目錄下的*.extstr,(文件名)
//  (出口) set<string>& namevec 返回類別名稱
//			 用于編號的總詞表,執行該函數時更新	   
//    返回: 找到的類別數,錯誤返回0  
//   主要思路:所有訓練類別按“類別名稱.特定擴展名”形式存放在在一個目錄下,
//				根據指定文件后綴尋找文件名(不包含擴展名)
//   調用方法: 全局函數
//   日期:	2006年3月
//----------------------------------------------------------//
unsigned short FindClassNames(set<string>& namevec,const string& vecfiledir,const string& extstr){

	string FileNameTmp="";
	unsigned short Filecount =0;
	namevec.clear();
	long hFile;
	string tmpName1=vecfiledir+"\\*."+extstr;
	struct _finddata_t  TrainFile;
	if((hFile = _findfirst(tmpName1.c_str(), &TrainFile )) == -1L){
// 		cout<<"路徑無法訪問!"<<endl;
		return 0;
	}
	do
	{
		FileNameTmp=TrainFile.name;
		if(FileNameTmp=="." || FileNameTmp=="..")	continue;
		int findpoint;
		if((findpoint = FileNameTmp.rfind("."))<=0 
			||FileNameTmp.substr(findpoint,FileNameTmp.size()-findpoint) !=string(string(".")+extstr)
		){
			continue;
		}
		FileNameTmp = FileNameTmp.substr(0,findpoint);
		namevec.insert(FileNameTmp);
		Filecount++;
// 		printf(">");
	}while(! _findnext( hFile, &TrainFile )  );
	_findclose( hFile );
	return Filecount;
}

//-----------------------------------------------------------//
//   功能:	CHI特征抽取并以詞的形式保存特征文件(針對所有類別)
//   參數:     
//  (入口)const set<string>& namevec,當前類別名稱列表
//			unsigned int kwdnum	該類別需要抽取的的特征數
//			const string& vecfiledir  類別文件存放路徑
//			文件輸入vecfiledir+"\\"+(*itc)+".vec"
//  (出口) map<string,unsigned int> &allwords,
//			 用于編號的總詞表,執行該函數時更新
//			文件輸出vecfiledir+"\\chi\\"+evevector[k].classname+".vei";	
//					vecfiledir + "\\chi\\_all_words.lst";
//					vecfiledir + "\\_all_version.lst";   
//    返回: 正常true 錯誤false    
//   主要思路:CHI特征抽取
//   調用方法:全局函數
//   日期:	2006年3月
//----------------------------------------------------------//
bool CHIEigentVector(const set<string>& namevec,map<string,unsigned int> &allwords,unsigned int kwdnum,const string& vecfiledir){

	unsigned int allclassdocnum =0;
	vector<EVenty> evevector;
	//遍歷所有類別未抽取的特征列表文件,并記錄到vector<EVenty>中
	//每個EVenty對應一個類別。內部以特征的音序升序排列
    for(set<string>::const_iterator itc=namevec.begin();itc!=namevec.end();itc++){
		string ifilename = vecfiledir+"\\"+(*itc)+".vec";
		ifstream fin(ifilename.c_str());
		if(!fin){
			cout<<"vecfile can not open "<<endl;
			continue;
		}
		evevector.push_back(EVenty());
		vector<EVenty>::reverse_iterator iteve = evevector.rbegin();
		iteve->classname = *itc;
		fin>>iteve->totalword;
		allclassdocnum += iteve->totalword;	
		pair<unsigned int,string> wordpairtmp;
		unsigned int count =0;
		while(fin>>wordpairtmp.second>>wordpairtmp.first){
			count++;
			iteve->wordspair.push_back(wordpairtmp);
		}
		cout<<"class:"<<iteve->classname<<"wordnum"<<count;
		fin.close();
	}

	if(evevector.size() <= 1){
		cout<<"not enough classes"<<endl;
		return false;
	}else{
		cout<<"classes num "<<evevector.size()<<"totaldocnum"<<allclassdocnum<<endl;
		//getchar();
	}

	unsigned int count =0;
	string minword ="",minword_old="";
	//根據CHI的要求生成ABCD4個值(chivalue[0-3])并計算chivalue的相關值
	//由于計算牽涉到vector<EVenty>中多個EVenty(多個類別的有序的特征列表),
	//這里采用了最小詞對齊方法,每次從多個EVenty的當前詞中選取一最小的計算
	//下次去掉已經計算過的詞,再重復上面的步驟,直到所有EVenty都處理完
	while(1){

		for(unsigned int i=0;i<evevector.size();i++){
			//該evevector已到結尾
			if(evevector[i].isstop == true) continue;
			//更新chivalue后已計算過的最小特征詞,開始下一輪選最小詞
			if(minword_old ==evevector[i].wordspair[evevector[i].curindex].second) { //count the result
				double chivalue = 
					evevector[i].chivalue[0] * evevector[i].chivalue[4] 
					- evevector[i].chivalue[2] * evevector[i].chivalue[3] ;
				// do sth 
				if(chivalue >0 && evevector[i].chivalue[0] >3){
					//分母
					double chivalue2 = 
						(evevector[i].chivalue[0] + evevector[i].chivalue[2]) 
						*(evevector[i].chivalue[1] + evevector[i].chivalue[3]) 
						*(evevector[i].chivalue[0] + evevector[i].chivalue[1]) 
						*(evevector[i].chivalue[2] + evevector[i].chivalue[3]) ;
					if(chivalue2 == 0) chivalue2 = 1;
					//參見CHI相關公式
					double chivalue3 = allclassdocnum * chivalue * chivalue / chivalue2 ;
					
					chivalue3 *= log((float)evevector[i].chivalue[0]);
					//chivalue3 *= evevector[i].chivalue[0];

					//if(chivalue3 >1e+13)
					//cout<<minword_old<<" "
					//	<<evevector[i].classname<<evevector[i].chivalue[0]<<" "<<
					//	evevector[i].chivalue[1]<<" "<<evevector[i].chivalue[2]<<" "<<evevector[i].chivalue[3]<<" "
					//<<chivalue<<" "<<chivalue2<<" "<<chivalue3<<endl;
					
					//MAP排序表,形式為key權重 value對應的詞列表,按Key從大到小排序
					map<double,vector<string>,greater<double> > ::iterator itmvd =
					evevector[i].wordmap.find(chivalue3);
					if(itmvd==evevector[i].wordmap.end()){
						pair<double,vector<string> > tmpwordpair;
						tmpwordpair.first = chivalue3;
						tmpwordpair.second.push_back(minword_old);
						evevector[i].wordmap.insert(tmpwordpair);
					}else{
						itmvd->second.push_back(minword_old);
					}
				}//end of if(chivalue >0 && evevector[i].chivalue[0] >3)...
				//切換到下一個特征,開始下一輪選最小詞
				if(evevector[i].curindex >=evevector[i].wordspair.size()-1){
					evevector[i].isstop = true;
					continue;
				}else{
					evevector[i].curindex ++;
				}
			}//end of minword_old ==evevector[i].w ....
			//look for min word
			//如果找到更小的最小詞,則更新
			evevector[i].chivalue[0] =evevector[i].chivalue[1] =evevector[i].chivalue[2] =evevector[i].chivalue[3] =0;
			if(minword == "" || minword > evevector[i].wordspair[evevector[i].curindex].second) {
				minword = evevector[i].wordspair[evevector[i].curindex].second;
			}
		}	//end of for

		// no more words of all entrys
		//while1的結束條件,沒有特征需要處理
		if(minword_old == minword){
			cout<<"search end ,total wordnum ="<<count<<endl;
			break;	//break from while 1
		}else{
			//清空最小詞,開始下一輪尋找
			minword_old = minword;
			minword = "";
			count ++;
			//cout<<minword_old<<endl;
			//cout<<">";
		}

		for(unsigned int i2=0;i2<evevector.size();i2++){
			unsigned int docinclass =0;
			if(minword_old == evevector[i2].wordspair[evevector[i2].curindex].second)
				docinclass = evevector[i2].wordspair[evevector[i2].curindex].first;
			for(unsigned int j=0;j<evevector.size();j++){
				evevector[j].chivalue[(i2 ==j)?0:1] += docinclass;
				evevector[j].chivalue[(i2 ==j)?2:3] += (evevector[i2].totalword - docinclass);
			}
		}
	}//end of while 1
	//根據排序輸出文件結果并更新排序編號特征列表
	for(unsigned int k=0;k<evevector.size();k++){
		string ofilename = vecfiledir+"\\chi\\"+evevector[k].classname+".vei";
		ofstream fout(ofilename.c_str());
		if(!fout){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区2区视频在线观看| 亚洲综合色视频| 日韩精品乱码免费| 日韩午夜在线观看| 精品亚洲porn| 国产精品无码永久免费888| aaa国产一区| 亚洲地区一二三色| 欧美精品一区二区蜜臀亚洲| 国产在线不卡视频| 亚洲欧洲成人自拍| 欧美二区三区的天堂| 日本不卡一二三| 国产精品每日更新在线播放网址| 色综合久久久久久久久| 五月激情丁香一区二区三区| 久久综合九色综合欧美就去吻| 成人精品电影在线观看| 亚洲一线二线三线视频| 26uuu欧美| 欧美在线一区二区三区| 韩国欧美一区二区| 亚洲美女少妇撒尿| 精品久久久久av影院| 91免费国产在线观看| 免费视频最近日韩| 中文字幕亚洲电影| 日韩欧美国产麻豆| 在线视频国内自拍亚洲视频| 国模冰冰炮一区二区| 亚洲精选视频在线| 久久久99久久| 久久精品视频在线看| 一本色道久久综合亚洲aⅴ蜜桃 | 精品国产免费视频| 色综合天天综合网国产成人综合天 | 不卡视频一二三四| 免费国产亚洲视频| 一二三区精品视频| 欧美韩国日本不卡| 亚洲精品在线免费播放| 欧美日韩一区视频| 色哟哟在线观看一区二区三区| 国内成+人亚洲+欧美+综合在线| 一二三四区精品视频| 国产精品免费视频一区| 精品国产91亚洲一区二区三区婷婷| 色婷婷av久久久久久久| 99久久亚洲一区二区三区青草| 精品在线播放午夜| 奇米精品一区二区三区在线观看| 亚洲精品你懂的| 日韩毛片视频在线看| 国产女人aaa级久久久级| 精品日韩av一区二区| 91精品福利在线一区二区三区| 91黄色免费版| 在线一区二区三区做爰视频网站| 成人app在线观看| 高清不卡一二三区| 风间由美一区二区三区在线观看 | 99精品视频在线观看| 国产福利精品一区二区| 久久精品99国产精品| 毛片av一区二区三区| 免费成人你懂的| 六月婷婷色综合| 狠狠色丁香久久婷婷综| 国产精品中文字幕一区二区三区| 国产精品一区二区你懂的| 国产精品一区二区视频| 在线视频国产一区| 欧美日韩日日摸| 日韩欧美中文字幕精品| 日韩精品一区在线观看| 精品日韩一区二区三区免费视频| 欧美不卡激情三级在线观看| 精品国产凹凸成av人网站| 国产日韩一级二级三级| 国产精品私房写真福利视频| 亚洲欧美日韩一区二区| 亚洲国产精品久久久久婷婷884| 亚洲v中文字幕| 麻豆一区二区三| 国产不卡视频在线播放| 色一情一伦一子一伦一区| 欧美日韩一区二区欧美激情| 欧美一级欧美一级在线播放| 26uuu精品一区二区在线观看| 久久精品夜色噜噜亚洲a∨ | 国产成人aaaa| 91麻豆视频网站| 91精品婷婷国产综合久久竹菊| 精品国精品自拍自在线| 国产精品毛片久久久久久久| 一区二区三区免费观看| 久久草av在线| 91蝌蚪porny| 日韩精品一区二区在线| 国产精品久久99| 日韩成人av影视| av成人老司机| 欧美videossexotv100| 亚洲区小说区图片区qvod| 精品一区二区三区久久| 日本久久一区二区三区| 日韩精品一区二区三区三区免费 | 欧美日韩久久久久久| 2023国产精品自拍| 亚洲主播在线播放| 成人深夜视频在线观看| 欧美一级生活片| 一区二区三区精品视频在线| 国产一区二区伦理| 在线综合视频播放| 一区二区理论电影在线观看| 国产成人a级片| 日韩女优av电影在线观看| 亚洲在线中文字幕| 成人黄色在线视频| 久久久午夜精品| 另类中文字幕网| 欧美一区二区三区色| 亚洲一区二区精品3399| 99久久久国产精品免费蜜臀| 久久久夜色精品亚洲| 美女精品自拍一二三四| 在线播放国产精品二区一二区四区| 成人欧美一区二区三区白人| 国产精一区二区三区| 亚洲精品一区二区三区精华液| 天使萌一区二区三区免费观看| 色拍拍在线精品视频8848| 亚洲欧洲国产专区| 99re6这里只有精品视频在线观看| 国产欧美日韩麻豆91| 国产成人av影院| 国产欧美精品在线观看| 国产成人亚洲综合a∨猫咪| 久久久精品日韩欧美| 国产成人综合网| 国产欧美日产一区| 波多野结衣视频一区| 日韩美女视频19| 在线欧美日韩国产| 午夜精品视频在线观看| 欧美精品乱人伦久久久久久| 同产精品九九九| 欧美v亚洲v综合ⅴ国产v| 经典三级视频一区| 久久久久国产精品免费免费搜索| 国产福利一区二区三区视频在线 | 欧美在线免费视屏| 午夜视频一区在线观看| 日韩无一区二区| 国产成人免费高清| 日韩理论片在线| 欧美日韩视频不卡| 加勒比av一区二区| 亚洲欧洲三级电影| 欧美猛男超大videosgay| 久久99精品久久久久婷婷| 国产精品天干天干在观线| 色婷婷综合久久久中文字幕| 三级亚洲高清视频| 欧美国产日韩精品免费观看| 欧美午夜片在线看| 久久精品72免费观看| 国产精品国产a| 欧美丝袜丝nylons| 国产成人夜色高潮福利影视| 亚洲一区二区三区美女| 精品成人一区二区三区| 97精品久久久午夜一区二区三区 | 欧美少妇性性性| 韩国三级电影一区二区| 日韩理论片在线| 欧美本精品男人aⅴ天堂| 91丨九色porny丨蝌蚪| 日韩福利电影在线观看| 国产精品成人网| 日韩一区和二区| 色婷婷激情综合| 国产成人在线网站| 午夜精品久久久久久久99樱桃| 国产日韩欧美电影| 欧美一区二区黄色| 色妹子一区二区| 成人美女视频在线看| 日本在线不卡一区| 亚洲激情中文1区| 国产欧美日韩另类一区| 在线播放一区二区三区| 91理论电影在线观看| 国产成人免费视频一区| 久久精品国产在热久久| 午夜精品久久久久久久99水蜜桃| 中文字幕一区视频| 欧美激情在线观看视频免费| 日韩欧美中文字幕精品|