From 8d084476522ff267a25b8faa58e48879b5d0cdb6 Mon Sep 17 00:00:00 2001 From: Chris Dyer Date: Sat, 10 Nov 2012 19:02:56 -0500 Subject: support multi-reference references --- mteval/ns_docscorer.cc | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'mteval/ns_docscorer.cc') diff --git a/mteval/ns_docscorer.cc b/mteval/ns_docscorer.cc index f72ad115..83bd1a29 100644 --- a/mteval/ns_docscorer.cc +++ b/mteval/ns_docscorer.cc @@ -11,11 +11,14 @@ using namespace std; DocumentScorer::~DocumentScorer() {} +DocumentScorer::DocumentScorer() {} + void DocumentScorer::Init(const EvaluationMetric* metric, const vector& ref_files, const string& src_file, bool verbose) { scorers_.clear(); + static const WordID kDIV = TD::Convert("|||"); if (verbose) cerr << "Loading references (" << ref_files.size() << " files)\n"; assert(src_file.empty()); std::vector ifs(ref_files.begin(),ref_files.end()); @@ -23,13 +26,14 @@ void DocumentScorer::Init(const EvaluationMetric* metric, char buf[64000]; bool expect_eof = false; int line=0; + vector tmp; + vector > refs; while (ifs[0].get()) { - vector > refs(ref_files.size()); + refs.clear(); for (int i=0; i < ref_files.size(); ++i) { istream &in=ifs[i].get(); if (in.eof()) break; in.getline(buf, 64000); - refs[i].clear(); if (strlen(buf) == 0) { if (in.eof()) { if (!expect_eof) { @@ -38,9 +42,17 @@ void DocumentScorer::Init(const EvaluationMetric* metric, } break; } - } else { - TD::ConvertSentence(buf, &refs[i]); - assert(!refs[i].empty()); + } else { // read a line from a reference file + tmp.clear(); + TD::ConvertSentence(buf, &tmp); + unsigned last = 0; + for (unsigned j = 0; j < tmp.size(); ++j) { + if (tmp[j] == kDIV) { + refs.push_back(vector(tmp.begin() + last, tmp.begin() + j)); + last = j + 1; + } + } + refs.push_back(vector(tmp.begin() + last, tmp.end())); } assert(!expect_eof); } -- cgit v1.2.3