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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? transoptions.cpp

?? 解碼器是基于短語(yǔ)的統(tǒng)計(jì)機(jī)器翻譯系統(tǒng)的核心模塊
?? CPP
字號(hào):
#include "TransOptions.h"
#include <iostream>
#include <strstream>
#include <cmath>
#include <algorithm>

using namespace std;
extern bool printmore;

TransOptions::TransOptions(Para para)
{
	WLM = para.weight_l;
	WPROBEF = para.weight_ef;
	WLEXEF = para.weight_lexef;
	WPROBFE = para.weight_fe;
	WLEXFE = para.weight_lexfe;
	WPENALTY = para.penalty;	
	TTABLELIMIT = para.ttable_limit;
	PHRASELIMIT = para.phrase_limit; //短語(yǔ)長(zhǎng)度限制
	WEIGHTW = para.word_penalty;
}

bool TransOptions::load(string fileName, LanguageModel *lm, Vocab *evocab, Vocab *cvocab)
{

	ENVOCAB =evocab;
	if (!ENVOCAB) {
		cout << "english vocab is NULL!" << endl;
		return 0;
	}

	CNVOCAB = cvocab;
	if (!CNVOCAB) {
		cout << "foreign vocab is NULL!" << endl;
		return 0;
	}

	LM = lm;
	string strTmp;
	input.open(fileName.c_str(), std::ios::in);
	if (!input) 
	{
		cout << "Open Phrase Table " << fileName << " Error!" << endl;
		return 0;
	}
	if (!LM) 
	{
		cout << "LM is NULL!" << endl;
		return 0;
	}

//	clock_t oldclock, newclock;
//	oldclock = clock();
	long i = 0;
	double MAX;
	double MIN;
	char zero[2];
	sprintf(zero, "%d", 0);
	string ZERO(zero);
	while (getline(input, strTmp)) 
	{
		vector<string> vecTmp;
		vector<string> vecWords;
	//	ePhrase ePhraseTmp;
		int firstSymbol = strTmp.find_first_of("|||");
		int lastSymbol = strTmp.find_last_of("|||");
		if ((firstSymbol == string::npos) || (lastSymbol == string::npos)) {
			continue ;
		}
		string fPhrase(strTmp, 0, firstSymbol - 1);
		string ePhrase(strTmp, firstSymbol + 4, lastSymbol - firstSymbol - 7);
		vector<int> fPhraseVec;
		vector<int> ePhraseVec;
		CNVOCAB->getIndices(fPhrase, fPhraseVec);
		ENVOCAB->getIndices(ePhrase, ePhraseVec);
		//ePhraseTmp.eWords = ePhrase;
		string probs(strTmp, lastSymbol + 2, strTmp.length() - lastSymbol - 1);
		split(probs, vecTmp);
		if (vecTmp.size() == 4) {
			vecTmp.push_back(ZERO);
		}
		double TMcost = WPROBEF * log(atof(vecTmp[0].c_str())) + WLEXEF * log(atof(vecTmp[1].c_str())) + \
			WPROBFE* log(atof(vecTmp[2].c_str())) + WLEXFE * log(atof(vecTmp[3].c_str())) + \
			WPENALTY * log(atof(vecTmp[4].c_str()));

//		split(ePhrase, vecWords);
		double LMcost = wordsProb(ePhraseVec);
		aboutEPhrase *ePhraseTmp = new aboutEPhrase();
		ePhraseTmp->c = TMcost + LMcost;
		ePhraseTmp->ephrase = ePhraseVec;
		ePhraseTmp->pC = TMcost;
	
		phraseTable::iterator posPT = f2eVocab.find(fPhraseVec);
		
		if (posPT != f2eVocab.end()) 
		{
		//	f2eVocab[fPhrase].push_back(ePhraseTmp);
			int len = posPT->second.size();
			if (len < TTABLELIMIT) {
				f2eVocab[fPhraseVec].push_back(ePhraseTmp);
				if ((ePhraseTmp->c - MAX > avs)) {
					MAX = ePhraseTmp->c;
				}
				if ((ePhraseTmp->c - MIN < avs)) {
					MIN = ePhraseTmp->c;
				}
			}
			else {
				MIN = (**min_element(posPT->second.begin(), posPT->second.end(), LESS())).c;
				if ((ePhraseTmp->c - MIN > avs)) {
					double tmp = MIN;
					if ((ePhraseTmp->c - MAX > avs)) {
						MAX = ePhraseTmp->c;
					}
					for (int i = 0; i < TTABLELIMIT; i++)
					{
						double test = (posPT->second)[i]->c;
						if (((posPT->second)[i]->c - tmp < avs) && ((posPT->second)[i]->c - tmp > -avs)) 
						{
							delete (posPT->second)[i];
							(posPT->second)[i] = ePhraseTmp;	
							break;
						}
					}
				}
			}
		}
		else
		{
			candiPhrase eAboutTmp;
			eAboutTmp.push_back(ePhraseTmp);
			f2eVocab.insert(make_pair(fPhraseVec, eAboutTmp));
			MAX = ePhraseTmp->c;
			MIN = ePhraseTmp->c;
		}

//		ePhraseTmp = NULL;
		vecWords.clear();
		vecTmp.clear();
	}
	input.clear();
	input.close();
	if(printmore) {
	cout << "Loading phrase table finished!!!" << endl;
	}
	return 1;
}

inline void TransOptions::split(const string& line, vector<string>& strs)
{
	istrstream ist(line.c_str());
	string w;
	while(ist>>w) strs.push_back(w);
}

void TransOptions::eraseSet(candiPhrase& forErase, int limit)
{
	stable_sort(forErase.begin(), forErase.end(), GREATER());
	forErase.erase(forErase.begin() + limit, forErase.end());

}

int TransOptions::getEPhrase(vector<int> fPhrase, PhraseSnippet& phraseSnippet, PhraseSnippetPosition& phraseSnippetPosition)
{
	int len = fPhrase.size();

	futureCost.resize(len);
	for(int ifc = 0; ifc < len; ifc++)
	{
		futureCost[ifc].resize(len);
	}
	
	for(int initI = 0; initI < len; initI++)
	{
		for(int initJ = initI; initJ < len; initJ++)
		{
			futureCost[initI][initJ] = INFINITE;
		}
	}
//獲取TO以及future cost

	for(int i = 0; i <= PHRASELIMIT; i++)
	{
		for(int j = 0; (j < len) && (j + i < len); j++)
		{
			vector<int> fPhraseSnippet;
			fPosition posTmp;

			posTmp.start = j;
			posTmp.end = j + i;
			
			if (j == j + i) {
				fPhraseSnippet.push_back(fPhrase[j]);
			}
			else
			{
				for(int iTmp = j; iTmp <= j + i; iTmp++ )
				{
					fPhraseSnippet.push_back(fPhrase[iTmp]);
				}
			}
			
			if (fPhraseSnippet.size() <= 0) {
				continue;
			}
			phraseTable::iterator findT = f2eVocab.find(fPhraseSnippet);
			if (findT != f2eVocab.end()) 
			{
				int si = (findT->second).size();
				phraseSnippet.push_back(&(findT->second));
				phraseSnippetPosition.push_back(posTmp);
				futureCost[j][j + i] = (**max_element((findT->second).begin(), (findT->second).end(), LESS())).c;
			}
			else if ((findT == f2eVocab.end()) && (j == j + i)) 
			{
				aboutEPhrase *aboute = new aboutEPhrase;
				candiPhrase *cp = new candiPhrase;
				
				if (fPhraseSnippet[0] > 0) {
					int ids = --Vocab::ID;
					string cn = CNVOCAB->getWord(fPhraseSnippet[0]);
					CNVOCAB->unkTMP.insert(make_pair(ids, cn));
					ENVOCAB->unkTMP.insert(make_pair(ids, cn));
					fPhraseSnippet.clear();
					fPhraseSnippet.push_back(ids);
				}
				aboute->ephrase = fPhraseSnippet;
				aboute->pC = 0;
				aboute->c = wordsProb(fPhraseSnippet);
				cp->push_back(aboute);
				phraseSnippet.push_back(cp);
				phraseSnippetPosition.push_back(posTmp);
				futureCost[j][j + i] = (**max_element(cp->begin(), cp->end(), LESS())).c;
			}
		}
	}
	reCalculation();
	if(printmore) {
		cout << "print translation options ... " << endl;
		int lenTO = phraseSnippet.size();
		for(int iTO = 0; iTO < lenTO; iTO++)
		{
			candiPhrase::iterator pos;
			int lenT = phraseSnippet[iTO]->size();
			int fWordsLen = phraseSnippetPosition[iTO].end - phraseSnippetPosition[iTO].start + 1;
			vector<int> fWords;
			
			for(int position = phraseSnippetPosition[iTO].start; position <= phraseSnippetPosition[iTO].end; position++)
			{
				fWords.push_back(fPhrase[position]);
			}
			
			cout << "[ " << CNVOCAB->getWords(fWords) << " ]\t" << lenT <<endl;
			for(pos = phraseSnippet[iTO]->begin(); pos != phraseSnippet[iTO]->end(); ++pos)
			{
				cout << "\t" << ENVOCAB->getWords((*pos)->ephrase) << ", " << (*pos)->pC << ", " << (*pos)->c << endl;
			}
			fWords.clear();
		}
		
		cout << "print future cost" << endl;
		int lena = futureCost.size();
		for(int ia = 0; ia < lena; ia++)
		{
			for(int j = ia; j < lena; j++)
			{
				cout << "future costs from " << ia << " to " << j << " is " << futureCost[ia][j] << endl;
			}
		}
		cout << "Get translation options finished !" << endl;
	}
	return len;
}

void TransOptions::reCalculation()
{
	int len = futureCost.size();
	for(int l = 1; l < len; l++)
	{
		for(int i = 0; i < len - l; i++)
		{
			int j = i + l;
			for(int k = i; k < j; k++)
			{
				double q = futureCost[i][k] + futureCost[k + 1][j];
				if (q - futureCost[i][j] > avs) {
					futureCost[i][j] = q;
				}
			}
		}
	}
}

double TransOptions::getFutureCost(int from, int to)
{
	if (from <= to) {
		return futureCost[from][to];
	}
	return 0.0;
}

void TransOptions::printFC()
{
	int len = futureCost.size();
	for(int i = 0; i < len; i++)
	{
		for(int j = i; j < len; j++)
		{
			cout << "future costs from " << i << " to " << j << " is " << futureCost[i][j] << endl;
		}
	}
}

double TransOptions::wordsProb(vector<int> Ephrase)
{
	int len = Ephrase.size();
	double lmscore = 0;
	vector<int>::iterator pos = Ephrase.end();
	for(int i = 0 ; i < len; i++)
	{
		double lmTmp = LM->wordProb(Ephrase) * WLM;

		lmscore += lmTmp;
		Ephrase.erase(--pos);
	}
	return lmscore + WEIGHTW * len * (-1);
}

TransOptions::~TransOptions()
{
	phraseTable::iterator pos;
	for(pos = f2eVocab.begin(); pos != f2eVocab.end(); ++pos)
	{
		candiPhrase::iterator posi;
		for(posi = pos->second.begin(); posi != pos->second.end(); ++posi)
		{
			delete *posi;
		}
	}
}






?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区久本道91| 欧美在线一二三四区| 欧美高清www午色夜在线视频| 亚洲国产日韩在线一区模特| 91成人免费在线视频| 亚洲综合在线第一页| 欧美日韩国产精品成人| 日韩精品欧美成人高清一区二区| 91精品国产乱| 国内精品在线播放| 国产色一区二区| 色综合久久综合网| 午夜精品影院在线观看| 欧美xfplay| 丰满少妇久久久久久久| 亚洲视频网在线直播| 欧美三片在线视频观看| 久久av资源站| 国产精品福利一区| 欧美日韩国产高清一区二区三区 | 亚洲一区中文在线| 7777精品伊人久久久大香线蕉完整版 | 欧美日韩国产中文| 粉嫩一区二区三区性色av| 国产欧美日产一区| 日本韩国欧美在线| 日韩av二区在线播放| 欧美韩国日本不卡| 欧美性猛交xxxx黑人交| 国产在线不卡一卡二卡三卡四卡| 国产精品久久久久四虎| 欧美日韩国产中文| 国产成人精品网址| 午夜久久久影院| 久久亚洲欧美国产精品乐播| 在线观看亚洲一区| 国产盗摄一区二区| 日精品一区二区| 国产精品伦理一区二区| 欧美一区二区三区四区久久| 国v精品久久久网| 日日骚欧美日韩| 中文乱码免费一区二区| 欧美一区二区日韩一区二区| 成人一道本在线| 麻豆久久久久久| 亚洲精品写真福利| 久久精品欧美日韩| 制服视频三区第一页精品| 不卡视频免费播放| 久久99精品一区二区三区三区| 亚洲男人的天堂av| 久久久五月婷婷| 欧美一区二区三区免费| 欧美性感一区二区三区| 成人白浆超碰人人人人| 国产曰批免费观看久久久| 午夜精品福利一区二区三区av| 国产精品乱码久久久久久 | 欧美一区二区三区视频在线| 日本精品免费观看高清观看| 不卡的看片网站| 国产不卡视频在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产91精品在线观看| 热久久一区二区| 视频在线在亚洲| 亚洲福利视频一区二区| 一区二区三区精品| 亚洲天堂网中文字| 国产精品麻豆欧美日韩ww| 久久综合九色综合97婷婷| 欧美一区2区视频在线观看| 欧美日韩一区二区不卡| 欧美这里有精品| 在线看国产日韩| 在线观看国产一区二区| 色婷婷av一区二区三区gif| 91亚洲男人天堂| 岛国精品在线播放| 成人不卡免费av| aaa欧美色吧激情视频| 99综合电影在线视频| 成人蜜臀av电影| aaa国产一区| 在线一区二区观看| 精品婷婷伊人一区三区三| 精品视频全国免费看| 欧美色爱综合网| 制服丝袜亚洲精品中文字幕| 日韩视频免费观看高清完整版| 日韩女优av电影| 久久伊人蜜桃av一区二区| 国产视频一区二区三区在线观看| 国产人成一区二区三区影院| 国产精品丝袜久久久久久app| 国产精品嫩草久久久久| 亚洲欧美日韩中文字幕一区二区三区| 一区二区三区四区蜜桃| 亚洲成va人在线观看| 免费国产亚洲视频| 国产一区二区三区日韩| 99久久夜色精品国产网站| 色狠狠av一区二区三区| 在线不卡的av| 国产亚洲成年网址在线观看| 国产精品色婷婷久久58| 一区二区三国产精华液| 日韩有码一区二区三区| 国产麻豆精品一区二区| 成a人片国产精品| 欧美日韩的一区二区| 久久久久亚洲综合| 一区二区三区四区在线播放 | 日韩中文欧美在线| 国产伦精品一区二区三区在线观看 | 久久久久免费观看| 亚洲黄网站在线观看| 六月丁香婷婷久久| 成人福利在线看| 欧美精品久久久久久久多人混战 | 欧美大片在线观看| 亚洲欧洲日韩av| 免播放器亚洲一区| 福利一区福利二区| 欧美久久一二三四区| 国产三级一区二区三区| 亚洲国产cao| zzijzzij亚洲日本少妇熟睡| 欧美一区二区三区影视| 综合欧美亚洲日本| 麻豆91小视频| 91久久精品一区二区三| 国产亚洲欧美色| 日韩精品电影在线| 94-欧美-setu| 久久久久久久久久久久久夜| 首页国产欧美久久| 在线观看一区二区精品视频| 久久久久久久综合日本| 日韩高清在线不卡| 欧洲一区二区av| 国产精品的网站| 国产精品一级二级三级| 欧美一区二区三区电影| 亚洲已满18点击进入久久| 成人综合日日夜夜| 精品国产青草久久久久福利| 三级久久三级久久| 日本电影欧美片| 成人免费小视频| 成人一区二区三区视频| 久久综合久久99| 另类小说综合欧美亚洲| 欧美日韩aaaaaa| 亚洲一区视频在线| 色综合久久久久| 自拍偷拍欧美激情| 成人精品小蝌蚪| 中文字幕不卡在线| 国产中文一区二区三区| 日韩精品一区二区三区四区视频| 亚洲国产精品一区二区久久恐怖片 | 亚洲午夜精品网| 日本高清视频一区二区| 亚洲美女视频一区| 91蝌蚪porny| 亚洲日本成人在线观看| 99综合影院在线| 亚洲欧洲制服丝袜| 色94色欧美sute亚洲线路一久 | 日韩一区二区在线免费观看| 日韩福利视频网| 在线不卡中文字幕播放| 日本不卡的三区四区五区| 7777精品伊人久久久大香线蕉的 | 成人动漫一区二区在线| 一区精品在线播放| 色综合久久综合| 亚洲福中文字幕伊人影院| 欧美精品在线视频| 免费在线观看日韩欧美| 欧美tickling挠脚心丨vk| 国产专区欧美精品| 中文字幕中文在线不卡住| 91在线视频免费观看| 一级精品视频在线观看宜春院 | hitomi一区二区三区精品| 亚洲品质自拍视频| 欧美精品v国产精品v日韩精品| 奇米色一区二区三区四区| 久久欧美一区二区| va亚洲va日韩不卡在线观看| 一区二区三区四区在线| 69堂成人精品免费视频| 国模套图日韩精品一区二区| 国产精品久久久久久久久动漫| 91免费观看国产| 蜜臀91精品一区二区三区 | 亚洲18色成人|