亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美在线观看禁18| 国产午夜精品一区二区三区嫩草| 精品久久久三级丝袜| 蜜桃av一区二区| 日韩精品一区二区三区中文精品| ㊣最新国产の精品bt伙计久久| 久久免费看少妇高潮| 精品在线亚洲视频| 国产视频一区二区三区在线观看| 亚洲大片精品永久免费| 4438亚洲最大| 国产在线视频一区二区三区| 日本一区二区三区四区| 91麻豆高清视频| 亚洲超丰满肉感bbw| 欧美不卡激情三级在线观看| 国产另类ts人妖一区二区| 国产三级精品视频| 色婷婷av一区| 免费欧美高清视频| 国产精品欧美久久久久一区二区| 国产精品一二三| 亚洲视频免费观看| 欧美日韩国产天堂| 激情五月婷婷综合网| 国产精品福利一区二区| 欧美午夜精品久久久久久超碰| 国产精品短视频| 精品视频在线视频| 国产剧情一区在线| 亚洲免费av网站| 日韩欧美在线不卡| 不卡视频免费播放| 日韩精品电影在线| 国产精品丝袜黑色高跟| 欧美日韩日日夜夜| 国产成人一区在线| 亚洲图片有声小说| 国产丝袜在线精品| 欧美日本国产视频| 成人一区在线观看| 日韩成人一区二区| 国产精品初高中害羞小美女文| 国产精品一区二区在线观看不卡 | 99视频精品在线| 有码一区二区三区| 精品国产一区二区三区av性色| 久久99国产精品免费| 亚洲色图在线播放| 日韩女优电影在线观看| www.在线成人| 麻豆精品一区二区三区| 亚洲精品亚洲人成人网在线播放| 在线日韩一区二区| 国产一区日韩二区欧美三区| 亚洲国产va精品久久久不卡综合| 欧美视频自拍偷拍| 丁香天五香天堂综合| 偷拍一区二区三区四区| 国产精品美日韩| 欧美大片一区二区三区| 色综合久久中文综合久久97| 精品伊人久久久久7777人| 亚洲一区二区三区四区五区黄 | 亚洲国产精品综合小说图片区| 在线播放国产精品二区一二区四区| 亚洲成a人v欧美综合天堂下载| 91精品蜜臀在线一区尤物| 色综合久久久久网| 国产精品自拍在线| 日产国产高清一区二区三区| 亚洲人一二三区| 国产肉丝袜一区二区| 91精品国产综合久久精品| 色综合久久九月婷婷色综合| 国产在线日韩欧美| 蜜臀精品一区二区三区在线观看| 久久精品亚洲麻豆av一区二区 | 国产高清成人在线| 日韩不卡一区二区三区 | 国产午夜精品一区二区三区嫩草| 99免费精品在线| 国产乱码一区二区三区| 日本伊人午夜精品| 午夜日韩在线电影| 亚洲欧美视频在线观看视频| 国产农村妇女毛片精品久久麻豆 | 91丨porny丨最新| 国产a久久麻豆| 韩国三级在线一区| 美日韩黄色大片| 亚洲成人免费看| 亚洲国产日日夜夜| 亚洲一区在线观看免费| 亚洲精品国产无天堂网2021| 中文字幕一区二区不卡| 国产精品蜜臀av| 中文在线一区二区| 国产拍欧美日韩视频二区| 久久综合九色综合久久久精品综合 | 国产中文一区二区三区| 热久久久久久久| 日本不卡在线视频| 日韩精品一卡二卡三卡四卡无卡| 久久久99久久| 国产欧美精品国产国产专区| 久久精品夜色噜噜亚洲a∨| 久久精品综合网| 久久久精品综合| 国产亚洲一本大道中文在线| 国产欧美日韩综合| 国产丝袜欧美中文另类| 日本一区二区综合亚洲| 欧美国产精品一区二区| 国产精品三级电影| 综合av第一页| 亚洲老司机在线| 亚洲一区二区在线免费看| 一区二区三区美女| 亚洲午夜私人影院| 午夜伦理一区二区| 秋霞av亚洲一区二区三| 精品无人码麻豆乱码1区2区| 国产一区二区在线影院| 国产成人精品免费在线| 成人app在线| 日本电影欧美片| 欧美日韩一卡二卡三卡| 欧美一级片免费看| 久久美女高清视频| 一区在线播放视频| 亚洲一区二区三区小说| 蜜臀av一级做a爰片久久| 精彩视频一区二区三区| 国产成人av电影免费在线观看| 美女视频第一区二区三区免费观看网站 | 欧美国产禁国产网站cc| 亚洲国产精品国自产拍av| 亚洲欧洲精品一区二区精品久久久 | 337p粉嫩大胆噜噜噜噜噜91av | 国产精品免费视频观看| 伊人色综合久久天天人手人婷| 国产精品久久久久影院| 亚洲三级电影全部在线观看高清| 国产欧美日韩久久| 亚洲欧美偷拍三级| 日产国产高清一区二区三区| 国产精品一二三四区| 色狠狠一区二区三区香蕉| 欧美精品在线视频| 久久网站热最新地址| 中文字幕亚洲欧美在线不卡| 亚洲国产成人av好男人在线观看| 亚洲激情图片一区| 美日韩黄色大片| jizzjizzjizz欧美| 欧美日韩夫妻久久| 亚洲精品一区二区三区福利| 中文字幕在线一区免费| 午夜激情一区二区三区| 国产主播一区二区| 欧美综合亚洲图片综合区| 精品少妇一区二区三区视频免付费 | 国产真实乱偷精品视频免| 成人伦理片在线| 欧美日韩电影一区| 国产午夜精品久久久久久免费视 | 91玉足脚交白嫩脚丫在线播放| 成人免费视频网站在线观看| 在线观看日韩高清av| 日韩精品中午字幕| 亚洲靠逼com| 精品一区二区在线视频| 色偷偷成人一区二区三区91| 日韩欧美123| 一区二区三区中文字幕精品精品| 伊人开心综合网| 国产美女在线观看一区| 欧美少妇bbb| 亚洲国产成人一区二区三区| 男人的天堂久久精品| 99久久精品国产观看| 欧美成人性战久久| 亚洲精品久久久蜜桃| 国产精品一区一区| 4438成人网| 亚洲精品写真福利| 国产成a人亚洲| 日韩一区二区免费在线电影| 亚洲黄一区二区三区| 国产成人午夜99999| 欧美精品乱码久久久久久| 国产精品视频一二| 精品在线你懂的| 欧美精品自拍偷拍动漫精品| 亚洲人123区| 东方aⅴ免费观看久久av| 欧美大片在线观看一区| 丝袜a∨在线一区二区三区不卡| 精品一区二区三区视频|