00001 #pragma once
00002
00003 #include <string>
00004 #include "lm/model.hh"
00005
00006 namespace Moses
00007 {
00008
00009 class KenDsgBase
00010 {
00011 public:
00012 virtual ~KenDsgBase() {}
00013
00014 virtual float Score(const lm::ngram::State&, StringPiece,
00015 lm::ngram::State&) const = 0;
00016
00017 virtual const lm::ngram::State &BeginSentenceState() const = 0;
00018
00019 virtual const lm::ngram::State &NullContextState() const = 0;
00020
00021 virtual float ScoreEndSentence(const lm::ngram::State &in_state, lm::ngram::State &out_state) const = 0;
00022 };
00023
00024 template <class KenModel>
00025 class KenDsg : public KenDsgBase
00026 {
00027 public:
00028 KenDsg(const char *file, const lm::ngram::Config &config)
00029 : m_kenlm(file, config) {}
00030
00031 float Score(const lm::ngram::State &in_state,
00032 StringPiece word,
00033 lm::ngram::State &out_state) const {
00034 return m_kenlm.Score(in_state, m_kenlm.GetVocabulary().Index(word),
00035 out_state);
00036 }
00037
00038 const lm::ngram::State &BeginSentenceState() const {
00039 return m_kenlm.BeginSentenceState();
00040 }
00041
00042 const lm::ngram::State &NullContextState() const {
00043 return m_kenlm.NullContextState();
00044 }
00045
00046 float ScoreEndSentence(const lm::ngram::State &in_state, lm::ngram::State &out_state) const {
00047 return m_kenlm.Score(in_state, m_kenlm.GetVocabulary().EndSentence(), out_state);
00048 }
00049
00050
00051 private:
00052 KenModel m_kenlm;
00053 };
00054
00055 typedef KenDsgBase DsgLM;
00056
00057 DsgLM* ConstructDsgLM(const char *file);
00058
00059
00060 }