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:
authorHieu Hoang <hieuhoang@gmail.com>2012-11-12 23:56:18 +0400
committerHieu Hoang <hieuhoang@gmail.com>2012-11-12 23:56:18 +0400
commit5e3ef23cef6101d2c098eb3445f562e8f595655b (patch)
treeb8c332b6fa82bae84ea4910967a10ba1b08a7107 /moses/TrellisPath.h
parent8c785cff2b1be3cccd76ea9026f71b649762dfc3 (diff)
move moses/src/* to moses/
Diffstat (limited to 'moses/TrellisPath.h')
-rw-r--r--moses/TrellisPath.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/moses/TrellisPath.h b/moses/TrellisPath.h
new file mode 100644
index 000000000..d8005435c
--- /dev/null
+++ b/moses/TrellisPath.h
@@ -0,0 +1,126 @@
+// $Id$
+
+/***********************************************************************
+Moses - factored phrase-based language decoder
+Copyright (C) 2006 University of Edinburgh
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+***********************************************************************/
+
+#ifndef moses_TrellisPath_h
+#define moses_TrellisPath_h
+
+#include <iostream>
+#include <vector>
+#include <limits>
+#include "Hypothesis.h"
+#include "TypeDef.h"
+
+namespace Moses
+{
+
+class TrellisPathCollection;
+class TrellisPathList;
+
+/** Encapsulate the set of hypotheses/arcs that goes from decoding 1 phrase to all the source phrases
+ * to reach a final translation. For the best translation, this consist of all hypotheses, for the other
+ * n-best paths, the node on the path can consist of hypotheses or arcs.
+ * Used by phrase-based decoding
+ */
+class TrellisPath
+{
+ friend std::ostream& operator<<(std::ostream&, const TrellisPath&);
+ friend class Manager;
+
+protected:
+ std::vector<const Hypothesis *> m_path; //< list of hypotheses/arcs
+ size_t m_prevEdgeChanged; /**< the last node that was wiggled to create this path
+ , or NOT_FOUND if this path is the best trans so consist of only hypos
+ */
+
+ ScoreComponentCollection m_scoreBreakdown;
+ float m_totalScore;
+
+ //Used by Manager::LatticeSample()
+ TrellisPath(const std::vector<const Hypothesis*> edges);
+
+ void InitScore();
+
+public:
+ TrellisPath(); // not implemented
+
+ //! create path OF pure hypo
+ TrellisPath(const Hypothesis *hypo);
+
+ /** create path from another path, deviate at edgeIndex by using arc instead,
+ * which may change other hypo back from there
+ */
+ TrellisPath(const TrellisPath &copy, size_t edgeIndex, const Hypothesis *arc);
+
+ //! get score for this path throught trellis
+ inline float GetTotalScore() const { return m_totalScore; }
+
+ /** list of each hypo/arcs in path. For anything other than the best hypo, it is not possible just to follow the
+ * m_prevHypo variable in the hypothesis object
+ */
+ inline const std::vector<const Hypothesis *> &GetEdges() const
+ {
+ return m_path;
+ }
+
+ inline size_t GetSize() const
+ {
+ return m_path.size();
+ }
+
+ //! create a set of next best paths by wiggling 1 of the node at a time.
+ void CreateDeviantPaths(TrellisPathCollection &pathColl) const;
+
+ //! create a list of next best paths by wiggling 1 of the node at a time.
+ void CreateDeviantPaths(TrellisPathList &pathColl) const;
+
+ inline const ScoreComponentCollection &GetScoreBreakdown() const {
+ return m_scoreBreakdown;
+ }
+
+ //! get target words range of the hypo within n-best trellis. not necessarily the same as hypo.GetCurrTargetWordsRange()
+ WordsRange GetTargetWordsRange(const Hypothesis &hypo) const;
+
+ Phrase GetTargetPhrase() const;
+ Phrase GetSurfacePhrase() const;
+
+ TO_STRING();
+
+};
+
+// friend
+inline std::ostream& operator<<(std::ostream& out, const TrellisPath& path)
+{
+ const size_t sizePath = path.m_path.size();
+ for (int pos = (int) sizePath - 1 ; pos >= 0 ; pos--) {
+ const Hypothesis *edge = path.m_path[pos];
+ const WordsRange &sourceRange = edge->GetCurrSourceWordsRange();
+ out << edge->GetId() << " " << sourceRange.GetStartPos() << "-" << sourceRange.GetEndPos() << ", ";
+ }
+ // scores
+ out << " total=" << path.GetTotalScore()
+ << " " << path.GetScoreBreakdown()
+ << std::endl;
+
+ return out;
+}
+
+}
+#endif