From fb515d6fe01c65c924d0806619fa938688335579 Mon Sep 17 00:00:00 2001 From: redpony Date: Tue, 29 Jun 2010 21:28:11 +0000 Subject: add joshua visualization support git-svn-id: https://ws10smt.googlecode.com/svn/trunk@69 ec762483-ff6d-05da-a07a-a48fb63a330f --- decoder/viterbi.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'decoder/viterbi.cc') diff --git a/decoder/viterbi.cc b/decoder/viterbi.cc index 82b2ce6d..582dc5b2 100644 --- a/decoder/viterbi.cc +++ b/decoder/viterbi.cc @@ -1,5 +1,6 @@ #include "viterbi.h" +#include #include #include "hg.h" @@ -37,3 +38,33 @@ int ViterbiPathLength(const Hypergraph& hg) { return len; } +// create a strings of the form (S (X the man) (X said (X he (X would (X go))))) +struct JoshuaVisTraversal { + JoshuaVisTraversal() : left("("), space(" "), right(")") {} + const std::string left; + const std::string space; + const std::string right; + void operator()(const Hypergraph::Edge& edge, + const std::vector*>& ants, + std::vector* result) const { + std::vector tmp; + edge.rule_->ESubstitute(ants, &tmp); + const std::string cat = TD::Convert(edge.rule_->GetLHS() * -1); + if (cat == "Goal") + result->swap(tmp); + else { + ostringstream os; + os << left << cat << '{' << edge.i_ << '-' << edge.j_ << '}' + << space << TD::GetString(tmp) << right; + TD::ConvertSentence(os.str(), + result); + } + } +}; + +string JoshuaVisualizationString(const Hypergraph& hg) { + vector tmp; + const prob_t p = Viterbi, JoshuaVisTraversal, prob_t, EdgeProb>(hg, &tmp); + return TD::GetString(tmp); +} + -- cgit v1.2.3