From 6a9e3b3217ef38f14ae306cb4e686d9e77f1d851 Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@etu.univ-amu.fr>
Date: Fri, 14 Dec 2018 14:32:55 +0100
Subject: [PATCH] Added a way to specify the .dict file as a program parameter

---
 maca_common/include/ProgramParameters.hpp    | 1 +
 maca_common/src/ProgramParameters.cpp        | 1 +
 trainer/src/macaon_train.cpp                 | 3 +++
 transition_machine/src/TransitionMachine.cpp | 5 ++++-
 4 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/maca_common/include/ProgramParameters.hpp b/maca_common/include/ProgramParameters.hpp
index e3aa19f..14d920f 100644
--- a/maca_common/include/ProgramParameters.hpp
+++ b/maca_common/include/ProgramParameters.hpp
@@ -53,6 +53,7 @@ struct ProgramParameters
   static std::string classifierName;
   static int batchSize;
   static std::string loss;
+  static std::string dicts;
 
   private :
 
diff --git a/maca_common/src/ProgramParameters.cpp b/maca_common/src/ProgramParameters.cpp
index c7c56d7..cd88256 100644
--- a/maca_common/src/ProgramParameters.cpp
+++ b/maca_common/src/ProgramParameters.cpp
@@ -25,6 +25,7 @@ std::string ProgramParameters::devFilename;
 std::string ProgramParameters::devName;
 std::string ProgramParameters::lang;
 std::string ProgramParameters::optimizer;
+std::string ProgramParameters::dicts;
 int ProgramParameters::nbIter;
 int ProgramParameters::seed;
 bool ProgramParameters::removeDuplicates;
diff --git a/trainer/src/macaon_train.cpp b/trainer/src/macaon_train.cpp
index 62d1e07..ab8111c 100644
--- a/trainer/src/macaon_train.cpp
+++ b/trainer/src/macaon_train.cpp
@@ -41,6 +41,8 @@ po::options_description getOptionsDescription()
     ("help,h", "Produce this help message")
     ("debug,d", "Print infos on stderr")
     ("printEntropy", "Print mean entropy and standard deviation accross sequences")
+    ("dicts", po::value<std::string>()->default_value(""),
+      "The .dict file describing all the dictionaries to be used in the experiement. By default the filename specified in the .tm file will be used")
     ("optimizer", po::value<std::string>()->default_value("amsgrad"),
       "The learning algorithm to use : amsgrad | adam | sgd")
     ("loss", po::value<std::string>()->default_value("neglogsoftmax"),
@@ -265,6 +267,7 @@ int main(int argc, char * argv[])
   ProgramParameters::beta2 = vm["b2"].as<float>();
   ProgramParameters::bias = vm["bias"].as<float>();
   ProgramParameters::optimizer = vm["optimizer"].as<std::string>();
+  ProgramParameters::dicts = vm["dicts"].as<std::string>();
   ProgramParameters::loss = vm["loss"].as<std::string>();
   ProgramParameters::dynamicEpoch = vm["epochd"].as<int>();
   ProgramParameters::dynamicProbability = vm["proba"].as<float>();
diff --git a/transition_machine/src/TransitionMachine.cpp b/transition_machine/src/TransitionMachine.cpp
index e3f8f93..6319292 100644
--- a/transition_machine/src/TransitionMachine.cpp
+++ b/transition_machine/src/TransitionMachine.cpp
@@ -33,7 +33,10 @@ TransitionMachine::TransitionMachine(bool trainMode)
   if(fscanf(fd, "Dicts : %[^\n]\n", buffer) != 1)
     badFormatAndAbort(ERRINFO);
 
-  Dict::readDicts(ProgramParameters::expPath, ProgramParameters::expPath + buffer, trainMode);
+  if (ProgramParameters::dicts.empty())
+    ProgramParameters::dicts = ProgramParameters::expPath + buffer;
+
+  Dict::readDicts(ProgramParameters::expPath, ProgramParameters::dicts, trainMode);
 
   // Reading %CLASSIFIERS
   if(fscanf(fd, "%%%s\n", buffer) != 1 || buffer != std::string("CLASSIFIERS"))
-- 
GitLab