mosesdecoder/moses/parameters/ContextParameters.cpp

53 lines
1.3 KiB
C++
Raw Normal View History

#include "ContextParameters.h"
#include "moses/Util.h"
namespace Moses
{
ContextParameters::
ContextParameters()
: look_ahead(0), look_back(0)
{ }
2015-08-05 04:15:34 +03:00
bool
ContextParameters::
2015-08-05 04:15:34 +03:00
init(Parameter const& params)
{
look_back = look_ahead = 0;
params.SetParameter(context_string, "context-string", std::string(""));
std::string context_window;
params.SetParameter(context_window, "context-window", std::string(""));
if (context_window == "")
2015-08-05 04:15:34 +03:00
return true;
if (context_window.substr(0,3) == "all")
{
look_back = look_ahead = std::numeric_limits<size_t>::max();
2015-08-05 04:15:34 +03:00
return true;
}
size_t p = context_window.find_first_of("0123456789");
if (p == 0)
look_back = look_ahead = atoi(context_window.c_str());
if (p == 1) {
2015-05-13 13:29:16 +03:00
if (context_window[0] == '-')
look_back = atoi(context_window.substr(1).c_str());
else if (context_window[0] == '+')
look_ahead = atoi(context_window.substr(1).c_str());
else
UTIL_THROW2("Invalid specification of context window.");
}
2015-05-13 13:29:16 +03:00
if (p == 2) {
if (context_window.substr(0,2) == "+-" ||
context_window.substr(0,2) == "-+")
look_back = look_ahead = atoi(context_window.substr(p).c_str());
else
UTIL_THROW2("Invalid specification of context window.");
}
2015-08-05 04:15:34 +03:00
return true;
}
}