00001 #pragma once 00002 00003 #include <vector> 00004 00005 #include "moses/AlignmentInfo.h" 00006 #include "moses/Phrase.h" 00007 00008 #include "AlignmentConstraint.h" 00009 00010 namespace Moses 00011 { 00012 00016 class VWTargetSentence 00017 { 00018 public: 00019 VWTargetSentence() : m_sentence(NULL), m_alignment(NULL) {} 00020 00021 void Clear() { 00022 if (m_sentence) delete m_sentence; 00023 if (m_alignment) delete m_alignment; 00024 } 00025 00026 ~VWTargetSentence() { 00027 Clear(); 00028 } 00029 00030 void SetConstraints(size_t sourceSize) { 00031 // initialize to unconstrained 00032 m_sourceConstraints.assign(sourceSize, AlignmentConstraint()); 00033 m_targetConstraints.assign(m_sentence->GetSize(), AlignmentConstraint()); 00034 00035 // set constraints according to alignment points 00036 AlignmentInfo::const_iterator it; 00037 for (it = m_alignment->begin(); it != m_alignment->end(); it++) { 00038 int src = it->first; 00039 int tgt = it->second; 00040 00041 if (src >= m_sourceConstraints.size() || tgt >= m_targetConstraints.size()) { 00042 UTIL_THROW2("VW :: alignment point out of bounds: " << src << "-" << tgt); 00043 } 00044 00045 m_sourceConstraints[src].Update(tgt); 00046 m_targetConstraints[tgt].Update(src); 00047 } 00048 } 00049 00050 Phrase *m_sentence; 00051 AlignmentInfo *m_alignment; 00052 std::vector<AlignmentConstraint> m_sourceConstraints, m_targetConstraints; 00053 }; 00054 00055 }