|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <limits> |
|
#include <iostream> |
|
#include <sstream> |
|
|
|
#include "SingleFactor.h" |
|
#include "PointerState.h" |
|
#include "moses/FF/FFState.h" |
|
#include "moses/TypeDef.h" |
|
#include "moses/Util.h" |
|
#include "moses/FactorCollection.h" |
|
#include "moses/Phrase.h" |
|
#include "moses/StaticData.h" |
|
#include "moses/FactorTypeSet.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses |
|
{ |
|
|
|
LanguageModelSingleFactor::LanguageModelSingleFactor(const std::string &line) |
|
:LanguageModelImplementation(line) |
|
,m_factorType(0) |
|
{ |
|
m_nullContextState = new PointerState(NULL); |
|
m_beginSentenceState = new PointerState(NULL); |
|
} |
|
|
|
LanguageModelSingleFactor::~LanguageModelSingleFactor() |
|
{ |
|
delete m_nullContextState; |
|
delete m_beginSentenceState; |
|
} |
|
|
|
const FFState *LanguageModelSingleFactor::GetNullContextState() const |
|
{ |
|
return m_nullContextState; |
|
} |
|
|
|
const FFState *LanguageModelSingleFactor::GetBeginSentenceState() const |
|
{ |
|
return m_beginSentenceState; |
|
} |
|
|
|
FFState *LanguageModelSingleFactor::NewState(const FFState *from) const |
|
{ |
|
return new PointerState(from ? static_cast<const PointerState*>(from)->lmstate : NULL); |
|
} |
|
|
|
LMResult LanguageModelSingleFactor::GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const |
|
{ |
|
return GetValue(contextFactor, &static_cast<PointerState&>(outState).lmstate); |
|
} |
|
|
|
bool LanguageModelSingleFactor::IsUseable(const FactorMask &mask) const |
|
{ |
|
bool ret = mask[m_factorType]; |
|
return ret; |
|
} |
|
|
|
void LanguageModelSingleFactor::SetParameter(const std::string& key, const std::string& value) |
|
{ |
|
if (key == "factor") { |
|
m_factorType = Scan<FactorType>(value); |
|
} else { |
|
LanguageModelImplementation::SetParameter(key, value); |
|
} |
|
} |
|
|
|
std::string LanguageModelSingleFactor::DebugContextFactor(const std::vector<const Word*> &contextFactor) const |
|
{ |
|
std::string ret; |
|
for (size_t i = 0; i < contextFactor.size(); ++i) { |
|
const Word &word = *contextFactor[i]; |
|
ret += word.ToString(); |
|
} |
|
|
|
return ret; |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|