00001
00002 #include "SearchOptions.h"
00003
00004 namespace Moses
00005 {
00006
00007 SearchOptions::
00008 SearchOptions()
00009 : algo(Normal)
00010 , stack_size(DEFAULT_MAX_HYPOSTACK_SIZE)
00011 , stack_diversity(0)
00012 , disable_discarding(false)
00013 , max_phrase_length(DEFAULT_MAX_PHRASE_LENGTH)
00014 , max_trans_opt_per_cov(DEFAULT_MAX_TRANS_OPT_SIZE)
00015 , max_partial_trans_opt(DEFAULT_MAX_PART_TRANS_OPT_SIZE)
00016 , beam_width(DEFAULT_BEAM_WIDTH)
00017 , timeout(0)
00018 , consensus(false)
00019 , early_discarding_threshold(DEFAULT_EARLY_DISCARDING_THRESHOLD)
00020 , trans_opt_threshold(DEFAULT_TRANSLATION_OPTION_THRESHOLD)
00021 { }
00022
00023 SearchOptions::
00024 SearchOptions(Parameter const& param)
00025 : stack_diversity(0)
00026 {
00027 init(param);
00028 }
00029
00030 bool
00031 SearchOptions::
00032 init(Parameter const& param)
00033 {
00034 param.SetParameter(algo, "search-algorithm", Normal);
00035 param.SetParameter(stack_size, "stack", DEFAULT_MAX_HYPOSTACK_SIZE);
00036 param.SetParameter(stack_diversity, "stack-diversity", size_t(0));
00037 param.SetParameter(beam_width, "beam-threshold", DEFAULT_BEAM_WIDTH);
00038 param.SetParameter(early_discarding_threshold, "early-discarding-threshold",
00039 DEFAULT_EARLY_DISCARDING_THRESHOLD);
00040 param.SetParameter(timeout, "time-out", 0);
00041 param.SetParameter(segment_timeout, "segment-time-out", 0);
00042 param.SetParameter(max_phrase_length, "max-phrase-length",
00043 DEFAULT_MAX_PHRASE_LENGTH);
00044 param.SetParameter(trans_opt_threshold, "translation-option-threshold",
00045 DEFAULT_TRANSLATION_OPTION_THRESHOLD);
00046 param.SetParameter(max_trans_opt_per_cov, "max-trans-opt-per-coverage",
00047 DEFAULT_MAX_TRANS_OPT_SIZE);
00048 param.SetParameter(max_partial_trans_opt, "max-partial-trans-opt",
00049 DEFAULT_MAX_PART_TRANS_OPT_SIZE);
00050
00051 param.SetParameter(consensus, "consensus-decoding", false);
00052 param.SetParameter(disable_discarding, "disable-discarding", false);
00053
00054
00055 beam_width = TransformScore(beam_width);
00056 trans_opt_threshold = TransformScore(trans_opt_threshold);
00057 early_discarding_threshold = TransformScore(early_discarding_threshold);
00058
00059 return true;
00060 }
00061
00062 bool
00063 is_syntax(SearchAlgorithm algo)
00064 {
00065 return (algo == CYKPlus || algo == ChartIncremental ||
00066 algo == SyntaxS2T || algo == SyntaxT2S ||
00067 algo == SyntaxF2S || algo == SyntaxT2S_SCFG);
00068 }
00069
00070 #ifdef HAVE_XMLRPC_C
00071 bool
00072 SearchOptions::
00073 update(std::map<std::string,xmlrpc_c::value>const& params)
00074 {
00075 typedef std::map<std::string, xmlrpc_c::value> params_t;
00076
00077 params_t::const_iterator si = params.find("search-algorithm");
00078 if (si != params.end())
00079 {
00080
00081 std::string spec = xmlrpc_c::value_string(si->second);
00082 if (spec == "normal" || spec == "0") algo = Normal;
00083 else if (spec == "cube" || spec == "1") algo = CubePruning;
00084 else throw xmlrpc_c::fault("Unsupported search algorithm",
00085 xmlrpc_c::fault::CODE_PARSE);
00086 }
00087
00088 si = params.find("stack");
00089 if (si != params.end()) stack_size = xmlrpc_c::value_int(si->second);
00090
00091 si = params.find("stack-diversity");
00092 if (si != params.end()) stack_diversity = xmlrpc_c::value_int(si->second);
00093
00094 si = params.find("beam-threshold");
00095 if (si != params.end()) beam_width = xmlrpc_c::value_double(si->second);
00096
00097 si = params.find("time-out");
00098 if (si != params.end()) timeout = xmlrpc_c::value_int(si->second);
00099
00100 si = params.find("max-phrase-length");
00101 if (si != params.end()) max_phrase_length = xmlrpc_c::value_int(si->second);
00102
00103 return true;
00104 }
00105 #else
00106 bool
00107 SearchOptions::
00108 update(std::map<std::string,xmlrpc_c::value>const& params)
00109 {}
00110 #endif
00111
00112 }