| | |
| | |
| | |
| | |
| | |
| | |
| | #include <sstream> |
| | #include <cassert> |
| | #include "ConsistentPhrases.h" |
| | #include "NonTerm.h" |
| | #include "Parameter.h" |
| | #include "moses/Util.h" |
| |
|
| | using namespace std; |
| |
|
| | ConsistentPhrases::ConsistentPhrases() |
| | { |
| | } |
| |
|
| | ConsistentPhrases::~ConsistentPhrases() |
| | { |
| | for (size_t start = 0; start < m_coll.size(); ++start) { |
| | std::vector<Coll> &allSourceStart = m_coll[start]; |
| |
|
| | for (size_t size = 0; size < allSourceStart.size(); ++size) { |
| | Coll &coll = allSourceStart[size]; |
| | Moses::RemoveAllInColl(coll); |
| | } |
| | } |
| | } |
| |
|
| | void ConsistentPhrases::Initialize(size_t size) |
| | { |
| | m_coll.resize(size); |
| |
|
| | for (size_t sourceStart = 0; sourceStart < size; ++sourceStart) { |
| | std::vector<Coll> &allSourceStart = m_coll[sourceStart]; |
| | allSourceStart.resize(size - sourceStart); |
| | } |
| | } |
| |
|
| | void ConsistentPhrases::Add(int sourceStart, int sourceEnd, |
| | int targetStart, int targetEnd, |
| | const Parameter ¶ms) |
| | { |
| | Coll &coll = m_coll[sourceStart][sourceEnd - sourceStart]; |
| | ConsistentPhrase *cp = new ConsistentPhrase(sourceStart, sourceEnd, |
| | targetStart, targetEnd, |
| | params); |
| |
|
| | assert(coll.find(cp) == coll.end()); |
| | coll.insert(cp); |
| | } |
| |
|
| | const ConsistentPhrases::Coll &ConsistentPhrases::GetColl(int sourceStart, int sourceEnd) const |
| | { |
| | const std::vector<Coll> &allSourceStart = m_coll[sourceStart]; |
| | const Coll &ret = allSourceStart[sourceEnd - sourceStart]; |
| | return ret; |
| | } |
| |
|
| | ConsistentPhrases::Coll &ConsistentPhrases::GetColl(int sourceStart, int sourceEnd) |
| | { |
| | std::vector<Coll> &allSourceStart = m_coll[sourceStart]; |
| | Coll &ret = allSourceStart[sourceEnd - sourceStart]; |
| | return ret; |
| | } |
| |
|
| | std::string ConsistentPhrases::Debug() const |
| | { |
| | std::stringstream out; |
| | for (size_t start = 0; start < m_coll.size(); ++start) { |
| | const std::vector<Coll> &allSourceStart = m_coll[start]; |
| |
|
| | for (size_t size = 0; size < allSourceStart.size(); ++size) { |
| | const Coll &coll = allSourceStart[size]; |
| |
|
| | Coll::const_iterator iter; |
| | for (iter = coll.begin(); iter != coll.end(); ++iter) { |
| | const ConsistentPhrase &consistentPhrase = **iter; |
| | out << consistentPhrase.Debug() << endl; |
| | } |
| | } |
| | } |
| |
|
| | return out.str(); |
| | } |
| |
|
| | void ConsistentPhrases::AddHieroNonTerms(const Parameter ¶ms) |
| | { |
| | |
| | for (size_t i = 0; i < m_coll.size(); ++i) { |
| | vector<Coll> &inner = m_coll[i]; |
| | for (size_t j = 0; j < inner.size(); ++j) { |
| | ConsistentPhrases::Coll &coll = inner[j]; |
| | ConsistentPhrases::Coll::iterator iter; |
| | for (iter = coll.begin(); iter != coll.end(); ++iter) { |
| | ConsistentPhrase &cp = **iter; |
| | cp.AddNonTerms(params.hieroNonTerm, params.hieroNonTerm); |
| | } |
| | } |
| | } |
| | } |
| |
|
| |
|