// -*- c++ -*- #pragma once #include #include #include #ifdef WITH_THREADS #include #endif #include "moses/Util.h" #include "moses/ChartManager.h" #include "moses/Hypothesis.h" #include "moses/Manager.h" #include "moses/StaticData.h" #include "moses/ThreadPool.h" #include "moses/TranslationModel/PhraseDictionaryMultiModel.h" #include "moses/TreeInput.h" #include "moses/TranslationTask.h" #include #include namespace MosesServer { class TranslationRequest : public virtual Moses::TranslationTask { boost::condition_variable& m_cond; boost::mutex& m_mutex; bool m_done; xmlrpc_c::paramList const& m_paramList; std::map m_retData; std::map m_bias; // for biased sampling std::string m_source_string, m_target_string; bool m_withAlignInfo; bool m_withWordAlignInfo; bool m_withGraphInfo; bool m_withTopts; bool m_reportAllFactors; bool m_nbestDistinct; bool m_withScoreBreakdown; size_t m_nbestSize; void parse_request(); void parse_request(std::map const& req); virtual void run_chart_decoder(); virtual void run_phrase_decoder(); void pack_hypothesis(std::vector const& edges, std::string const& key, std::map & dest) const; void pack_hypothesis(Moses::Hypothesis const* h, std::string const& key, std::map & dest) const; void output_phrase(std::ostream& out, Moses::Phrase const& phrase) const; void add_phrase_aln_info(Moses::Hypothesis const& h, std::vector& aInfo) const; void outputChartHypo(std::ostream& out, const Moses::ChartHypothesis* hypo); bool compareSearchGraphNode(const Moses::SearchGraphNode& a, const Moses::SearchGraphNode& b); void insertGraphInfo(Moses::Manager& manager, std::map& retData); void outputNBest(Moses::Manager const& manager, std::map& retData); void insertTranslationOptions(Moses::Manager& manager, std::map& retData); protected: TranslationRequest(xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut); public: static boost::shared_ptr create(xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut); virtual bool DeleteAfterExecution() { return false; } bool IsDone() const { return m_done; } std::map const& GetRetData() { return m_retData; } void Run(); }; }