00001
00002
00003
00004
00005
00006
00007 #include <sstream>
00008 #include "ConsistentPhrase.h"
00009 #include "Word.h"
00010 #include "NonTerm.h"
00011 #include "Parameter.h"
00012
00013 using namespace std;
00014
00015 ConsistentPhrase::ConsistentPhrase(
00016 int sourceStart, int sourceEnd,
00017 int targetStart, int targetEnd,
00018 const Parameter ¶ms)
00019 :corners(4)
00020 ,m_hieroNonTerm(*this, params.hieroNonTerm, params.hieroNonTerm)
00021 {
00022 corners[0] = sourceStart;
00023 corners[1] = sourceEnd;
00024 corners[2] = targetStart;
00025 corners[3] = targetEnd;
00026 }
00027
00028 ConsistentPhrase::~ConsistentPhrase()
00029 {
00030
00031 }
00032
00033 bool ConsistentPhrase::operator<(const ConsistentPhrase &other) const
00034 {
00035 return corners < other.corners;
00036 }
00037
00038 void ConsistentPhrase::AddNonTerms(const std::string &source,
00039 const std::string &target)
00040 {
00041 m_nonTerms.push_back(NonTerm(*this, source, target));
00042 }
00043
00044 bool ConsistentPhrase::TargetOverlap(const ConsistentPhrase &other) const
00045 {
00046 if ( other.corners[3] < corners[2] || other.corners[2] > corners[3])
00047 return false;
00048
00049 return true;
00050 }
00051
00052 std::string ConsistentPhrase::Debug() const
00053 {
00054 stringstream out;
00055 out << "[" << corners[0] << "-" << corners[1]
00056 << "][" << corners[2] << "-" << corners[3] << "]";
00057
00058 out << "NT:";
00059 for (size_t i = 0; i < m_nonTerms.size(); ++i) {
00060 const NonTerm &nonTerm = m_nonTerms[i];
00061 out << nonTerm.GetLabel(Moses::Input) << ":" << nonTerm.GetLabel(Moses::Output);
00062 }
00063
00064 return out.str();
00065 }
00066
00067