| #include "PhraseBasedReorderingState.h" |
|
|
| namespace Moses |
| { |
| |
| |
| |
| bool PhraseBasedReorderingState::m_useFirstBackwardScore = true; |
|
|
| PhraseBasedReorderingState:: |
| PhraseBasedReorderingState(const PhraseBasedReorderingState *prev, |
| const TranslationOption &topt) |
| : LRState(prev, topt) |
| , m_prevRange(topt.GetSourceWordsRange()) |
| , m_first(false) |
| { } |
|
|
|
|
| PhraseBasedReorderingState:: |
| PhraseBasedReorderingState(const LRModel &config, |
| LRModel::Direction dir, size_t offset) |
| : LRState(config, dir, offset) |
| , m_prevRange(NOT_FOUND,NOT_FOUND) |
| , m_first(true) |
| { } |
|
|
|
|
| size_t PhraseBasedReorderingState::hash() const |
| { |
| size_t ret; |
| ret = hash_value(m_prevRange); |
| boost::hash_combine(ret, m_direction); |
|
|
| return ret; |
| } |
|
|
| bool PhraseBasedReorderingState::operator==(const FFState& o) const |
| { |
| if (&o == this) return true; |
|
|
| const PhraseBasedReorderingState &other = static_cast<const PhraseBasedReorderingState&>(o); |
| if (m_prevRange == other.m_prevRange) { |
| if (m_direction == LRModel::Forward) { |
| int compareScore = ComparePrevScores(other.m_prevOption); |
| return compareScore == 0; |
| } else { |
| return true; |
| } |
| } else { |
| return false; |
| } |
| } |
|
|
| LRState* |
| PhraseBasedReorderingState:: |
| Expand(const TranslationOption& topt, const InputType& input, |
| ScoreComponentCollection* scores) const |
| { |
| |
|
|
| if ((m_direction != LRModel::Forward && m_useFirstBackwardScore) || !m_first) { |
| LRModel const& lrmodel = m_configuration; |
| Range const cur = topt.GetSourceWordsRange(); |
| LRModel::ReorderingType reoType = (m_first ? lrmodel.GetOrientation(cur) |
| : lrmodel.GetOrientation(m_prevRange,cur)); |
| CopyScores(scores, topt, input, reoType); |
| } |
| return new PhraseBasedReorderingState(this, topt); |
| } |
|
|
| } |
|
|
|
|