Skip to content
Snippets Groups Projects
Commit cee3b953 authored by Bartosz Broda's avatar Bartosz Broda
Browse files

add preliminary impl. of IsHere for fixed LU

parent f02e80f2
No related merge requests found
#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)
{
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
......@@ -16,15 +16,29 @@ public:
boost::shared_ptr<Wccl::Operator<Wccl::Bool> > head_cond,
std::map<std::string, std::string> variables
);
virtual bool IsHere(const Wccl::SentenceContext& sc,
std::set<size_t> &out_position) = 0;
protected:
boost::shared_ptr<Wccl::Operator<Wccl::Bool> > condition_;
boost::shared_ptr<Wccl::Operator<Wccl::Bool> > head_cond_;
std::map<std::string, std::string> variables_;
std::string base_;
const Wccl::Position nowhere_;
};
class FixedLU : public LexicalUnit
{
public:
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
);
virtual bool IsHere(const Wccl::SentenceContext& sc,
std::set<size_t> &out_position);
};
......
......@@ -60,11 +60,9 @@ namespace Corpus2 {
MWEBuilder::BoolOpPtr head = mwe_builder_->get_head_condition(
head_cond_);
//const Corpus2::Tagset& tagset = Corpus2::get_named_tagset(tagset_);
foreach(const std::string&varname, main->valid_variable_names())
if(boost::algorithm::starts_with(varname, "Pos"))
std::cout << "Pozycja: " << varname << std::endl;
//foreach(const std::string&varname, main->valid_variable_names())
//if(boost::algorithm::starts_with(varname, "Pos"))
//std::cout << "Pozycja: " << varname << std::endl;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment