#include "mwe.h" #include <boost/algorithm/string.hpp> namespace Corpus2{ LexicalUnit::LexicalUnit(const std::string &base, boost::shared_ptr<Wccl::Operator<Wccl::Bool> > condition, boost::shared_ptr<Wccl::Operator<Wccl::Bool> > head_cond, std::map<std::string, std::string> variables) : condition_(condition), head_cond_(head_cond), variables_(variables), base_(base), nowhere_(Wccl::Position()) { // noop } FixedLU::FixedLU(const std::string &base, boost::shared_ptr<Wccl::Operator<Wccl::Bool> > condition, boost::shared_ptr<Wccl::Operator<Wccl::Bool> > head_cond, std::map<std::string, std::string> variables) : LexicalUnit(base, condition, head_cond, variables) { } bool FixedLU::IsHere(const Wccl::SentenceContext &sc, std::set<size_t> &out_position) { boost::shared_ptr<const Wccl::Bool> pResult = condition_->apply(sc); if(pResult->get_value() == false) return false; foreach(const std::string&varname, condition_->valid_variable_names()){ if(boost::algorithm::starts_with(varname, "Pos")){ Wccl::Position pos = condition_->get<Wccl::Position>(varname); if(pos.equals(nowhere_)){ std::string errmsg("Position for found MWE cannot be zero."); errmsg += " Offending unit: " + base_; throw Wccl::WcclError(errmsg); } out_position.insert( sc.get_abs_position(pos) ); } } return true; } }//ns Corpus2