00001
00002
00003
00004
00005
00006
00007 #include <sstream>
00008 #include <cassert>
00009 #include "ConsistentPhrases.h"
00010 #include "NonTerm.h"
00011 #include "Parameter.h"
00012 #include "moses/Util.h"
00013
00014 using namespace std;
00015
00016 ConsistentPhrases::ConsistentPhrases()
00017 {
00018 }
00019
00020 ConsistentPhrases::~ConsistentPhrases()
00021 {
00022 for (size_t start = 0; start < m_coll.size(); ++start) {
00023 std::vector<Coll> &allSourceStart = m_coll[start];
00024
00025 for (size_t size = 0; size < allSourceStart.size(); ++size) {
00026 Coll &coll = allSourceStart[size];
00027 Moses::RemoveAllInColl(coll);
00028 }
00029 }
00030 }
00031
00032 void ConsistentPhrases::Initialize(size_t size)
00033 {
00034 m_coll.resize(size);
00035
00036 for (size_t sourceStart = 0; sourceStart < size; ++sourceStart) {
00037 std::vector<Coll> &allSourceStart = m_coll[sourceStart];
00038 allSourceStart.resize(size - sourceStart);
00039 }
00040 }
00041
00042 void ConsistentPhrases::Add(int sourceStart, int sourceEnd,
00043 int targetStart, int targetEnd,
00044 const Parameter ¶ms)
00045 {
00046 Coll &coll = m_coll[sourceStart][sourceEnd - sourceStart];
00047 ConsistentPhrase *cp = new ConsistentPhrase(sourceStart, sourceEnd,
00048 targetStart, targetEnd,
00049 params);
00050
00051 assert(coll.find(cp) == coll.end());
00052 coll.insert(cp);
00053 }
00054
00055 const ConsistentPhrases::Coll &ConsistentPhrases::GetColl(int sourceStart, int sourceEnd) const
00056 {
00057 const std::vector<Coll> &allSourceStart = m_coll[sourceStart];
00058 const Coll &ret = allSourceStart[sourceEnd - sourceStart];
00059 return ret;
00060 }
00061
00062 ConsistentPhrases::Coll &ConsistentPhrases::GetColl(int sourceStart, int sourceEnd)
00063 {
00064 std::vector<Coll> &allSourceStart = m_coll[sourceStart];
00065 Coll &ret = allSourceStart[sourceEnd - sourceStart];
00066 return ret;
00067 }
00068
00069 std::string ConsistentPhrases::Debug() const
00070 {
00071 std::stringstream out;
00072 for (size_t start = 0; start < m_coll.size(); ++start) {
00073 const std::vector<Coll> &allSourceStart = m_coll[start];
00074
00075 for (size_t size = 0; size < allSourceStart.size(); ++size) {
00076 const Coll &coll = allSourceStart[size];
00077
00078 Coll::const_iterator iter;
00079 for (iter = coll.begin(); iter != coll.end(); ++iter) {
00080 const ConsistentPhrase &consistentPhrase = **iter;
00081 out << consistentPhrase.Debug() << endl;
00082 }
00083 }
00084 }
00085
00086 return out.str();
00087 }
00088
00089 void ConsistentPhrases::AddHieroNonTerms(const Parameter ¶ms)
00090 {
00091
00092 for (size_t i = 0; i < m_coll.size(); ++i) {
00093 vector<Coll> &inner = m_coll[i];
00094 for (size_t j = 0; j < inner.size(); ++j) {
00095 ConsistentPhrases::Coll &coll = inner[j];
00096 ConsistentPhrases::Coll::iterator iter;
00097 for (iter = coll.begin(); iter != coll.end(); ++iter) {
00098 ConsistentPhrase &cp = **iter;
00099 cp.AddNonTerms(params.hieroNonTerm, params.hieroNonTerm);
00100 }
00101 }
00102 }
00103 }
00104