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

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

?? decoder.cpp

?? 解碼器是基于短語的統計機器翻譯系統的核心模塊
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			pp1 = make_pair(i, i+len);
			if (MaxP>FutureCost[pp1])
			   FutureCost[pp1] = MaxP;
		}
	}
}

/************************************************************************/
/* Beam Search                                                          */
/************************************************************************/
void Decoder::BeamSearch(int WordLen, const map<pair<int,int>,TransMap> &TransOption, 
						vector<vector<Hypotheses> > &HpStack,  map<pair<int,int>,double > &FutureCost)
{
	HpStack.resize(WordLen+1);
	Hypotheses hpinit(WordLen);
	Feature featinit(lambda.size());
	hpinit.feat = featinit;
	HpStack[0].push_back(hpinit);

	int i,j;
	int start,end;

	for (i=0; i<HpStack.size(); i++)
	{
		if (INFO)
		{
			logs << "\n<Stack ID=\"" << i << "\" size=\"" << HpStack[i].size() << "\">" <<endl;
			for (int k=0; k<HpStack[i].size(); k++)
			{
				logs << "\n<ID stack=\"" << i << "\"" << " number=\"" << k << "\">" << endl;
				HpStack[i][k].ShowHP(logs);
				logs << "</ID>" << endl;
			}
			logs << "</Stack>" << endl;
		}

		if (i == HpStack.size()-1)//the last stack don't need to extend
			 break;

		for (j=0; j<HpStack[i].size(); j++)
		{
			//extend a hypothesis in stack i  
			map<pair<int,int>, TransMap>::const_iterator it;  
			for (it = TransOption.begin(); it!= TransOption.end(); it++)
			{
				int i_Distortion_Dist = GetDistortionDistance( HpStack[i][j].CoveredWord,HpStack[i][j].CurBegEnd, (*it).first);
				if (i_Distortion_Dist == -1)  
					continue;

				//extend
				TransMap PhraseTrans = (*it).second;//Translation information for a Chinese phrase
				TransMap::iterator it2 = PhraseTrans.begin();
				for (it2=PhraseTrans.begin(); it2!=PhraseTrans.end(); it2++)
				{
					string LastEng = HpStack[i][j].LastEnglishWord;
					string phrasetrans = (*it2).first;

					vector<double> prob;
					for (int t=1; t<(*it2).second.size(); t++)
						 prob.push_back((*it2).second[t]);

					double lmprob = lm.getLMProb(LastEng,phrasetrans,lmngram);
					prob.push_back(lmprob);//LM model

					prob.push_back(-1 * i_Distortion_Dist); //distortion model

					Feature feat(lambda.size());
					feat.featfunc = prob;

					Hypotheses NewHp(i,j,(*it).first,phrasetrans,feat,HpStack[i][j],lmngram);
					NewHp.GetFutureCost(FutureCost);
					NewHp.ComputeFeature(HpStack[i][j].feat,lambda);

					//push the Hypothesis into stack 
					AddToStack(HpStack[NewHp.CoveredNumber],NewHp);

				}//End PhraseTrans
			}//End TransOption
		}//End HpStack[i]
	}//End HpStack
}


/************************************************************************/
/* Generate Nbest-list                                                  */
/************************************************************************/
void Decoder::GenerateNbest(vector<vector<Hypotheses> > &HpStack, vector<CandTrans> &CandNbest)
{
	int i,j,k;
	vector<AddArc> NbestSearchNode;

	int pos=HpStack.size()-1;
	while (HpStack[pos].size() == 0)   
		pos--;

	for (i=0; i<HpStack[pos].size(); i++)
	{
		string e1 = HpStack[pos][i].CurEnglishTranslation;
		int p1 = HpStack[pos][i].PreStack;
		int p2 = HpStack[pos][i].PreStackNum;
		AddArc a1(p1,p2,HpStack[pos][i].feat,e1);
		insert_to_vec(NbestSearchNode,NBEST_LIST,a1);

		for (j=0; j<HpStack[pos][i].AdditionalArcs.size();j++)
		{
			insert_to_vec(NbestSearchNode, NBEST_LIST, HpStack[pos][i].AdditionalArcs[j]);
		}       
	}

	while (!NbestSearchNode.empty()) 
	{
		AddArc next = popmax_from_vec(NbestSearchNode);

		int p1 = next.PreStack;
		int p2 = next.PreStackNum;

		if(p1 == 0)// head
		{
			CandTrans ct;
			ct.english = next.english;
			ct.feat = next.feat;
			insert_to_vec(CandNbest,NBEST_LIST,ct);
			if(CandNbest.size() == NBEST_LIST)
				break;
		}
		else if( p1> 0 )
		{
			string e1 = HpStack[p1][p2].CurEnglishTranslation +" " + next.english;
			Feature feat =  HpStack[p1][p2].feat;
			feat = feat + next.feat; 
			int pp1 = HpStack[p1][p2].PreStack;
			int pp2 = HpStack[p1][p2].PreStackNum;
			AddArc aa2(pp1,pp2,feat,e1);
			insert_to_vec(NbestSearchNode,NBEST_LIST,aa2);

			int t;
			for(t=0; t<HpStack[p1][p2].AdditionalArcs.size();t++)
			{
				int pa1 = HpStack[p1][p2].AdditionalArcs[t].PreStack;
				int pa2 = HpStack[p1][p2].AdditionalArcs[t].PreStackNum;
				string e2 =  HpStack[p1][p2].AdditionalArcs[t].english + " " + next.english;
				Feature f2 = HpStack[p1][p2].AdditionalArcs[t].feat;
				f2 =f2+ next.feat;
				AddArc aa3(pa1,pa2,f2,e2);
				insert_to_vec(NbestSearchNode,NBEST_LIST,aa3);
			}       
		}
	}

//	sort(CandNbest.begin(),CandNbest.end(),greater<CandTrans>());

	if(INFO)
	{
		logs << "\n<Nbest_list Number = \"" << NBEST_LIST << "\">" << endl;

		for (i=0; i<CandNbest.size(); i++)
		{
			logs << "<Candidate No=\"" << i+1 << "\">" << endl;
			CandNbest[i].Show(logs);
			logs << "</Candidate>" << endl;
		}

		logs << "</Nbest_list>" << endl;
	}

}

/************************************************************************/
/* Generate 1 best                                                      */
/************************************************************************/
void Decoder::Generate1best(vector<vector<Hypotheses> > &HpStack, vector<CandTrans> &CandNbest)
{
	int pos = HpStack.size() - 1;
	while(HpStack[pos].size()==0)
		pos--;

	CandTrans best;

 	int num=0;
	for (int i=0; i<HpStack[pos].size(); i++)
	{
		if(HpStack[pos][i].feat > HpStack[pos][num].feat)
			num = i;
	}

	int PreStack = HpStack[pos][num].PreStack;
	int PreStackNum = HpStack[pos][num].PreStackNum;
	best.english = HpStack[pos][num].CurEnglishTranslation;
    best.feat = HpStack[pos][num].feat;
	while (PreStack > 0)
	{
		int p1 = PreStack;
		int p2 = PreStackNum;
		PreStack = HpStack[p1][p2].PreStack;
		PreStackNum = HpStack[p1][p2].PreStackNum;

		Feature feat = HpStack[p1][p2].feat;
		feat = feat + best.feat;
		best.feat = feat;

		best.english = HpStack[p1][p2].CurEnglishTranslation + " " + best.english;
	}
	CandNbest.push_back(best);
}
/************************************************************************/
/* Push a hypothesis to HpStack                                         */
/************************************************************************/
bool Decoder::AddToStack(vector<Hypotheses> &HpStack, Hypotheses &hp)
{
	int i = 0, pos = 0;
	bool IsRecombine=false;
	for (i=0; i<HpStack.size(); i++)
	{
		if (HpStack[i] < HpStack[pos])
		{
			pos = i;
		}
		if (HpStack[i] == hp)//recombine
		{
			if (HpStack[i] < hp)
			{
				hp.AdditionalArcs = HpStack[i].AdditionalArcs;
				AddArc aarc(HpStack[i]) ;	
			//	hp.AdditionalArcs.push_back(aarc);
				insert_to_vec(hp.AdditionalArcs,HP_STACK_SIZE,aarc);
				HpStack[i] = hp;
			}
			else
			{
				AddArc aarc(hp);
				//HpStack[i].AdditionalArcs.push_back(aarc);
				insert_to_vec(hp.AdditionalArcs,HP_STACK_SIZE,aarc);
			}
			IsRecombine = true;
			break;
		}
	}

	if (i>=HpStack.size())
	{
		if (HpStack.size() == HP_STACK_SIZE)
		 {
		     if(HpStack[pos] < hp)
			HpStack[pos] = hp;
		 }
		else
		    HpStack.push_back(hp);
		IsRecombine = false;
	}

	return IsRecombine;
}

/************************************************************************/
/* Get distortion distance                                              */
/************************************************************************/
int Decoder::GetDistortionDistance(const vector<int> CoveredWord,
								   const pair<int,int> LastPhraseBeginEnd,
								   const pair<int,int> BeginEnd)
{
	int i,distortion_dist,j;
	for (i = BeginEnd.first; i <= BeginEnd.second; i++)
	{
		if (CoveredWord[i] == 1)
			return -1;
	}

	for (i = BeginEnd.first - 1; i>= 0 ; i--)
	{
		if (CoveredWord[i] == 0)
			break;
	}

	for (j = BeginEnd.second +1; j< CoveredWord.size(); j++)
	{
		if (CoveredWord[j] == 0)
			break;
	}

	if (i >= 0)
	{
		if ( j<CoveredWord.size() && (j-i) >= MAX_DISTORTION)
			return -1;

		if (j != CoveredWord.size())  
		{
			while (CoveredWord[i] == 0 && i>= 0)
				 i--;

			if (i > 0)
			{
				while (CoveredWord[i] == 1 && i>= 0)
					 i--;

				if (i >=0)
				{
					if ((BeginEnd.second - i) >= MAX_DISTORTION)
						 return -1;
				}
			}
		}
	}

	distortion_dist = abs(LastPhraseBeginEnd.second + 1 - BeginEnd.first);
	if ( distortion_dist <= MAX_DISTORTION)
		 return distortion_dist;
	else
		 return -1;
}

/************************************************************************/
/* Read Chinese (format 863)                                            */
/************************************************************************/
void Decoder::ReadChinese(const char *filename, vector<string> &sents)
{
	ifstream in(filename);
	if (!in)
	{
		cerr << "open test file error in [Decoder::ReadChinese] " << filename << endl;
		exit(1);
	}

	string line;
	while (getline(in,line))
	{
		if (line.find("<s id") != string::npos)
		{
			int pos = line.find_first_of(">",0);
			line.erase(0,pos+1);

			pos = line.find_last_of("<",line.size()-1);
			line.erase(pos,line.size()-pos);
			sents.push_back(line);
		}
	}
}

/************************************************************************/
/* Change Format                                                        */
/************************************************************************/
void Decoder::ChangeFormatTo863(const char *srcfile, const char *tempfile, const char *resultfile)
{
	ifstream in1(srcfile);
	ifstream in2(tempfile);
    ofstream out(resultfile);

	string line;
	vector<string> srcSent;
	vector<string> tgtSent;

	while (getline(in1, line))
	{
		srcSent.push_back(line);
	}

	while (getline(in2, line))
	{
		tgtSent.push_back(line);
	}

	int pos;
	int count=0;
	int i=0;
	for (i=0; i<srcSent.size(); i++)
	{
		pos = srcSent[i].find("<srcset");
		if (pos != string::npos)
		{
			srcSent[i].replace(0,7,"<tstset");
			out << srcSent[i] << endl;
			continue;
		}

		pos = srcSent[i].find("<doc");
		if (pos != string::npos)
		{
			srcSent[i].erase(srcSent[i].size()-1,1);
			srcSent[i] += " site=\"Camel\">";
			out << srcSent[i] << endl;
			continue;
		}

		pos = srcSent[i].find("<s ");
		if (pos != string::npos)
		{
			int start = srcSent[i].find_first_of(">",0)+1;
			int spp = srcSent[i].find_last_of("<",srcSent[i].size());

			if (count < tgtSent.size())
				srcSent[i].replace(start,spp-start,tgtSent[count++]);
                        out << srcSent[i] << endl;  
			continue;
		}
		if(i != srcSent.size()-1)
		    out << srcSent[i] << endl;
	}
	out << "</tstset>" << endl;

	in1.close();
	in2.close();
	out.close();
}

/************************************************************************/
/* Change the first letter to its upper case                            */
/************************************************************************/
void Decoder::TrueCase(string &s)
{
	if (s[0] >='a' && s[0] <='z')
		s[0] -= 32;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产精品网麻豆系列| 久久综合色之久久综合| 99国产麻豆精品| 国产成人自拍网| 激情五月婷婷综合网| 另类小说一区二区三区| 久久99国产精品久久| 久久精品国内一区二区三区| 日本午夜一区二区| 日本免费在线视频不卡一不卡二| 丝袜美腿亚洲色图| 日韩高清不卡一区二区三区| 日日夜夜免费精品视频| 日本欧美在线观看| 另类小说视频一区二区| 精品系列免费在线观看| 国产一区二区主播在线| 国产a精品视频| eeuss鲁一区二区三区| 一本一道综合狠狠老| 欧美视频一区二区三区四区| 欧美日韩大陆一区二区| 日韩视频免费观看高清完整版| 欧美一卡二卡三卡四卡| 精品国产一区二区三区久久久蜜月| 久久久久久久久久久99999| 国产精品丝袜久久久久久app| 亚洲视频图片小说| 亚洲一区av在线| 精品一区精品二区高清| 成人av在线电影| 欧美优质美女网站| 欧美一级欧美三级在线观看| 精品女同一区二区| 17c精品麻豆一区二区免费| 一区二区三区四区乱视频| 午夜国产精品一区| 国产综合久久久久久鬼色 | 成人看片黄a免费看在线| 99精品视频在线观看免费| 白白色 亚洲乱淫| 91蜜桃传媒精品久久久一区二区| 色狠狠桃花综合| 欧美日韩和欧美的一区二区| 欧美一区二区三区影视| 26uuu久久综合| 中文一区一区三区高中清不卡| 国产精品传媒视频| 亚洲午夜一区二区三区| 久草精品在线观看| 高清在线观看日韩| 欧美伊人精品成人久久综合97| 欧美久久久久久久久中文字幕| www日韩大片| 18欧美亚洲精品| 日韩在线播放一区二区| 亚洲网友自拍偷拍| 日韩成人免费电影| 国产不卡在线播放| 91国偷自产一区二区开放时间| 欧美日韩一区高清| 337p粉嫩大胆色噜噜噜噜亚洲| 国产日产亚洲精品系列| 一区二区三区四区蜜桃| 精品一区精品二区高清| 91麻豆swag| 欧美一级午夜免费电影| 中文字幕精品一区二区三区精品| 一区二区三区精品在线观看| 丝袜亚洲精品中文字幕一区| av一区二区久久| 欧美一区二区免费视频| 国产精品成人免费在线| 蜜臀91精品一区二区三区| 99视频一区二区| 欧美美女喷水视频| 欧美韩国日本一区| 图片区小说区国产精品视频| 成人免费精品视频| 日韩欧美一区二区免费| 一区二区三区四区中文字幕| 国产伦精品一区二区三区视频青涩| 一本色道**综合亚洲精品蜜桃冫| 精品三级在线观看| 亚洲影院理伦片| 成人免费视频国产在线观看| 欧美一区二区三区视频免费| 国产精品福利影院| 麻豆精品精品国产自在97香蕉| 91福利在线播放| 中文字幕第一区| 看电视剧不卡顿的网站| 欧美丝袜丝交足nylons图片| 中文字幕高清一区| 狠狠色综合日日| 678五月天丁香亚洲综合网| 亚洲欧美区自拍先锋| 国产乱一区二区| 日韩一区二区在线观看| 国产精品色眯眯| 麻豆精品一区二区av白丝在线 | 久久欧美一区二区| 天天色综合成人网| 粉嫩绯色av一区二区在线观看| 日韩一区二区不卡| 日本在线不卡一区| 欧美日韩一区中文字幕| 亚洲综合在线免费观看| 北条麻妃国产九九精品视频| 久久精品欧美一区二区三区不卡 | 日韩三级av在线播放| 亚洲成人免费视频| 欧洲视频一区二区| 久久色.com| 激情综合五月天| 精品国产一区二区亚洲人成毛片| 日本女优在线视频一区二区| 欧美剧情电影在线观看完整版免费励志电影| 亚洲黄一区二区三区| 99久久久久久| 最新日韩在线视频| 国产91清纯白嫩初高中在线观看| 久久精品一区二区三区不卡牛牛 | 日韩成人免费电影| 日韩精品一区二区三区视频播放| 久久精品国产秦先生| 日韩色在线观看| 精彩视频一区二区| 亚洲精品一区在线观看| 狠狠色丁香婷婷综合| 国产校园另类小说区| 国产69精品一区二区亚洲孕妇| 久久精品欧美一区二区三区麻豆| 国产成人免费av在线| 久久久久99精品一区| 国产成人免费高清| 国产精品素人视频| 91国模大尺度私拍在线视频| 午夜精品免费在线观看| 91精品国产色综合久久不卡蜜臀| 蜜桃视频一区二区三区| 久久亚洲精精品中文字幕早川悠里 | 舔着乳尖日韩一区| 欧美一级欧美一级在线播放| 国产一区美女在线| 亚洲欧洲精品一区二区三区不卡| 不卡av电影在线播放| 国产精品三级电影| 色综合天天综合网天天看片| 天天综合天天做天天综合| 日韩视频在线你懂得| 国产成人欧美日韩在线电影| 中文欧美字幕免费| 在线精品视频一区二区| 日韩福利视频网| 国产女主播视频一区二区| 91亚洲精品一区二区乱码| 亚洲天堂av一区| 成人黄色大片在线观看| 亚洲综合偷拍欧美一区色| 日韩一区二区三区在线观看 | 色先锋aa成人| 美国欧美日韩国产在线播放| 国产欧美一区二区精品忘忧草| 99热在这里有精品免费| 日韩成人一级片| 久久亚洲一区二区三区四区| 91蝌蚪porny九色| 青青草97国产精品免费观看| 国产精品免费网站在线观看| 久久综合久久久久88| 尤物在线观看一区| 91久久精品一区二区| 免费观看在线色综合| 亚洲精品日韩一| 精品国产免费视频| 欧美在线短视频| 高清成人在线观看| 日韩黄色一级片| 亚洲欧洲成人精品av97| 久久久久久久久久久久久久久99 | 欧美日韩一二三区| 国产精品羞羞答答xxdd| 亚洲人成在线播放网站岛国| 精品理论电影在线观看 | 在线成人av网站| 色成人在线视频| 国产v综合v亚洲欧| 国产精品一线二线三线精华| 亚洲第一av色| 亚洲精品国产高清久久伦理二区| 国产午夜精品理论片a级大结局| 欧美日韩精品一区二区三区四区| 成人爱爱电影网址| 精品影视av免费| 青青草原综合久久大伊人精品 | 自拍偷拍国产精品| 91丨porny丨中文| 中文字幕国产一区二区| 欧美综合一区二区|