#include <libwccl/values/annotationmatch.h> namespace Wccl { const char* AnnotationMatch::type_name = "AnnotationMatch"; std::string AnnotationMatch::to_raw_string() const { return "ANN[" + position_.to_raw_string() + "," + channel_ + "]"; } std::string AnnotationMatch::var_repr(const std::string &var_name) { return Match::var_repr(var_name); } Position AnnotationMatch::first_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const { size_t fpos = position_.get_value(); const Corpus2::AnnotationChannel& chan = s->get_channel(channel_); int seg = chan.get_segment_at(fpos); if (seg > 0) { for (size_t i = 0; i < fpos; ++i) { if (chan.get_segment_at(i) == seg) { return Position(i); } } return position_; } else { return Position(); } } Position AnnotationMatch::last_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const { size_t fpos = position_.get_value(); const Corpus2::AnnotationChannel& chan = s->get_channel(channel_); int seg = chan.get_segment_at(fpos); if (seg > 0) { for (size_t i = s->size() - 1; i > fpos; --i) { if (chan.get_segment_at(i) == seg) { return Position(i); } } return position_; } else { return Position(); } } } /* end ns Wccl */