00001
00002 #include "SyntaxOptions.h"
00003 #include <vector>
00004 #include <iostream>
00005 #include "moses/StaticData.h"
00006 #include "moses/TypeDef.h"
00007 #include "moses/Factor.h"
00008 #include "moses/InputFileStream.h"
00009
00010 namespace Moses {
00011
00012 SyntaxOptions::
00013 SyntaxOptions()
00014 : s2t_parsing_algo(RecursiveCYKPlus)
00015 , default_non_term_only_for_empty_range(false)
00016 , source_label_overlap(SourceLabelOverlapAdd)
00017 , rule_limit(DEFAULT_MAX_TRANS_OPT_SIZE)
00018 { }
00019
00020 bool
00021 SyntaxOptions::
00022 init(Parameter const& param)
00023 {
00024 param.SetParameter(rule_limit, "rule-limit", DEFAULT_MAX_TRANS_OPT_SIZE);
00025 param.SetParameter(s2t_parsing_algo, "s2t-parsing-algorithm",
00026 RecursiveCYKPlus);
00027 param.SetParameter(default_non_term_only_for_empty_range,
00028 "default-non-term-for-empty-range-only", false);
00029 param.SetParameter(source_label_overlap, "source-label-overlap",
00030 SourceLabelOverlapAdd);
00031 return true;
00032 }
00033
00034 void
00035 SyntaxOptions::
00036 LoadNonTerminals(Parameter const& param, FactorCollection& factorCollection)
00037 {
00038 using namespace std;
00039 string dfltNonTerm;
00040 param.SetParameter<string>(dfltNonTerm, "non-terminals", "X");
00041
00042 const Factor *srcFactor = factorCollection.AddFactor(Input, 0, dfltNonTerm, true);
00043 input_default_non_terminal.SetFactor(0, srcFactor);
00044 input_default_non_terminal.SetIsNonTerminal(true);
00045
00046 const Factor *trgFactor = factorCollection.AddFactor(Output, 0, dfltNonTerm, true);
00047 output_default_non_terminal.SetFactor(0, trgFactor);
00048 output_default_non_terminal.SetIsNonTerminal(true);
00049
00050
00051 const PARAM_VEC *params = param.GetParam("unknown-lhs");
00052 if (params == NULL || params->size() == 0) {
00053 UnknownLHSEntry entry(dfltNonTerm, 0.0f);
00054 unknown_lhs.push_back(entry);
00055 } else {
00056 const string &filePath = params->at(0);
00057 InputFileStream inStream(filePath);
00058 string line;
00059 while(getline(inStream, line)) {
00060 vector<string> tokens = Tokenize(line);
00061 UTIL_THROW_IF2(tokens.size() != 2, "Incorrect unknown LHS format: " << line);
00062 UnknownLHSEntry entry(tokens[0], Scan<float>(tokens[1]));
00063 unknown_lhs.push_back(entry);
00064 factorCollection.AddFactor(Output, 0, tokens[0], true);
00065 }
00066 }
00067 }
00068
00069 #ifdef HAVE_XMLRPC_C
00070 bool
00071 SyntaxOptions::
00072 update(std::map<std::string,xmlrpc_c::value>const& param)
00073 {
00074 typedef std::map<std::string, xmlrpc_c::value> params_t;
00075
00076
00077
00078 return true;
00079 }
00080 #else
00081 bool
00082 SyntaxOptions::
00083 update(std::map<std::string,xmlrpc_c::value>const& param)
00084 {}
00085 #endif
00086
00087 }