Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/moses2/FF/FeatureFunction.cpp')
-rw-r--r--contrib/moses2/FF/FeatureFunction.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/contrib/moses2/FF/FeatureFunction.cpp b/contrib/moses2/FF/FeatureFunction.cpp
new file mode 100644
index 000000000..3326ceaa4
--- /dev/null
+++ b/contrib/moses2/FF/FeatureFunction.cpp
@@ -0,0 +1,85 @@
+/*
+ * FeatureFunction.cpp
+ *
+ * Created on: 23 Oct 2015
+ * Author: hieu
+ */
+#include <string>
+#include <vector>
+#include "FeatureFunction.h"
+#include "../System.h"
+#include "../legacy/Util2.h"
+#include "util/exception.hh"
+
+using namespace std;
+
+namespace Moses2
+{
+
+FeatureFunction::FeatureFunction(size_t startInd, const std::string &line)
+:m_startInd(startInd)
+,m_numScores(1)
+,m_PhraseTableInd(NOT_FOUND)
+,m_tuneable(true)
+{
+ ParseLine(line);
+ //cerr << GetName() << " " << m_startInd << "-" << (m_startInd + m_numScores - 1) << endl;
+}
+
+FeatureFunction::~FeatureFunction()
+{
+ // TODO Auto-generated destructor stub
+}
+
+void FeatureFunction::ParseLine(const std::string &line)
+{
+ vector<string> toks = Tokenize(line);
+ UTIL_THROW_IF2(toks.empty(), "Empty line");
+
+ string nameStub = toks[0];
+
+ set<string> keys;
+
+ for (size_t i = 1; i < toks.size(); ++i) {
+ vector<string> args = TokenizeFirstOnly(toks[i], "=");
+ UTIL_THROW_IF2(args.size() != 2,
+ "Incorrect format for feature function arg: " << toks[i]);
+
+ pair<set<string>::iterator, bool> ret = keys.insert(args[0]);
+ UTIL_THROW_IF2(!ret.second, "Duplicate key in line " << line);
+
+ if (args[0] == "num-features") {
+ m_numScores = Scan<size_t>(args[1]);
+ }
+ else if (args[0] == "name") {
+ m_name = args[1];
+ }
+ else {
+ m_args.push_back(args);
+ }
+ }
+}
+
+void FeatureFunction::ReadParameters()
+{
+ while (!m_args.empty()) {
+ const vector<string> &args = m_args[0];
+ SetParameter(args[0], args[1]);
+
+ m_args.erase(m_args.begin());
+ }
+}
+
+void FeatureFunction::SetParameter(const std::string& key,
+ const std::string& value)
+{
+ if (key == "tuneable") {
+ m_tuneable = Scan<bool>(value);
+ }
+ else {
+ UTIL_THROW2(GetName() << ": Unknown argument " << key << "=" << value);
+ }
+}
+
+}
+