From 87fc01637076db09b78c3abda5e23c97da12de8a Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@lis-lab.fr>
Date: Wed, 11 Sep 2019 16:51:14 +0200
Subject: [PATCH] Deleted bug when eos is supposed to deleter inter sentecnes
 arcs

---
 transition_machine/src/ActionBank.cpp |  4 ++--
 transition_machine/src/Config.cpp     |  4 ++--
 transition_machine/src/Oracle.cpp     | 15 ++++++++++++++-
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/transition_machine/src/ActionBank.cpp b/transition_machine/src/ActionBank.cpp
index a0a0ebc..09384c1 100644
--- a/transition_machine/src/ActionBank.cpp
+++ b/transition_machine/src/ActionBank.cpp
@@ -389,12 +389,12 @@ std::vector<Action::BasicAction> ActionBank::str2sequence(const std::string & na
 
         for (int i = b0; i >= 0; i--)
         {
-          if (eos[i] == ProgramParameters::sequenceDelimiter)
+          if (eos[i-b0] == ProgramParameters::sequenceDelimiter)
             break;
 
           try
           {
-            int govIndex = i + std::stoi(govs[i]);
+            int govIndex = i + std::stoi(govs[i-b0]);
             if (govIndex <= c.stackGetElem(0))
             {
               simpleBufferWrite(c, "GOV", std::to_string(rootIndex - i), i-b0);
diff --git a/transition_machine/src/Config.cpp b/transition_machine/src/Config.cpp
index 5c0e722..ff3c2bc 100644
--- a/transition_machine/src/Config.cpp
+++ b/transition_machine/src/Config.cpp
@@ -651,10 +651,10 @@ float Config::Tape::getScore()
 {
   float res = 0.0;
 
-  for (int i = 0; i < refSize(); i++)
+  for (int i = 0; i < refSize()-1; i++)
     if (getRef(i-head) == getHyp(i-head))
       res += 1;
 
-  return 100.0*res / refSize();
+  return 100.0*res / (refSize()-1);
 }
 
diff --git a/transition_machine/src/Oracle.cpp b/transition_machine/src/Oracle.cpp
index 9237a14..7600499 100644
--- a/transition_machine/src/Oracle.cpp
+++ b/transition_machine/src/Oracle.cpp
@@ -469,6 +469,9 @@ void Oracle::createDatabase()
         }
       }
 
+      if (c.stackSize() && stackHead == head)
+        cost++;
+
       return eos.getRef(stackHead-head) != ProgramParameters::sequenceDelimiter ? cost : cost+1;
     }
     else if (parts[0] == "WRITE" && parts.size() == 4)
@@ -552,8 +555,18 @@ void Oracle::createDatabase()
 
       return parts.size() == 1 || labels.getRef(0) == parts[1] ? cost : cost+1;
     }
-    else if (parts[0] == ProgramParameters::sequenceDelimiterTape)
+    else if (parts[0] == "EOS")
     {
+      for (int j = 1; j < c.stackSize(); j++)
+      {
+        auto s = c.stackGetElem(j);
+        int noGovs = -1;
+        if (govs.getHyp(s-head).empty())
+          noGovs++;
+        if (noGovs > 0)
+          cost += noGovs;
+      }
+
       return eos.getRef(stackHead-head) == ProgramParameters::sequenceDelimiter ? cost : cost+1;
     }
 
-- 
GitLab