From 70b5d1ddbce169426f7cbdfcfe9186346bea3012 Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Mon, 13 Jan 2014 12:37:12 +0100 Subject: rule word alignment features --- decoder/cdec_ff.cc | 1 + decoder/ff_rules.cc | 23 +++++++++++++++++++++++ decoder/ff_rules.h | 13 +++++++++++++ 3 files changed, 37 insertions(+) (limited to 'decoder') diff --git a/decoder/cdec_ff.cc b/decoder/cdec_ff.cc index d586c1d1..b2541722 100644 --- a/decoder/cdec_ff.cc +++ b/decoder/cdec_ff.cc @@ -45,6 +45,7 @@ void register_feature_functions() { ff_registry.Register("NgramFeatures", new FFFactory()); ff_registry.Register("RuleContextFeatures", new FFFactory()); ff_registry.Register("RuleIdentityFeatures", new FFFactory()); + ff_registry.Register("RuleWordAlignmentFeatures", new FFFactory()); ff_registry.Register("ParseMatchFeatures", new FFFactory); ff_registry.Register("SoftSyntaxFeatures", new FFFactory); ff_registry.Register("SoftSyntaxFeaturesMindist", new FFFactory); diff --git a/decoder/ff_rules.cc b/decoder/ff_rules.cc index 410e083c..7bccf084 100644 --- a/decoder/ff_rules.cc +++ b/decoder/ff_rules.cc @@ -12,6 +12,7 @@ #include "verbose.h" #include "tdict.h" #include "hg.h" +#include "trule.h" using namespace std; @@ -68,6 +69,28 @@ void RuleIdentityFeatures::TraversalFeaturesImpl(const SentenceMetadata& smeta, features->add_value(it->second, 1); } +RuleWordAlignmentFeatures::RuleWordAlignmentFeatures(const std::string& param) { +} + +void RuleWordAlignmentFeatures::PrepareForInput(const SentenceMetadata& smeta) { +} + +void RuleWordAlignmentFeatures::TraversalFeaturesImpl(const SentenceMetadata& smeta, + const Hypergraph::Edge& edge, + const vector& ant_contexts, + SparseVector* features, + SparseVector* estimated_features, + void* context) const { + const TRule& rule = *edge.rule_; + ostringstream os; + vector als = rule.als(); + std::vector::const_iterator xx = als.begin(); + for (; xx != als.end(); ++xx) { + os << "WA:" << TD::Convert(rule.f_[xx->s_]) << ":" << TD::Convert(rule.e_[xx->t_]); + } + features->add_value(FD::Convert(Escape(os.str())), 1); +} + RuleSourceBigramFeatures::RuleSourceBigramFeatures(const std::string& param) { } diff --git a/decoder/ff_rules.h b/decoder/ff_rules.h index f210dc65..324d7a39 100644 --- a/decoder/ff_rules.h +++ b/decoder/ff_rules.h @@ -24,6 +24,19 @@ class RuleIdentityFeatures : public FeatureFunction { mutable std::map rule2_fid_; }; +class RuleWordAlignmentFeatures : public FeatureFunction { + public: + RuleWordAlignmentFeatures(const std::string& param); + protected: + virtual void TraversalFeaturesImpl(const SentenceMetadata& smeta, + const HG::Edge& edge, + const std::vector& ant_contexts, + SparseVector* features, + SparseVector* estimated_features, + void* context) const; + virtual void PrepareForInput(const SentenceMetadata& smeta); +}; + class RuleSourceBigramFeatures : public FeatureFunction { public: RuleSourceBigramFeatures(const std::string& param); -- cgit v1.2.3