diff options
author | Patrick Simianer <p@simianer.de> | 2013-11-26 11:11:17 +0100 |
---|---|---|
committer | Patrick Simianer <p@simianer.de> | 2013-11-26 11:11:17 +0100 |
commit | a5b4f06838585874f200c94028cd4d41d54c4f76 (patch) | |
tree | a9248cb9c17e5b44f1e6758580befb8ef8bef08a /decoder/cfg_format.h | |
parent | 4fffd2e746a4d6b643d35ae3fc4b374c770727c0 (diff) | |
parent | b6c44f82ffca74cc38cf6039ac9ab3c2c66fd5d6 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'decoder/cfg_format.h')
-rw-r--r-- | decoder/cfg_format.h | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/decoder/cfg_format.h b/decoder/cfg_format.h deleted file mode 100644 index d12da261..00000000 --- a/decoder/cfg_format.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef CFG_FORMAT_H -#define CFG_FORMAT_H - -#include <iostream> -#include <string> -#include "wordid.h" -#include "feature_vector.h" -#include "program_options.h" - -struct CFGFormat { - bool identity_scfg; - bool features; - bool logprob_feat; - bool comma_nt; - bool nt_span; - std::string goal_nt_name; - std::string nt_prefix; - std::string logprob_feat_name; - std::string partsep; - bool goal_nt() const { return !goal_nt_name.empty(); } - template <class Opts> // template to support both printable_opts and boost nonprintable - void AddOptions(Opts *opts) { - //using namespace boost::program_options; - //using namespace std; - opts->add_options() - ("identity_scfg",defaulted_value(&identity_scfg),"output an identity SCFG: add an identity target side - '[X12] ||| [X13,1] a ||| [1] a ||| feat= ...' - the redundant target '[1] a |||' is omitted otherwise.") - ("features",defaulted_value(&features),"print the CFG feature vector") - ("logprob_feat",defaulted_value(&logprob_feat),"print a LogProb=-1.5 feature irrespective of --features.") - ("logprob_feat_name",defaulted_value(&logprob_feat_name),"alternate name for the LogProb feature") - ("cfg_comma_nt",defaulted_value(&comma_nt),"if false, omit the usual [NP,1] ',1' variable index in the source side") - ("goal_nt_name",defaulted_value(&goal_nt_name),"if nonempty, the first production will be '[goal_nt_name] ||| [x123] ||| LogProb=y' where x123 is the actual goal nt, and y is the pushed prob, if any") - ("nt_prefix",defaulted_value(&nt_prefix),"NTs are [<nt_prefix>123] where 123 is the node number starting at 0, and the highest node (last in file) is the goal node in an acyclic hypergraph") - ("nt_span",defaulted_value(&nt_span),"prefix A(i,j) for NT coming from hypergraph node with category A on span [i,j). this is after --nt_prefix if any") - ; - } - - void print(std::ostream &o) const { - o<<"["; - if (identity_scfg) - o<<"Identity SCFG "; - if (features) - o<<"+Features "; - if (logprob_feat) - o<<logprob_feat_name<<"(logprob) "; - if (nt_span) - o<<"named-NTs "; - if (comma_nt) - o<<",N "; - o << "CFG output format"; - o<<"]"; - } - friend inline std::ostream &operator<<(std::ostream &o,CFGFormat const& me) { - me.print(o); return o; - } - - void Validate() { } - template<class CFG> - void print_source_nt(std::ostream &o,CFG const&cfg,int id,int position=1) const { - o<<'['; - print_nt_name(o,cfg,id); - if (comma_nt) o<<','<<position; - o<<']'; - } - - template <class CFG> - void print_nt_name(std::ostream &o,CFG const& cfg,int id) const { - o<<nt_prefix; - if (nt_span) - cfg.print_nt_name(o,id); - else - o<<id; - } - - template <class CFG> - void print_lhs(std::ostream &o,CFG const& cfg,int id) const { - o<<'['; - print_nt_name(o,cfg,id); - o<<']'; - } - - template <class CFG,class Iter> - void print_rhs(std::ostream &o,CFG const&cfg,Iter begin,Iter end) const { - o<<partsep; - int pos=0; - for (Iter i=begin;i!=end;++i) { - WordID w=*i; - if (i!=begin) o<<' '; - if (w>0) o << TD::Convert(w); - else print_source_nt(o,cfg,-w,++pos); - } - if (identity_scfg) { - o<<partsep; - int pos=0; - for (Iter i=begin;i!=end;++i) { - WordID w=*i; - if (i!=begin) o<<' '; - if (w>0) o << TD::Convert(w); - else o << '['<<++pos<<']'; - } - } - } - - void print_features(std::ostream &o,prob_t p,SparseVector<double> const& fv=SparseVector<double>()) const { - bool logp=(logprob_feat && p!=prob_t::One()); - if (features || logp) { - o << partsep; - if (logp) - o << logprob_feat_name<<'='<<log(p)<<' '; - if (features) - o << fv; - } - } - - //TODO: default to no nt names (nt_span=0) - void set_defaults() { - identity_scfg=false; - features=true; - logprob_feat=true; - comma_nt=true; - goal_nt_name="S"; - logprob_feat_name="LogProb"; - nt_prefix=""; - partsep=" ||| "; - nt_span=true; - } - - CFGFormat() { - set_defaults(); - } -}; - - - -#endif |