summaryrefslogtreecommitdiff
path: root/decoder
diff options
context:
space:
mode:
authorPatrick Simianer <p@simianer.de>2014-01-13 12:37:12 +0100
committerPatrick Simianer <p@simianer.de>2014-01-13 12:37:12 +0100
commit926fb52bfc85dcd58156916ca2536ee32c719954 (patch)
tree55b87211d25ba4b31dc1c2ae4868e887b06d7ed2 /decoder
parent421d996736bf1d947d78cb64925c2987b82feb3b (diff)
rule word alignment features
Diffstat (limited to 'decoder')
-rw-r--r--decoder/cdec_ff.cc1
-rw-r--r--decoder/ff_rules.cc23
-rw-r--r--decoder/ff_rules.h13
3 files changed, 37 insertions, 0 deletions
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<NgramDetector>());
ff_registry.Register("RuleContextFeatures", new FFFactory<RuleContextFeatures>());
ff_registry.Register("RuleIdentityFeatures", new FFFactory<RuleIdentityFeatures>());
+ ff_registry.Register("RuleWordAlignmentFeatures", new FFFactory<RuleWordAlignmentFeatures>());
ff_registry.Register("ParseMatchFeatures", new FFFactory<ParseMatchFeatures>);
ff_registry.Register("SoftSyntaxFeatures", new FFFactory<SoftSyntaxFeatures>);
ff_registry.Register("SoftSyntaxFeaturesMindist", new FFFactory<SoftSyntaxFeaturesMindist>);
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<const void*>& ant_contexts,
+ SparseVector<double>* features,
+ SparseVector<double>* estimated_features,
+ void* context) const {
+ const TRule& rule = *edge.rule_;
+ ostringstream os;
+ vector<AlignmentPoint> als = rule.als();
+ std::vector<AlignmentPoint>::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<const TRule*, int> 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<const void*>& ant_contexts,
+ SparseVector<double>* features,
+ SparseVector<double>* estimated_features,
+ void* context) const;
+ virtual void PrepareForInput(const SentenceMetadata& smeta);
+};
+
class RuleSourceBigramFeatures : public FeatureFunction {
public:
RuleSourceBigramFeatures(const std::string& param);