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

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

?? decoder.cpp

?? 解碼器是基于短語的統計機器翻譯系統的核心模塊
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/** Decoder.cpp  -  Decoder class definition** Copyright (C) 2006 by Zhongjun He <zjhe@ict.ac.cn>                         Yajuan Lv <lvyajuan@ict.ac.cn>Multilingual Interaction Technology and Evaluation Laboratory, ICT, CAS* Begin       : 04/13/2006* Last Change : 04/13/2006** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*/#include "Decoder.h"/************************************************************************/
/* construction function                                                */
/************************************************************************/Decoder::Decoder(){
	BP_TABLE_LIMIT = 10;

	MAX_DISTORTION = 5;

	HP_STACK_SIZE = 100;

	NBEST_LIST = 200;

	IS_PRINT_NBEST = 0;

	INFO = 0;

	resultfile = "result.txt";

	nbestfile = "nbest.xml";
}
/************************************************************************/
/* Read Configure file                                                  */
/************************************************************************/void Decoder::ReadConfigure(const char *conf)
{
	ifstream in(conf);
	if (!in)
	{
		cerr<<"open file error in Decode::Initialize()"<<endl;
		exit(1);
	}

	string line;
	while (getline(in,line))
	{
		string f1,f2;
		istrstream buffer(line.c_str());
		buffer >> f1;
		buffer >> f2;
    	
		if (f1 == "[ttable-limit]")//bp limit
			BP_TABLE_LIMIT = atoi(f2.c_str());

		if (f1 == "[stack]")//stack limit
			HP_STACK_SIZE = atoi(f2.c_str());

		if (f1 == "[nbest-list]")//Nbest size
			NBEST_LIST = atoi(f2.c_str());

		if (f1 == "[distortion]") //distortion limit: 0 for monotone search
			MAX_DISTORTION = atoi(f2.c_str());

		if (f1 == "[ttable-file]")
			bpfile = f2;  //bilingual phrase   

		if (f1 == "[lm-file]") 
			lmfile = f2;  //language model

		if(f1 == "[lm-ngram]")
			lmngram = atoi(f2.c_str());

		if (f1 == "[para]") //weight
		{
			string feat,value;
			while (getline(in,line))
			{
				istrstream b(line.c_str());
				b >> feat >> value;

				if(feat=="[end]")
					break;

				double v = atof(value.c_str());
				lambda.push_back(v);
			}
		}
		
		if (f1 == "[print-info]")
            INFO = atoi(f2.c_str());

		if (f1 == "[print-nbest]")
			IS_PRINT_NBEST = atoi(f2.c_str());

	}

}

/************************************************************************/
/* Set arguments                                                        */
/************************************************************************/
void Decoder::SetArg(int bplimit, int dis, int stack, int nbestlist, int print_nbest, int print_info,
					 const string &tf, const string &rf, const string &nf)
{
	if (bplimit > 0)
	   BP_TABLE_LIMIT = bplimit; 
	if (dis > -1)
	   MAX_DISTORTION = dis;
	if (stack > 0)
	   HP_STACK_SIZE = stack;
	if (nbestlist > 0)
	   NBEST_LIST = nbestlist;
	if (print_nbest != -1)
	   IS_PRINT_NBEST = print_nbest;
    if (print_info != -1)
	   INFO = print_info;
    if (tf.size() > 0)
	   testfile = tf;
    if (rf.size() > 0)
	   resultfile = rf;
    if (nf.size() > 0)
 	   nbestfile = nf;
	
}
/************************************************************************/
/* initialize                                                           */
/************************************************************************/
void Decoder::Initialize()
{
	//initialize Language Model
	lm.init(lmfile.c_str(),lmngram);

	//read BP table
	bptable.Set(lambda,BP_TABLE_LIMIT);
	bptable.ReadFromFile(bpfile.c_str());

	if(INFO)
	{
		logs.open("search_info.xml");
		logs<<"<?xml version=\"1.0\" encoding=\"gbk\" ?> "<<endl;
		logs<<"<translog>"<<endl;
	}
}
/************************************************************************/
/* ~Decoder                                                             */
/************************************************************************/
Decoder::~Decoder()
{
	if (INFO)
	{
		logs<<"</translog>"<<endl;
	}
}
/************************************************************************/
/* Translate File                                                       */
/************************************************************************/
void Decoder::TranslateFile()
{
	vector<string> sents;

	ReadChinese(testfile.c_str(),sents);

	ofstream nbest;
	if(IS_PRINT_NBEST)
	{
		nbest.open(nbestfile.c_str());
		nbest<<"<?xml version=\"1.0\" encoding=\"GB2312\"?>"<<endl;
		nbest<<"<text>"<<endl;
	}

	string temp_rslt("temp.rslt");
	ofstream temp(temp_rslt.c_str());
	int i;
	for (i=0; i<sents.size(); i++)
	{
		cout << "No. " << i+1 << endl;
		cout << sents[i] << endl;

		vector<CandTrans> candidate = TranslateSent(sents[i]);
		
		vector<CandTrans>::iterator it = max_element(candidate.begin(),candidate.end());

		TrueCase((*it).english);
		temp << (*it).english << endl;
		cout << (*it).english << endl<<endl;

		if(IS_PRINT_NBEST)
		{
			sort(candidate.begin(),candidate.end(),greater<CandTrans>());

			nbest << "<sent No=\"" << i+1 << "\" nbest=\"" << candidate.size() <<"\">" << endl;
			nbest << "<chinese>" << sents[i] << "</chinese>" << endl;
			for (int j=0; j<candidate.size(); j++)
			{
				nbest << "<candidate No=\"" << j+1 << "\">" << endl;
				TrueCase(candidate[j].english);
				candidate[j].Show(nbest, 0);
				nbest << "</candidate>" << endl;
			}
			nbest << "</sent>" << endl;
		}
	}

	if (IS_PRINT_NBEST)
	{
		nbest<<"</text>"<<endl;
	}

	ChangeFormatTo863(testfile.c_str(), temp_rslt.c_str(), resultfile.c_str());

	temp.close();
	unlink(temp_rslt.c_str());
}
/************************************************************************/
/* Translate a sentence                                                 */
/************************************************************************/
vector<CandTrans> Decoder::TranslateSent(const string &chinese)
{
	SentPair sp(chinese);

	if (INFO)
	{
		logs<<"<srcsent>";
		copy(sp.ChineseWord.begin(),sp.ChineseWord.end(),ostream_iterator<string>(logs," "));
		logs<<"</srcsent>"<<endl;
	}

	//step1: search translation options for chinese sentence
	int i=0, j=0; 
	for (i=0; i<sp.ChineseWord.size(); i++)
	{
		for (j=i; j<sp.ChineseWord.size(); j++)
		{
			if ( (j-i) > PHRASE_LEN )
				break;

			vector<string> phrase;
			for(int k=i; k<=j; k++)
				phrase.push_back(sp.ChineseWord[k]);

			TransMap transoption;
			SearchPhrase(phrase, transoption);
			
			if (transoption.size() > 0)
			{
				pair<int,int> pp=make_pair(i,j);
				sp.transoption[pp] = transoption;
			}
		}
	}
	if (INFO)
	{
		sp.ShowTransOption(logs);
	}

	//step2: compute future cost
	ComputeFutureCost(sp.ChineseWord.size(),sp.transoption,sp.FutureCost);
	if(INFO)
	{
		sp.ShowFutureCost(logs);
	}

	//step3: beam search
	vector<vector<Hypotheses> > HpStack;
	BeamSearch(sp.ChineseWord.size(), sp.transoption, HpStack, sp.FutureCost);

   //step4: generate Nbest_list
	if (NBEST_LIST == 1)
		Generate1best(HpStack,sp.CandidateTranslation);
	else if(NBEST_LIST > 1)
	    GenerateNbest(HpStack,sp.CandidateTranslation);

    return sp.CandidateTranslation;

}

/************************************************************************/
/* Search possible translations for a Chinese phrase                    */
/************************************************************************/
void Decoder::SearchPhrase(const vector<string> &phrase, TransMap &transoption)
{
	string s;
	int i = 0;
	bool istrans = false;

	for(i=0; i<(int)phrase.size(); i++)//Chinese phrase (without blank between words)
	{
		s += phrase[i];
	}
        
        if(phrase.size()==1)//if is English or not
	{
		bool ishan=false;
		for(i=0; i<s.size()-1; i++)
		{
			unsigned int c1=s[i];
			if(c1&0x80)
			{
				ishan=true;
				break;
			}
		}
		if(!ishan)
		{
		  vector<double> smooth;
		  double p = bptable.prob_num * log(PROB_SMOOTH);
		  smooth.push_back(p);
		  for (i=1; i<bptable.prob_num+1; i++)
		  {
			smooth.push_back(log(PROB_SMOOTH));
		  }
		  smooth.push_back(1.0);// word length
		  transoption[s] = smooth;
		  return;
		}
	}
	
	istrans = bptable.GetTranslations(s,transoption);

        
	if(!istrans && phrase.size() == 1)//Chinese word
	{
		vector<double> smooth;
		double p = bptable.prob_num * log(PROB_SMOOTH);
		smooth.push_back(p);
		for (i=1; i<bptable.prob_num+1; i++)
		{
			smooth.push_back(log(PROB_SMOOTH));
		}
		smooth.push_back(1.0);// word length
		transoption[s] = smooth;		  
	}
	
	
}

/************************************************************************/
/* Compute Future Cost                                                  */
/************************************************************************/
void Decoder::ComputeFutureCost(int WordLen, const map<pair<int,int>, TransMap> &TransOption, 
								map<pair<int,int> ,double> &FutureCost)
{
	map<pair<int,int>, TransMap>::const_iterator it;

	int i,j,len;

	//initialization
	for (i = 0; i < WordLen; i++)
		for (j = i; j < WordLen; j++)
		{
			pair<int,int> pp = make_pair(i,j);
			FutureCost[pp] = INT_MIN;
		}

	for (it=TransOption.begin(); it!=TransOption.end(); it++)
	{
		TransMap::const_iterator it2;
		double MaxP = INT_MIN;  

		for (it2=(*it).second.begin(); it2!=(*it).second.end(); it2++)
		{
			double TransProb = 0.0;
			double lmprob = lm.getLMProb("", (*it2).first, lmngram); //Language Model

			for (i=1; i < bptable.prob_num + 2 ; i++) //translation probability and length
			{
				TransProb += (*it2).second[i] * lambda[i-1];  
			}

			TransProb += lmprob * lambda[bptable.prob_num+1]; //Language Model

			if (TransProb > MaxP)
				 MaxP = TransProb;
		}

		FutureCost[(*it).first]  = MaxP;
	}
	
	for (len = 1; len < WordLen ; len ++)
	{
		for (i = 0; i < WordLen - len ; i++)
		{
			double MaxP = INT_MIN;
			pair<int,int> pp1,pp2;
			for ( j = i; j < i + len; j++)
			{			
				pp1 = make_pair(i,j);
				pp2 = make_pair(j+1,i + len);
			           
				double TransProb = FutureCost[pp1] + FutureCost[pp2];
				if(TransProb > MaxP)
					MaxP = TransProb;
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女屁股眼交3| 欧美日韩一区二区三区不卡| 国产一区二区伦理| caoporn国产一区二区| 99视频精品在线| 亚洲欧洲性图库| 日产精品久久久久久久性色| 极品美女销魂一区二区三区免费| 国产91精品入口| 欧美乱熟臀69xxxxxx| 久久久久久久久久久黄色 | 欧美性感一类影片在线播放| 日韩欧美一级精品久久| 国产精品久久久久久久久快鸭 | 精品国产一区二区三区不卡| 一区二区三区产品免费精品久久75| 免费久久精品视频| 91福利在线导航| 国产精品午夜春色av| 久久国产精品99久久人人澡| 777精品伊人久久久久大香线蕉| 亚洲欧洲99久久| 欧美二区在线观看| 国产suv一区二区三区88区| 亚洲日本一区二区三区| 国产91精品在线观看| 亚洲激情五月婷婷| 91美女片黄在线| 国产精品美女久久久久aⅴ| 91视频国产观看| 久久精品国产秦先生| 亚洲丝袜自拍清纯另类| 制服丝袜亚洲网站| 成人黄色国产精品网站大全在线免费观看| 日韩你懂的在线观看| 91亚洲精品乱码久久久久久蜜桃 | 色乱码一区二区三区88| 麻豆成人av在线| 日韩精品一区二区三区在线播放| 粉嫩绯色av一区二区在线观看 | 亚洲人成影院在线观看| 欧美一区二区三区四区五区 | 亚洲电影欧美电影有声小说| 91丨porny丨在线| 蜜桃视频免费观看一区| 亚洲色欲色欲www在线观看| 亚洲精品一区二区三区99 | 欧美日韩五月天| 成人福利在线看| 国内精品国产成人| 精品国精品自拍自在线| 在线观看精品一区| 奇米777欧美一区二区| 亚洲天堂中文字幕| 久久蜜桃av一区二区天堂| 4438成人网| 欧美日韩一本到| 91麻豆文化传媒在线观看| 国产精品亚洲一区二区三区妖精 | 国产成人精品三级麻豆| 亚洲国产高清不卡| 不卡一卡二卡三乱码免费网站| 日本不卡高清视频| 日韩精品一二三| 国产婷婷色一区二区三区在线| www..com久久爱| 成人爽a毛片一区二区免费| 亚洲品质自拍视频| 国产精品三级电影| 日本一区二区三区在线不卡| 色综合久久久久综合99| 午夜精品aaa| 国产精品私人影院| 精品动漫一区二区三区在线观看| 欧美区在线观看| 成人免费毛片a| 国产成人亚洲综合a∨婷婷| 精品一区二区三区免费毛片爱| 蜜臀精品一区二区三区在线观看 | 色综合色狠狠综合色| www.亚洲在线| 一本一本久久a久久精品综合麻豆| 不卡的av电影在线观看| 成人app在线观看| 91在线观看地址| 在线观看三级视频欧美| 欧美性猛交xxxxxxxx| 在线成人午夜影院| 欧美一级理论片| 一本久久a久久免费精品不卡| 91美女精品福利| 欧美午夜片在线看| 在线播放91灌醉迷j高跟美女| 6080yy午夜一二三区久久| 制服.丝袜.亚洲.中文.综合| 欧美岛国在线观看| 精品国产成人在线影院| 日本一区二区三区电影| 亚洲四区在线观看| 日韩专区在线视频| 国产自产高清不卡| 99久久精品一区| 成人免费毛片嘿嘿连载视频| 99精品欧美一区二区三区小说| 色婷婷国产精品久久包臀| 欧美日韩1234| 国产亚洲一区二区在线观看| 国产精品狼人久久影院观看方式| 亚洲欧美一区二区三区国产精品| 亚洲与欧洲av电影| 成人欧美一区二区三区小说| 亚洲国产日日夜夜| 亚洲激情图片qvod| 日本不卡在线视频| 不卡的av电影在线观看| 欧美高清视频不卡网| 久久奇米777| 亚洲午夜久久久久久久久电影网| 精品一区二区三区av| 99久久er热在这里只有精品15| 91精选在线观看| 国产精品美女视频| 日韩中文字幕区一区有砖一区 | 欧美一级久久久久久久大片| 亚洲国产精品ⅴa在线观看| 亚洲国产你懂的| 国产精品18久久久久| 欧美日韩国产片| 中文字幕一区二区三区四区不卡| 日本网站在线观看一区二区三区| proumb性欧美在线观看| 2021国产精品久久精品| 精品99999| 亚洲第一二三四区| jiyouzz国产精品久久| 精品国产一区二区亚洲人成毛片 | 日韩电影一区二区三区四区| 成人福利电影精品一区二区在线观看| 欧美电影影音先锋| 亚洲卡通欧美制服中文| 国产99久久久国产精品免费看 | 国产成人精品aa毛片| 欧美一区二区在线免费观看| 亚洲婷婷在线视频| eeuss鲁一区二区三区| 26uuu精品一区二区| 三级一区在线视频先锋 | 日韩一二在线观看| 亚洲午夜电影在线观看| 99在线热播精品免费| 亚洲国产精品黑人久久久| 紧缚捆绑精品一区二区| 666欧美在线视频| 天天影视涩香欲综合网 | 日韩视频一区二区| 亚洲国产美女搞黄色| 色猫猫国产区一区二在线视频| 中文字幕 久热精品 视频在线| 国产真实乱对白精彩久久| 555www色欧美视频| 日韩福利电影在线| 欧美片网站yy| 日韩国产精品久久久久久亚洲| 欧美午夜宅男影院| 一区二区三区国产精品| 91一区一区三区| 亚洲男同性视频| 欧美性色综合网| 日韩国产精品91| 91精品国产色综合久久| 日产精品久久久久久久性色| 91精品国产91久久久久久最新毛片| 亚洲gay无套男同| 69堂精品视频| 看国产成人h片视频| 欧美成人一区二区三区片免费| 中文字幕国产一区| 成人一区二区三区在线观看| 欧美国产激情一区二区三区蜜月| 福利一区二区在线| 最好看的中文字幕久久| 日本乱码高清不卡字幕| 亚洲国产精品一区二区久久恐怖片| 欧美日韩在线精品一区二区三区激情| 亚洲国产美女搞黄色| 91精品国产综合久久久久久漫画| 日韩av电影天堂| 精品国产露脸精彩对白| 成人福利电影精品一区二区在线观看| 亚洲欧美国产高清| 91精品国产乱码久久蜜臀| 韩国成人福利片在线播放| 欧美精彩视频一区二区三区| 色综合久久久久| 免费成人在线观看| 亚洲国产精品成人综合色在线婷婷| 色综合 综合色| 美女脱光内衣内裤视频久久影院| 久久久久久久久久美女| 91在线小视频|