summaryrefslogtreecommitdiff
path: root/mteval
diff options
context:
space:
mode:
Diffstat (limited to 'mteval')
-rw-r--r--mteval/scorer.cc25
-rw-r--r--mteval/scorer.h26
2 files changed, 49 insertions, 2 deletions
diff --git a/mteval/scorer.cc b/mteval/scorer.cc
index a83b9e2f..ced0cadf 100644
--- a/mteval/scorer.cc
+++ b/mteval/scorer.cc
@@ -595,6 +595,7 @@ void DocScorer::Init(
const vector<string>& ref_files,
const string& src_file, bool verbose) {
scorers_.clear();
+ this->type = type;
// TODO stop using valarray, start using ReadFile
cerr << "Loading references (" << ref_files.size() << " files)\n";
ReadFile srcrf;
@@ -644,3 +645,27 @@ void DocScorer::Init(
cerr << "Loaded reference translations for " << scorers_.size() << " sentences.\n";
}
+void DocStreamScorer::Init(
+ const ScoreType type,
+ const vector<string>& ref_files,
+ const string& src_file, bool verbose) {
+ scorers_.clear();
+ // AER not supported in stream mode
+ assert(type != AER);
+ this->type = type;
+ vector<vector<WordID> > refs(1);
+ string src_line;
+ // Empty reference 0
+ TD::ConvertSentence("", &refs[0]);
+ scorers_.push_back(ScorerP(SentenceScorer::CreateSentenceScorer(type, refs, src_line)));
+ // Reference 1 starts empty, updated as needed
+ scorers_.push_back(ScorerP(SentenceScorer::CreateSentenceScorer(type, refs, src_line)));
+}
+
+void DocStreamScorer::update(const std::string& ref) {
+ scorers_.pop_back();
+ vector<vector<WordID> > refs(1);
+ string src_line;
+ TD::ConvertSentence(ref, &refs[0]);
+ scorers_.push_back(ScorerP(SentenceScorer::CreateSentenceScorer(this->type, refs, src_line)));
+}
diff --git a/mteval/scorer.h b/mteval/scorer.h
index 8bd76982..56c39a7d 100644
--- a/mteval/scorer.h
+++ b/mteval/scorer.h
@@ -83,10 +83,11 @@ class SentenceScorer {
//TODO: should be able to GetOne GetZero without supplying sentence (just type)
class DocScorer {
+ friend class DocStreamScorer;
public:
- ~DocScorer();
+ virtual ~DocScorer();
DocScorer() { }
- void Init(const ScoreType type,
+ virtual void Init(const ScoreType type,
const std::vector<std::string>& ref_files,
const std::string& src_file = "",
bool verbose=false
@@ -102,9 +103,30 @@ class DocScorer {
int size() const { return scorers_.size(); }
ScorerP operator[](size_t i) const { return scorers_[i]; }
+ virtual void update(const std::string& ref) {}
private:
+ ScoreType type;
std::vector<ScorerP> scorers_;
};
+class DocStreamScorer : public DocScorer {
+ public:
+ void Init(const ScoreType type,
+ const std::vector<std::string>& ref_files,
+ const std::string& src_file = "",
+ bool verbose=false
+ );
+ DocStreamScorer(const ScoreType type,
+ const std::vector<std::string>& ref_files,
+ const std::string& src_file = "",
+ bool verbose=false
+ )
+ {
+ Init(type,ref_files,src_file,verbose);
+ }
+ ScorerP operator[](size_t i);
+ int size();
+ void update(const std::string& ref);
+};
#endif