diff options
author | Barry Haddow <barry.haddow@gmail.com> | 2012-09-27 01:49:33 +0400 |
---|---|---|
committer | Barry Haddow <barry.haddow@gmail.com> | 2012-09-27 01:49:33 +0400 |
commit | 0a950ee9f4227c8afbbe58d03a854745479ffbc0 (patch) | |
tree | 3e4515adc6b3323f8742ff5addde2f29da2002c8 /OnDiskPt | |
parent | 1ce788e2b83dc9b359f6132e7e82774f9d0777b1 (diff) | |
parent | ab60d1ad6f93a78e80e665bc6c7d32b61b7c1c52 (diff) |
Merge remote branch 'github/master' into miramerge
Compiles, but not tested. Had to disable relent filter. Strangely, it seems to contain the
whole of moses-cmd.
Conflicts:
Jamroot
OnDiskPt/TargetPhrase.cpp
moses-cmd/src/Main.cpp
moses/src/AlignmentInfo.cpp
moses/src/AlignmentInfo.h
moses/src/ChartTranslationOptionCollection.cpp
moses/src/ChartTranslationOptionCollection.h
moses/src/GenerationDictionary.cpp
moses/src/Jamfile
moses/src/Parameter.cpp
moses/src/PhraseDictionary.cpp
moses/src/StaticData.cpp
moses/src/StaticData.h
moses/src/TargetPhrase.h
moses/src/TranslationSystem.cpp
moses/src/TranslationSystem.h
moses/src/Word.cpp
phrase-extract/score.cpp
regression-testing/Jamfile
scripts/ems/experiment.meta
scripts/ems/experiment.perl
scripts/training/train-model.perl
Diffstat (limited to 'OnDiskPt')
-rw-r--r-- | OnDiskPt/TargetPhrase.cpp | 12 | ||||
-rw-r--r-- | OnDiskPt/Word.cpp | 29 | ||||
-rw-r--r-- | OnDiskPt/Word.h | 7 |
3 files changed, 22 insertions, 26 deletions
diff --git a/OnDiskPt/TargetPhrase.cpp b/OnDiskPt/TargetPhrase.cpp index 4e6739fda..e7123af3b 100644 --- a/OnDiskPt/TargetPhrase.cpp +++ b/OnDiskPt/TargetPhrase.cpp @@ -240,9 +240,7 @@ Moses::TargetPhrase *TargetPhrase::ConvertToMoses(const std::vector<Moses::Facto --phraseSize; for (size_t pos = 0; pos < phraseSize; ++pos) { - Moses::Word *mosesWord = GetWord(pos).ConvertToMoses(Moses::Output, outputFactors, vocab); - ret->AddWord(*mosesWord); - delete mosesWord; + GetWord(pos).ConvertToMoses(outputFactors, vocab, ret->AddWord()); } // scores @@ -261,16 +259,12 @@ Moses::TargetPhrase *TargetPhrase::ConvertToMoses(const std::vector<Moses::Facto } ret->SetAlignmentInfo(alignmentInfo, indicator); - Moses::Word *lhs = GetWord(GetSize() - 1).ConvertToMoses(Moses::Output, outputFactors, vocab); - ret->SetTargetLHS(*lhs); - delete lhs; + GetWord(GetSize() - 1).ConvertToMoses(outputFactors, vocab, ret->MutableTargetLHS()); // set source phrase Moses::Phrase mosesSP(Moses::Input); for (size_t pos = 0; pos < sp->GetSize(); ++pos) { - Moses::Word *mosesWord = sp->GetWord(pos).ConvertToMoses(Moses::Input, inputFactors, vocab); - mosesSP.AddWord(*mosesWord); - delete mosesWord; + sp->GetWord(pos).ConvertToMoses(inputFactors, vocab, mosesSP.AddWord()); } ret->SetSourcePhrase(mosesSP); diff --git a/OnDiskPt/Word.cpp b/OnDiskPt/Word.cpp index 87d45818f..52e49d8d9 100644 --- a/OnDiskPt/Word.cpp +++ b/OnDiskPt/Word.cpp @@ -23,6 +23,9 @@ #include "../moses/src/Word.h" #include "Word.h" +#include "util/tokenize_piece.hh" +#include "util/exception.hh" + using namespace std; namespace OnDiskPt @@ -94,23 +97,21 @@ size_t Word::ReadFromFile(std::fstream &file) return memUsed; } -Moses::Word *Word::ConvertToMoses(Moses::FactorDirection direction - , const std::vector<Moses::FactorType> &outputFactorsVec - , const Vocab &vocab) const -{ +void Word::ConvertToMoses( + const std::vector<Moses::FactorType> &outputFactorsVec, + const Vocab &vocab, + Moses::Word &overwrite) const { Moses::FactorCollection &factorColl = Moses::FactorCollection::Instance(); - Moses::Word *ret = new Moses::Word(m_isNonTerminal); - - const string &str = vocab.GetString(m_vocabId); - vector<string> toks = Moses::Tokenize(str, "|"); - for (size_t ind = 0; ind < toks.size(); ++ind) { - Moses::FactorType factorType = outputFactorsVec[ind]; - const Moses::Factor *factor = factorColl.AddFactor(direction, factorType, toks[ind]); - ret->SetFactor(factorType, factor); - } + overwrite = Moses::Word(m_isNonTerminal); - return ret; + // TODO: this conversion should have been done at load time. + util::TokenIter<util::SingleCharacter> tok(vocab.GetString(m_vocabId), '|'); + for (std::vector<Moses::FactorType>::const_iterator t = outputFactorsVec.begin(); t != outputFactorsVec.end(); ++t, ++tok) { + UTIL_THROW_IF(!tok, util::Exception, "Too few factors in \"" << vocab.GetString(m_vocabId) << "\"; was expecting " << outputFactorsVec.size()); + overwrite.SetFactor(*t, factorColl.AddFactor(*tok)); + } + UTIL_THROW_IF(tok, util::Exception, "Too many factors in \"" << vocab.GetString(m_vocabId) << "\"; was expecting " << outputFactorsVec.size()); } int Word::Compare(const Word &compare) const diff --git a/OnDiskPt/Word.h b/OnDiskPt/Word.h index 98ed109ab..8c65cf7e5 100644 --- a/OnDiskPt/Word.h +++ b/OnDiskPt/Word.h @@ -71,9 +71,10 @@ public: m_vocabId = vocabId; } - Moses::Word *ConvertToMoses(Moses::FactorDirection direction - , const std::vector<Moses::FactorType> &outputFactorsVec - , const Vocab &vocab) const; + void ConvertToMoses( + const std::vector<Moses::FactorType> &outputFactorsVec, + const Vocab &vocab, + Moses::Word &overwrite) const; virtual void DebugPrint(std::ostream &out, const Vocab &vocab) const; |