1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#ifndef _ARC_FF_H_
#define _ARC_FF_H_
#include <string>
#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<weight_t>* features) const {
EdgeFeaturesImpl(sentence, h, m, features);
}
protected:
virtual void EdgeFeaturesImpl(const TaggedSentence& sentence,
short h,
short m,
SparseVector<weight_t>* 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<weight_t>* features) const;
private:
const int fidw_, fidr_;
};
#endif
|