From ffd4acfe5b84f413c66af6ec5a76bdbc0d3aa9e8 Mon Sep 17 00:00:00 2001 From: "graehl@gmail.com" Date: Sun, 8 Aug 2010 08:49:13 +0000 Subject: cfg git-svn-id: https://ws10smt.googlecode.com/svn/trunk@493 ec762483-ff6d-05da-a07a-a48fb63a330f --- decoder/cfg.cc | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 decoder/cfg.cc (limited to 'decoder/cfg.cc') diff --git a/decoder/cfg.cc b/decoder/cfg.cc new file mode 100755 index 00000000..0f20ba0f --- /dev/null +++ b/decoder/cfg.cc @@ -0,0 +1,42 @@ +#include "cfg.h" +#include "hg.h" + +using namespace std; + +void CFG::Init(Hypergraph const& hg,bool target_side,bool copy_features,bool push_weights) { + hg_=&hg; + Hypergraph::NodeProbs np; + goal_inside=hg.ComputeNodeViterbi(&np); + pushed_inside=push_weights ? goal_inside : prob_t(1); + int nn=hg.nodes_.size(),ne=hg.edges_.size(); + nts.resize(nn); + rules.resize(ne); + for (int i=0;i const& rule_rhs=target_side?er.e():er.f(); + RHS &rhs=cfgr.rhs; + int nr=rule_rhs.size(); + rhs.resize(nr); + prob_t &crp=cfgr.p; + crp=e.edge_prob_; + cfgr.lhs=e.head_node_; +#if CFG_DEBUG + cfgr.rule=e.rule_; +#endif + if (copy_features) cfgr.f=e.feature_values_; + if (push_weights) crp /=np[e.head_node_]; + for (int j=0;j0) + rhs[j]=w; + else { + int n=e.tail_nodes_[-w]; + if (push_weights) crp*=np[n]; + rhs[j]=n; + } + } + } +} -- cgit v1.2.3