diff options
author | Chris Dyer <prguest11@taipan.cs> | 2012-04-16 19:39:36 +0100 |
---|---|---|
committer | Chris Dyer <prguest11@taipan.cs> | 2012-04-16 19:39:36 +0100 |
commit | f2fcf9e8aa0e5dee75fd08ee915488ec1a741975 (patch) | |
tree | ca902dff574a0952f081c91417d56312f5113ccf /rst_parser | |
parent | d5a2a9c3bf18c1e414f79a757c1662fe422e2f5c (diff) |
feature extraction helper
Diffstat (limited to 'rst_parser')
-rw-r--r-- | rst_parser/arc_factored.cc | 21 | ||||
-rw-r--r-- | rst_parser/arc_factored.h | 5 |
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_() {} |