summaryrefslogtreecommitdiff
path: root/rst_parser
diff options
context:
space:
mode:
authorChris Dyer <prguest11@taipan.cs>2012-04-16 19:39:36 +0100
committerChris Dyer <prguest11@taipan.cs>2012-04-16 19:39:36 +0100
commitf2fcf9e8aa0e5dee75fd08ee915488ec1a741975 (patch)
treeca902dff574a0952f081c91417d56312f5113ccf /rst_parser
parentd5a2a9c3bf18c1e414f79a757c1662fe422e2f5c (diff)
feature extraction helper
Diffstat (limited to 'rst_parser')
-rw-r--r--rst_parser/arc_factored.cc21
-rw-r--r--rst_parser/arc_factored.h5
2 files changed, 25 insertions, 1 deletions
diff --git a/rst_parser/arc_factored.cc b/rst_parser/arc_factored.cc
index 44e769b8..34c689f4 100644
--- a/rst_parser/arc_factored.cc
+++ b/rst_parser/arc_factored.cc
@@ -12,6 +12,27 @@ using namespace std;
using namespace std::tr1;
using namespace boost;
+void EdgeSubset::ExtractFeatures(const TaggedSentence& sentence,
+ const std::vector<boost::shared_ptr<ArcFeatureFunction> >& ffs,
+ SparseVector<double>* features) const {
+ SparseVector<weight_t> efmap;
+ for (int i = 0; i < ffs.size(); ++i) {
+ const ArcFeatureFunction& ff= *ffs[i];
+ for (int j = 0; j < h_m_pairs.size(); ++j) {
+ efmap.clear();
+ ff.EgdeFeatures(sentence, h_m_pairs[j].first,
+ h_m_pairs[j].second,
+ &efmap);
+ (*features) += efmap;
+ }
+ for (int j = 0; j < roots.size(); ++j) {
+ efmap.clear();
+ ff.EgdeFeatures(sentence, -1, roots[j], &efmap);
+ (*features) += efmap;
+ }
+ }
+}
+
void ArcFactoredForest::ExtractFeatures(const TaggedSentence& sentence,
const std::vector<boost::shared_ptr<ArcFeatureFunction> >& ffs) {
for (int i = 0; i < ffs.size(); ++i) {
diff --git a/rst_parser/arc_factored.h b/rst_parser/arc_factored.h
index 4de38b66..a271c8d4 100644
--- a/rst_parser/arc_factored.h
+++ b/rst_parser/arc_factored.h
@@ -17,14 +17,17 @@ struct TaggedSentence {
std::vector<WordID> pos;
};
+struct ArcFeatureFunction;
struct EdgeSubset {
EdgeSubset() {}
std::vector<short> roots; // unless multiroot trees are supported, this
// will have a single member
std::vector<std::pair<short, short> > h_m_pairs; // h,m start at 0
+ void ExtractFeatures(const TaggedSentence& sentence,
+ const std::vector<boost::shared_ptr<ArcFeatureFunction> >& ffs,
+ SparseVector<double>* features) const;
};
-struct ArcFeatureFunction;
class ArcFactoredForest {
public:
ArcFactoredForest() : num_words_() {}