Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Haddow <barry.haddow@gmail.com>2012-09-27 01:49:33 +0400
committerBarry Haddow <barry.haddow@gmail.com>2012-09-27 01:49:33 +0400
commit0a950ee9f4227c8afbbe58d03a854745479ffbc0 (patch)
tree3e4515adc6b3323f8742ff5addde2f29da2002c8 /OnDiskPt
parent1ce788e2b83dc9b359f6132e7e82774f9d0777b1 (diff)
parentab60d1ad6f93a78e80e665bc6c7d32b61b7c1c52 (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.cpp12
-rw-r--r--OnDiskPt/Word.cpp29
-rw-r--r--OnDiskPt/Word.h7
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;