diff options
Diffstat (limited to 'moses/ScoreComponentCollection.cpp')
-rw-r--r-- | moses/ScoreComponentCollection.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/moses/ScoreComponentCollection.cpp b/moses/ScoreComponentCollection.cpp index 7cd9be701..0ce50d992 100644 --- a/moses/ScoreComponentCollection.cpp +++ b/moses/ScoreComponentCollection.cpp @@ -1,6 +1,6 @@ // $Id$ #include <vector> - +#include "util/exception.hh" #include "ScoreComponentCollection.h" #include "StaticData.h" @@ -30,6 +30,20 @@ void ScorePair::PlusEquals(const StringPiece &key, float value) } } +std::ostream& operator<<(std::ostream& os, const ScorePair& rhs) +{ + for (size_t i = 0; i < rhs.denseScores.size(); ++i) { + os << rhs.denseScores[i] << ","; + } + + std::map<StringPiece, float>::const_iterator iter; + for (iter = rhs.sparseScores.begin(); iter != rhs.sparseScores.end(); ++iter) { + os << iter->first << "=" << iter->second << ","; + } + + return os; +} + ScoreComponentCollection::ScoreIndexMap ScoreComponentCollection::s_scoreIndexes; size_t ScoreComponentCollection::s_denseVectorSize = 0; @@ -206,6 +220,21 @@ void ScoreComponentCollection::Assign(const FeatureFunction* sp, const string li } } +void ScoreComponentCollection::Assign(const FeatureFunction* sp, const std::vector<float>& scores) { + IndexPair indexes = GetIndexes(sp); + size_t numScores = indexes.second - indexes.first; + + if (scores.size() != numScores) { + UTIL_THROW(util::Exception, "Feature function " << sp->GetScoreProducerDescription() << " specified " + << numScores << " dense scores or weights. Actually has " << scores.size()); + } + + for (size_t i = 0; i < scores.size(); ++i) { + m_scores[i + indexes.first] = scores[i]; + } +} + + void ScoreComponentCollection::InvertDenseFeatures(const FeatureFunction* sp) { |