From ed77c3a7075f472901fa87696d82d3c24eb10eb0 Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@etu.univ-amu.fr>
Date: Fri, 22 Feb 2019 11:02:27 +0100
Subject: [PATCH] Fixed error related to unused default actions

---
 trainer/src/Trainer.cpp                   | 4 ++++
 transition_machine/include/Classifier.hpp | 4 ++++
 transition_machine/src/Classifier.cpp     | 8 ++++++++
 3 files changed, 16 insertions(+)

diff --git a/trainer/src/Trainer.cpp b/trainer/src/Trainer.cpp
index 16a4362..ca8ef45 100644
--- a/trainer/src/Trainer.cpp
+++ b/trainer/src/Trainer.cpp
@@ -233,6 +233,9 @@ void Trainer::train()
         if (pAction == oAction)
           pActionIsZeroCost = true;
 
+        if (oAction.empty())
+          oAction = tm.getCurrentClassifier()->getDefaultAction();
+
         if (oAction.empty())
         {
           if (trainConfig.endOfTapes())
@@ -241,6 +244,7 @@ void Trainer::train()
               trainConfig.stackPop();
             break;
           }
+
           fprintf(stderr, "ERROR (%s) : Unable to find any zero cost action. Aborting.\n", ERRINFO);
           fprintf(stderr, "State : %s\n", tm.getCurrentState().c_str());
           trainConfig.printForDebug(stderr);
diff --git a/transition_machine/include/Classifier.hpp b/transition_machine/include/Classifier.hpp
index 656d289..338325e 100644
--- a/transition_machine/include/Classifier.hpp
+++ b/transition_machine/include/Classifier.hpp
@@ -77,6 +77,10 @@ class Classifier
 
   public :
 
+  /// @brief If the ActionScript has a default action, get it.
+  ///
+  /// @return The default action name, or an empty string.
+  std::string getDefaultAction() const;
   /// @brief Return how many errors will an action introduce.
   ///
   /// @param config The current config.
diff --git a/transition_machine/src/Classifier.cpp b/transition_machine/src/Classifier.cpp
index a1ecb64..c1c9998 100644
--- a/transition_machine/src/Classifier.cpp
+++ b/transition_machine/src/Classifier.cpp
@@ -260,6 +260,14 @@ std::vector<std::string> Classifier::getZeroCostActions(Config & config)
   return result;
 }
 
+std::string Classifier::getDefaultAction() const
+{
+  if (as->hasDefaultAction)
+    return as->getActionName(0);
+
+  return std::string();
+}
+
 float Classifier::trainOnExample(Config & config, int gold)
 {
   auto fd = fm->getFeatureDescription(config);
-- 
GitLab