#ifndef _ARC_FF_H_ #define _ARC_FF_H_ #include #include "sparse_vector.h" #include "weights.h" #include "arc_factored.h" struct TaggedSentence; class ArcFeatureFunction { public: virtual ~ArcFeatureFunction(); // called once, per input, before any calls to EdgeFeatures // used to initialize sentence-specific data structures virtual void PrepareForInput(const TaggedSentence& sentence); inline void EgdeFeatures(const TaggedSentence& sentence, short h, short m, SparseVector* features) const { EdgeFeaturesImpl(sentence, h, m, features); } protected: virtual void EdgeFeaturesImpl(const TaggedSentence& sentence, short h, short m, SparseVector* features) const = 0; }; class DistancePenalty : public ArcFeatureFunction { public: DistancePenalty(const std::string& param); protected: virtual void EdgeFeaturesImpl(const TaggedSentence& sentence, short h, short m, SparseVector* features) const; private: const int fidw_, fidr_; }; #endif