LexicalReorderingState *LexicalReorderingConfiguration::CreateLexicalReorderingState(const InputType &input) const { LexicalReorderingState *bwd = NULL, *fwd = NULL; size_t offset = 0; switch(m_direction) { case Backward: case Bidirectional: if (m_phraseBased) { //Same for forward and backward bwd = new PhraseBasedReorderingState(*this, LexicalReorderingConfiguration::Backward, offset); } else { bwd = new HierarchicalReorderingBackwardState(*this, offset); } offset += m_collapseScores ? 1 : GetNumberOfTypes(); if (m_direction == Backward) return bwd; // else fall through case Forward: if (m_phraseBased) { //Same for forward and backward fwd = new PhraseBasedReorderingState(*this, LexicalReorderingConfiguration::Forward, offset); } else { fwd = new HierarchicalReorderingForwardState(*this, input.GetSize(), offset); } offset += m_collapseScores ? 1 : GetNumberOfTypes(); if (m_direction == Forward) return fwd; } return new BidirectionalReorderingState(*this, bwd, fwd, 0); }
LRState * LRModel:: CreateLRState(const InputType &input) const { LRState *bwd = NULL, *fwd = NULL; size_t offset = 0; switch(m_direction) { case Backward: case Bidirectional: if (m_phraseBased) bwd = new PhraseBasedReorderingState(*this, Backward, offset); else bwd = new HReorderingBackwardState(*this, offset); offset += m_collapseScores ? 1 : GetNumberOfTypes(); if (m_direction == Backward) return bwd; // else fall through case Forward: if (m_phraseBased) fwd = new PhraseBasedReorderingState(*this, Forward, offset); else fwd = new HReorderingForwardState(*this, input.GetSize(), offset); offset += m_collapseScores ? 1 : GetNumberOfTypes(); if (m_direction == Forward) return fwd; } return new BidirectionalReorderingState(*this, bwd, fwd, 0); }
size_t LexicalReorderingConfiguration::GetNumScoreComponents() const { size_t score_per_dir = m_collapseScores ? 1 : GetNumberOfTypes(); if (m_direction == Bidirectional) { return 2 * score_per_dir; } else { return score_per_dir; } }
size_t LRModel:: GetNumScoreComponents() const { size_t score_per_dir = m_collapseScores ? 1 : GetNumberOfTypes(); return ((m_direction == Bidirectional) ? 2 * score_per_dir + m_additionalScoreComponents : score_per_dir + m_additionalScoreComponents); }