⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decodesteptranslation.cpp.svn-base

📁 moses开源的机器翻译系统
💻 SVN-BASE
字号:
// $Id$/***********************************************************************Moses - factored phrase-based language decoderCopyright (C) 2006 University of EdinburghThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA***********************************************************************/#include "DecodeStepTranslation.h"#include "PhraseDictionaryMemory.h"#include "TranslationOption.h"#include "TranslationOptionCollection.h"#include "PartialTranslOptColl.h"#include "FactorCollection.h"DecodeStepTranslation::DecodeStepTranslation(PhraseDictionary* dict, const DecodeStep* prev): DecodeStep(dict, prev){}const PhraseDictionary &DecodeStepTranslation::GetPhraseDictionary() const{  return *static_cast<const PhraseDictionary*>(m_ptr);}TranslationOption *DecodeStepTranslation::MergeTranslation(const TranslationOption& oldTO, const TargetPhrase &targetPhrase) const{  if (IsFilteringStep()) {    if (!oldTO.IsCompatible(targetPhrase, m_conflictFactors)) return 0;  }  TranslationOption *newTransOpt = new TranslationOption(oldTO);  newTransOpt->MergeNewFeatures(targetPhrase, targetPhrase.GetScoreBreakdown(), m_newOutputFactors);  return newTransOpt;}void DecodeStepTranslation::Process(const TranslationOption &inputPartialTranslOpt                              , const DecodeStep &decodeStep                              , PartialTranslOptColl &outputPartialTranslOptColl                              , TranslationOptionCollection *toc                              , bool adhereTableLimit) const{  if (inputPartialTranslOpt.GetTargetPhrase().GetSize() == 0)    { // word deletion      outputPartialTranslOptColl.Add(new TranslationOption(inputPartialTranslOpt));      return;    }  // normal trans step  const WordsRange &sourceWordsRange        = inputPartialTranslOpt.GetSourceWordsRange();  const PhraseDictionary &phraseDictionary  = decodeStep.GetPhraseDictionary();	const size_t currSize = inputPartialTranslOpt.GetTargetPhrase().GetSize();	const size_t tableLimit = phraseDictionary.GetTableLimit();	  const TargetPhraseCollection *phraseColl= phraseDictionary.GetTargetPhraseCollection(toc->GetSource(),sourceWordsRange);  if (phraseColl != NULL)    {      TargetPhraseCollection::const_iterator iterTargetPhrase, iterEnd;		 	iterEnd = (!adhereTableLimit || tableLimit == 0 || phraseColl->GetSize() < tableLimit) ? phraseColl->end() : phraseColl->begin() + tableLimit;			      for (iterTargetPhrase = phraseColl->begin(); iterTargetPhrase != iterEnd; ++iterTargetPhrase)        {          const TargetPhrase& targetPhrase = **iterTargetPhrase;					// skip if the 					if (targetPhrase.GetSize() != currSize) continue;          TranslationOption *newTransOpt = MergeTranslation(inputPartialTranslOpt, targetPhrase);          if (newTransOpt != NULL)            {              outputPartialTranslOptColl.Add( newTransOpt );            }        }    }  else if (sourceWordsRange.GetNumWordsCovered() == 1)    { // unknown handler      //toc->ProcessUnknownWord(sourceWordsRange.GetStartPos(), factorCollection);    }}void DecodeStepTranslation::ProcessInitialTranslation(															const InputType &source															,PartialTranslOptColl &outputPartialTranslOptColl															, size_t startPos, size_t endPos, bool adhereTableLimit) const{	const PhraseDictionary &phraseDictionary = GetPhraseDictionary();	const size_t tableLimit = phraseDictionary.GetTableLimit();	const WordsRange wordsRange(startPos, endPos);	const TargetPhraseCollection *phraseColl =	phraseDictionary.GetTargetPhraseCollection(source,wordsRange); 	if (phraseColl != NULL)	{		VERBOSE(3,"[" << source.GetSubString(wordsRange) << "; " << startPos << "-" << endPos << "]\n");					TargetPhraseCollection::const_iterator iterTargetPhrase, iterEnd;		iterEnd = (!adhereTableLimit || tableLimit == 0 || phraseColl->GetSize() < tableLimit) ? phraseColl->end() : phraseColl->begin() + tableLimit;				for (iterTargetPhrase = phraseColl->begin() ; iterTargetPhrase != iterEnd ; ++iterTargetPhrase)		{			const TargetPhrase	&targetPhrase = **iterTargetPhrase;			outputPartialTranslOptColl.Add ( new TranslationOption(wordsRange, targetPhrase, source) );						VERBOSE(3,"\t" << targetPhrase << "\n");		}		VERBOSE(3,endl);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -