diff options
author | Nicola Bertoldi <bertoldi@fbk.eu> | 2014-04-30 10:32:46 +0400 |
---|---|---|
committer | Nicola Bertoldi <bertoldi@fbk.eu> | 2014-04-30 10:32:46 +0400 |
commit | fe1ed42f812072f548cc98418f4aaa06fed98695 (patch) | |
tree | e5a55e73456df1e5d77df07e0ed00ccd2234c35f /moses/TranslationOptionCollectionConfusionNet.cpp | |
parent | 0313523d7dbc4a7c576e290043880959a87e94df (diff) | |
parent | ae4ab9aae0643defd9edaaa7c9d11b6589d4811b (diff) |
Merge branch 'master' into dynamic-models
Diffstat (limited to 'moses/TranslationOptionCollectionConfusionNet.cpp')
-rw-r--r-- | moses/TranslationOptionCollectionConfusionNet.cpp | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/moses/TranslationOptionCollectionConfusionNet.cpp b/moses/TranslationOptionCollectionConfusionNet.cpp index 39877f2bc..98a4440c7 100644 --- a/moses/TranslationOptionCollectionConfusionNet.cpp +++ b/moses/TranslationOptionCollectionConfusionNet.cpp @@ -1,6 +1,7 @@ // $Id$ #include <list> +#include <vector> #include "TranslationOptionCollectionConfusionNet.h" #include "ConfusionNet.h" #include "DecodeGraph.h" @@ -10,6 +11,7 @@ #include "FF/InputFeature.h" #include "TranslationModel/PhraseDictionaryTreeAdaptor.h" #include "util/exception.hh" +#include <boost/foreach.hpp> using namespace std; @@ -17,11 +19,21 @@ namespace Moses { /** constructor; just initialize the base class */ -TranslationOptionCollectionConfusionNet::TranslationOptionCollectionConfusionNet( - const ConfusionNet &input - , size_t maxNoTransOptPerCoverage, float translationOptionThreshold) - : TranslationOptionCollection(input, maxNoTransOptPerCoverage, translationOptionThreshold) +TranslationOptionCollectionConfusionNet:: +TranslationOptionCollectionConfusionNet(const ConfusionNet &input, + size_t maxNoTransOptPerCoverage, + float translationOptionThreshold) + : TranslationOptionCollection(input, maxNoTransOptPerCoverage, + translationOptionThreshold) { + // Prefix checkers are phrase dictionaries that provide a prefix check + // to indicate that a phrase table entry with a given prefix exists. + // If no entry with the given prefix exists, there is no point in + // expanding it further. + vector<PhraseDictionary*> prefixCheckers; + BOOST_FOREACH(PhraseDictionary* pd, PhraseDictionary::GetColl()) + if (pd->ProvidesPrefixCheck()) prefixCheckers.push_back(pd); + const InputFeature &inputFeature = InputFeature::Instance(); UTIL_THROW_IF2(&inputFeature == NULL, "Input feature must be specified"); @@ -91,6 +103,11 @@ TranslationOptionCollectionConfusionNet::TranslationOptionCollectionConfusionNet Phrase subphrase(prevPhrase); subphrase.AddWord(word); + bool OK = prefixCheckers.size() == 0; + for (size_t k = 0; !OK && k < prefixCheckers.size(); ++k) + OK = prefixCheckers[k]->PrefixExists(subphrase); + if (!OK) continue; + const ScorePair &scores = col[i].second; ScorePair *inputScore = new ScorePair(*prevInputScore); inputScore->PlusEquals(scores); @@ -105,6 +122,9 @@ TranslationOptionCollectionConfusionNet::TranslationOptionCollectionConfusionNet } // for (iterPath = prevPaths.begin(); iterPath != prevPaths.end(); ++iterPath) { } } + // cerr << "HAVE " << m_inputPathQueue.size() + // << " input paths of max. length " + // << maxSizePhrase << "." << endl; } InputPathList &TranslationOptionCollectionConfusionNet::GetInputPathList(size_t startPos, size_t endPos) @@ -229,7 +249,9 @@ void TranslationOptionCollectionConfusionNet::CreateTranslationOptionsForRangeLE // go thru each intermediate trans opt just created const vector<TranslationOption*>& partTransOptList = oldPtoc->GetList(); vector<TranslationOption*>::const_iterator iterPartialTranslOpt; - for (iterPartialTranslOpt = partTransOptList.begin() ; iterPartialTranslOpt != partTransOptList.end() ; ++iterPartialTranslOpt) { + for (iterPartialTranslOpt = partTransOptList.begin(); + iterPartialTranslOpt != partTransOptList.end(); + ++iterPartialTranslOpt) { TranslationOption &inputPartialTranslOpt = **iterPartialTranslOpt; if (transStep) { |