#include "ff_basic.h" #include "fast_lexical_cast.hpp" #include "hg.h" using namespace std; // Hiero and Joshua use log_10(e) as the value, so I do to WordPenalty::WordPenalty(const string& param) : fid_(FD::Convert("WordPenalty")), value_(-1.0 / log(10)) { if (!param.empty()) { cerr << "Warning WordPenalty ignoring parameter: " << param << endl; } } void WordPenalty::TraversalFeaturesImpl(const SentenceMetadata& smeta, const Hypergraph::Edge& edge, const std::vector& ant_states, SparseVector* features, SparseVector* estimated_features, void* state) const { (void) smeta; (void) ant_states; (void) state; (void) estimated_features; features->set_value(fid_, edge.rule_->EWords() * value_); } SourceWordPenalty::SourceWordPenalty(const string& param) : fid_(FD::Convert("SourceWordPenalty")), value_(-1.0 / log(10)) { if (!param.empty()) { cerr << "Warning SourceWordPenalty ignoring parameter: " << param << endl; } } void SourceWordPenalty::TraversalFeaturesImpl(const SentenceMetadata& smeta, const Hypergraph::Edge& edge, const std::vector& ant_states, SparseVector* features, SparseVector* estimated_features, void* state) const { (void) smeta; (void) ant_states; (void) state; (void) estimated_features; features->set_value(fid_, edge.rule_->FWords() * value_); } ArityPenalty::ArityPenalty(const std::string& param) : value_(-1.0 / log(10)) { string fname = "Arity_"; unsigned MAX=DEFAULT_MAX_ARITY; using namespace boost; if (!param.empty()) MAX=lexical_cast(param); for (unsigned i = 0; i <= MAX; ++i) { WordID fid=FD::Convert(fname+lexical_cast(i)); fids_.push_back(fid); } while (!fids_.empty() && fids_.back()==0) fids_.pop_back(); // pretty up features vector in case FD was frozen. doesn't change anything } void ArityPenalty::TraversalFeaturesImpl(const SentenceMetadata& smeta, const Hypergraph::Edge& edge, const std::vector& ant_states, SparseVector* features, SparseVector* estimated_features, void* state) const { (void) smeta; (void) ant_states; (void) state; (void) estimated_features; unsigned a=edge.Arity(); features->set_value(a