#ifndef _RULE_EXTRACTOR_HELPER_H_ #define _RULE_EXTRACTOR_HELPER_H_ #include #include #include using namespace std; namespace extractor { class Alignment; class DataArray; class RuleExtractorHelper { public: RuleExtractorHelper(shared_ptr source_data_array, shared_ptr target_data_array, shared_ptr alignment, int max_rule_span, int max_rule_symbols, bool require_aligned_terminal, bool require_aligned_chunks, bool require_tight_phrases); virtual ~RuleExtractorHelper(); virtual void GetLinksSpans(vector& source_low, vector& source_high, vector& target_low, vector& target_high, int sentence_id) const; virtual bool CheckAlignedTerminals(const vector& matching, const vector& chunklen, const vector& source_low) const; virtual bool CheckTightPhrases(const vector& matching, const vector& chunklen, const vector& source_low) const; virtual bool FindFixPoint( int source_phrase_low, int source_phrase_high, const vector& source_low, const vector& source_high, int& target_phrase_low, int& target_phrase_high, const vector& target_low, const vector& target_high, int& source_back_low, int& source_back_high, int sentence_id, int min_source_gap_size, int min_target_gap_size, int max_new_x, bool allow_low_x, bool allow_high_x, bool allow_arbitrary_expansion) const; virtual bool GetGaps( vector >& source_gaps, vector >& target_gaps, const vector& matching, const vector& chunklen, const vector& source_low, const vector& source_high, const vector& target_low, const vector& target_high, int source_phrase_low, int source_phrase_high, int source_back_low, int source_back_high, int& num_symbols, bool& met_constraints) const; virtual vector GetGapOrder(const vector >& gaps) const; virtual unordered_map GetSourceIndexes( const vector& matching, const vector& chunklen, int starts_with_x) const; protected: RuleExtractorHelper(); private: void FindProjection( int source_phrase_low, int source_phrase_high, const vector& source_low, const vector& source_high, int& target_phrase_low, int& target_phrase_high) const; shared_ptr source_data_array; shared_ptr target_data_array; shared_ptr alignment; int max_rule_span; int max_rule_symbols; bool require_aligned_terminal; bool require_aligned_chunks; bool require_tight_phrases; }; } // namespace extractor #endif