|
#pragma once |
|
|
|
#include <string> |
|
#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 KenModel> |
|
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); |
|
|
|
|
|
} |
|
|