#pragma once #include #include "lm/model.hh" namespace Moses { class KenOSMBase { public: virtual ~KenOSMBase() {} virtual float Score(const lm::ngram::State&, StringPiece, lm::ngram::State&) const = 0; virtual const lm::ngram::State &BeginSentenceState() const = 0; virtual const lm::ngram::State &NullContextState() const = 0; }; template class KenOSM : public KenOSMBase { public: KenOSM(const char *file, const lm::ngram::Config &config) : m_kenlm(file, config) {} float Score(const lm::ngram::State &in_state, StringPiece word, lm::ngram::State &out_state) const { return m_kenlm.Score(in_state, m_kenlm.GetVocabulary().Index(word), out_state); } const lm::ngram::State &BeginSentenceState() const { return m_kenlm.BeginSentenceState(); } const lm::ngram::State &NullContextState() const { return m_kenlm.NullContextState(); } private: KenModel m_kenlm; }; typedef KenOSMBase OSMLM; OSMLM* ConstructOSMLM(const char *file, util::LoadMethod load_method); } // namespace