Skip to content
Snippets Groups Projects
Select Git revision
  • fb6645c2d1a9455c9c5686e964beafec60c1b8a0
  • master default protected
  • fix-words-ann
  • wccl-rules-migration
  • develop
5 results

tagrulesequence.cpp

Blame
  • tagrulesequence.cpp 953 B
    #include <libwccl/ops/tagrulesequence.h>
    #include <libpwrutils/foreach.h>
    
    
    namespace Wccl {
    
    Bool TagRuleSequence::execute_once(const boost::shared_ptr<Corpus2::Sentence>& sentence)
    {
    	if(!sentence || sentence->empty()) {
    		throw InvalidArgument(
    				"sentence",
    				"Received an empty sentence.");
    	}
    	Bool changed(false);
    	SentenceContext sc(sentence);
    	while(sc.is_current_inside()) {
    		foreach (TagRule& rule, *this) {
    			if (rule.execute(sc).get_value()) {
    				changed.set_value(true);
    			}
    		}
    		sc.advance();
    	}
    	return changed;
    }
    
    int TagRuleSequence::execute_until_done(const boost::shared_ptr<Corpus2::Sentence>& sentence, int max_iter)
    {
    	if(max_iter < 0) {
    		throw InvalidArgument(
    				"max_iter",
    				"Supplied a negative value for maximum number of iterations.");
    	}
    	int iter_no = 0;
    	while(iter_no < max_iter) {
    		++iter_no;
    		if (!execute_once(sentence).get_value()) {
    			return iter_no;
    		}
    	}
    	return iter_no;
    }
    
    } /* end ns Wccl */