diff options
Diffstat (limited to 'decoder')
-rwxr-xr-x | decoder/oracle_bleu.h | 2 | ||||
-rwxr-xr-x | decoder/sentences.h | 32 |
2 files changed, 29 insertions, 5 deletions
diff --git a/decoder/oracle_bleu.h b/decoder/oracle_bleu.h index 470d311d..94548c18 100755 --- a/decoder/oracle_bleu.h +++ b/decoder/oracle_bleu.h @@ -115,7 +115,6 @@ struct OracleBleu { set_oracle_doc_size(doc_size); } - typedef boost::shared_ptr<Score> ScoreP; ScoreP doc_score,sentscore; // made from factory, so we delete them ScoreP GetScore(Sentence const& sentence,int sent_id) { return ScoreP(ds[sent_id]->ScoreCandidate(sentence)); @@ -185,6 +184,7 @@ struct OracleBleu { } // destroys forest (replaces it w/ rescored oracle one) + // sets sentscore Oracle ComputeOracle(SentenceMetadata const& smeta,Hypergraph *forest_in_out,WeightVector const& feature_weights,unsigned kbest=0,std::string const& forest_output="") { Hypergraph &forest=*forest_in_out; Oracle r; diff --git a/decoder/sentences.h b/decoder/sentences.h index 842072b9..622a6f43 100755 --- a/decoder/sentences.h +++ b/decoder/sentences.h @@ -9,6 +9,10 @@ #include "stringlib.h" typedef std::vector<WordID> Sentence; +inline std::ostream & operator<<(std::ostream &out,Sentence const& s) { + return out<<TD::GetString(s); +} + inline void StringToSentence(std::string const& str,Sentence &s) { using namespace std; vector<string> ss=SplitOnWhitespace(str); @@ -38,15 +42,35 @@ public: Sentences() { } Sentences(unsigned n,Sentence const& sentence) : VS(n,sentence) { } Sentences(unsigned n,std::string const& sentence) : VS(n,StringToSentence(sentence)) { } + std::string filename; void Load(std::string file) { ReadFile r(file); - Load(*r.stream()); + Load(r.get(),file); } - void Load(std::istream &in) { - this->push_back(Sentence()); - while(in>>this->back()) ; + void Load(std::istream &in,std::string filen="-") { + filename=filen; + do { + this->push_back(Sentence()); + } while(in>>this->back()); this->pop_back(); } + void Print(std::ostream &out,int headn=0) const { + out << "[" << size()<< " sentences from "<<filename<<"]"; + if (headn!=0) { + int i=0,e=this->size(); + if (headn>0&&headn<e) { + e=headn; + out << " (first "<<headn<<")"; + } + out << " :\n"; + for (;i<e;++i) + out<<(*this)[i] << "\n"; + } + } + friend inline std::ostream& operator<<(std::ostream &out,Sentences const& s) { + s.Print(out); + return out; + } }; |