#ifndef _TRANSLATION_TABLE_ #define _TRANSLATION_TABLE_ #include #include #include #include #include using namespace std; namespace fs = boost::filesystem; namespace extractor { typedef boost::hash> PairHash; class Alignment; class DataArray; /** * Bilexical table with conditional probabilities. */ class TranslationTable { public: TranslationTable( shared_ptr source_data_array, shared_ptr target_data_array, shared_ptr alignment); virtual ~TranslationTable(); // Returns p(e | f). virtual double GetTargetGivenSourceScore(const string& source_word, const string& target_word); // Returns p(f | e). virtual double GetSourceGivenTargetScore(const string& source_word, const string& target_word); void WriteBinary(const fs::path& filepath) const; protected: TranslationTable(); private: // Increment links count for the given (f, e) word pair. void IncrementLinksCount( unordered_map& source_links_count, unordered_map& target_links_count, unordered_map, int, PairHash>& links_count, int source_word_id, int target_word_id) const; shared_ptr source_data_array; shared_ptr target_data_array; unordered_map, pair, PairHash> translation_probabilities; }; } // namespace extractor #endif