//TODO this should be a factory function! TranslationOption::TranslationOption(const WordsRange &wordsRange , const TargetPhrase &targetPhrase) : m_targetPhrase(targetPhrase) , m_inputPath(NULL) , m_sourceWordsRange(wordsRange) , m_futureScore(targetPhrase.GetFutureScore()) { }
template <class Model> void Fill<Model>::AddPhraseOOV(TargetPhrase &phrase, std::list<TargetPhraseCollection*> &, const WordsRange &) { std::vector<lm::WordIndex> words; CHECK(phrase.GetSize() <= 1); if (phrase.GetSize()) words.push_back(Convert(phrase.GetWord(0))); search::PartialEdge edge(edges_.AllocateEdge(0)); // Appears to be a bug that FutureScore does not already include language model. search::ScoreRuleRet scored(search::ScoreRule(context_.LanguageModel(), words, edge.Between())); edge.SetScore(phrase.GetFutureScore() + scored.prob * context_.LMWeight() + static_cast<search::Score>(scored.oov) * oov_weight_); search::Note note; note.vp = &phrase; edge.SetNote(note); edges_.AddEdge(edge); }
bool operator() (const TargetPhrase &a, const TargetPhrase &b) { return a.GetFutureScore() > b.GetFutureScore(); }