diff options
Diffstat (limited to 'mteval/ns_docscorer.cc')
-rw-r--r-- | mteval/ns_docscorer.cc | 22 |
1 files changed, 17 insertions, 5 deletions
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<string>& 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<ReadFile> 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<WordID> tmp; + vector<vector<WordID> > refs; while (ifs[0].get()) { - vector<vector<WordID> > 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<WordID>(tmp.begin() + last, tmp.begin() + j)); + last = j + 1; + } + } + refs.push_back(vector<WordID>(tmp.begin() + last, tmp.end())); } assert(!expect_eof); } |