00001 00002 #include <boost/algorithm/string.hpp> 00003 00004 #include "M2.h" 00005 00006 namespace MosesTuning 00007 { 00008 00009 namespace M2 00010 { 00011 00012 bool Annot::lowercase = true; 00013 00014 std::string Annot::transform(const std::string& e) 00015 { 00016 std::string temp = e; 00017 if(lowercase) { 00018 boost::erase_all(temp, " "); 00019 return ToLower(temp); 00020 } else 00021 return e; 00022 } 00023 00024 const std::string ToLower(const std::string& str) 00025 { 00026 std::string lc(str); 00027 std::transform(lc.begin(), lc.end(), lc.begin(), (int(*)(int))std::tolower); 00028 return lc; 00029 } 00030 00031 00032 Edit operator+(Edit& e1, Edit& e2) 00033 { 00034 std::string edit; 00035 if(e1.edit.size() > 0 && e2.edit.size() > 0) 00036 edit = e1.edit + " " + e2.edit; 00037 else if(e1.edit.size() > 0) 00038 edit = e1.edit; 00039 else if(e2.edit.size() > 0) 00040 edit = e2.edit; 00041 00042 return Edit(e1.cost + e2.cost, e1.changed + e2.changed, e1.unchanged + e2.unchanged, edit); 00043 } 00044 00045 00046 Edge operator+(Edge e1, Edge e2) 00047 { 00048 return Edge(e1.v, e2.u, e1.edit + e2.edit); 00049 } 00050 00051 std::ostream& operator<<(std::ostream& o, Sentence s) 00052 { 00053 for(Sentence::iterator it = s.begin(); it != s.end(); it++) 00054 o << *it << " "; 00055 return o; 00056 } 00057 00058 00059 } 00060 00061 }