|
|
|
|
|
#pragma once |
|
|
|
|
|
#include <string> |
|
|
#include <map> |
|
|
#include <vector> |
|
|
|
|
|
#ifdef WITH_THREADS |
|
|
#include <boost/thread.hpp> |
|
|
#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 <boost/shared_ptr.hpp> |
|
|
#include <xmlrpc-c/base.hpp> |
|
|
|
|
|
#include "Translator.h" |
|
|
|
|
|
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<std::string, xmlrpc_c::value> m_retData; |
|
|
std::map<uint32_t,float> m_bias; |
|
|
|
|
|
Translator* m_translator; |
|
|
std::string m_source_string, m_target_string; |
|
|
bool m_withAlignInfo; |
|
|
bool m_withWordAlignInfo; |
|
|
bool m_withGraphInfo; |
|
|
bool m_withTopts; |
|
|
bool m_withScoreBreakdown; |
|
|
uint64_t m_session_id; |
|
|
|
|
|
void |
|
|
parse_request(); |
|
|
|
|
|
void |
|
|
parse_request(std::map<std::string, xmlrpc_c::value> const& req); |
|
|
|
|
|
virtual void |
|
|
run_chart_decoder(); |
|
|
|
|
|
virtual void |
|
|
run_phrase_decoder(); |
|
|
|
|
|
void |
|
|
pack_hypothesis(const Moses::Manager& manager, |
|
|
std::vector<Moses::Hypothesis const* > const& edges, |
|
|
std::string const& key, |
|
|
std::map<std::string, xmlrpc_c::value> & dest) const; |
|
|
|
|
|
void |
|
|
pack_hypothesis(const Moses::Manager& manager, Moses::Hypothesis const* h, |
|
|
std::string const& key, |
|
|
std::map<std::string, xmlrpc_c::value> & dest) const; |
|
|
|
|
|
void |
|
|
add_phrase_aln_info(Moses::Hypothesis const& h, |
|
|
std::vector<xmlrpc_c::value>& 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<std::string, xmlrpc_c::value>& retData); |
|
|
void |
|
|
outputNBest(Moses::Manager const& manager, |
|
|
std::map<std::string, xmlrpc_c::value>& retData); |
|
|
|
|
|
void |
|
|
insertTranslationOptions(Moses::Manager& manager, |
|
|
std::map<std::string, xmlrpc_c::value>& retData); |
|
|
protected: |
|
|
TranslationRequest(xmlrpc_c::paramList const& paramList, |
|
|
boost::condition_variable& cond, |
|
|
boost::mutex& mut); |
|
|
|
|
|
public: |
|
|
|
|
|
static |
|
|
boost::shared_ptr<TranslationRequest> |
|
|
create(Translator* translator, |
|
|
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<std::string, xmlrpc_c::value> const& |
|
|
GetRetData() { |
|
|
return m_retData; |
|
|
} |
|
|
|
|
|
void |
|
|
Run(); |
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
|