00001
00002 #pragma once
00003
00004 #include <string>
00005 #include <map>
00006 #include <vector>
00007
00008 #ifdef WITH_THREADS
00009 #include <boost/thread.hpp>
00010 #endif
00011
00012 #include "moses/Util.h"
00013 #include "moses/ChartManager.h"
00014 #include "moses/Hypothesis.h"
00015 #include "moses/Manager.h"
00016 #include "moses/StaticData.h"
00017 #include "moses/ThreadPool.h"
00018 #include "moses/TranslationModel/PhraseDictionaryMultiModel.h"
00019 #include "moses/TreeInput.h"
00020 #include "moses/TranslationTask.h"
00021 #include <boost/shared_ptr.hpp>
00022 #include <xmlrpc-c/base.hpp>
00023
00024 #include "Translator.h"
00025
00026 namespace MosesServer
00027 {
00028 class
00029 TranslationRequest : public virtual Moses::TranslationTask
00030 {
00031 boost::condition_variable& m_cond;
00032 boost::mutex& m_mutex;
00033 bool m_done;
00034
00035 xmlrpc_c::paramList const& m_paramList;
00036 std::map<std::string, xmlrpc_c::value> m_retData;
00037 std::map<uint32_t,float> m_bias;
00038
00039 Translator* m_translator;
00040 std::string m_source_string, m_target_string;
00041 bool m_withAlignInfo;
00042 bool m_withWordAlignInfo;
00043 bool m_withGraphInfo;
00044 bool m_withTopts;
00045 bool m_withScoreBreakdown;
00046 uint64_t m_session_id;
00047
00048 void
00049 parse_request();
00050
00051 void
00052 parse_request(std::map<std::string, xmlrpc_c::value> const& req);
00053
00054 virtual void
00055 run_chart_decoder();
00056
00057 virtual void
00058 run_phrase_decoder();
00059
00060 void
00061 pack_hypothesis(const Moses::Manager& manager,
00062 std::vector<Moses::Hypothesis const* > const& edges,
00063 std::string const& key,
00064 std::map<std::string, xmlrpc_c::value> & dest) const;
00065
00066 void
00067 pack_hypothesis(const Moses::Manager& manager, Moses::Hypothesis const* h,
00068 std::string const& key,
00069 std::map<std::string, xmlrpc_c::value> & dest) const;
00070
00071 void
00072 add_phrase_aln_info(Moses::Hypothesis const& h,
00073 std::vector<xmlrpc_c::value>& aInfo) const;
00074
00075 void
00076 outputChartHypo(std::ostream& out, const Moses::ChartHypothesis* hypo);
00077
00078 bool
00079 compareSearchGraphNode(const Moses::SearchGraphNode& a,
00080 const Moses::SearchGraphNode& b);
00081
00082 void
00083 insertGraphInfo(Moses::Manager& manager,
00084 std::map<std::string, xmlrpc_c::value>& retData);
00085 void
00086 outputNBest(Moses::Manager const& manager,
00087 std::map<std::string, xmlrpc_c::value>& retData);
00088
00089 void
00090 insertTranslationOptions(Moses::Manager& manager,
00091 std::map<std::string, xmlrpc_c::value>& retData);
00092 protected:
00093 TranslationRequest(xmlrpc_c::paramList const& paramList,
00094 boost::condition_variable& cond,
00095 boost::mutex& mut);
00096
00097 public:
00098
00099 static
00100 boost::shared_ptr<TranslationRequest>
00101 create(Translator* translator,
00102 xmlrpc_c::paramList const& paramList,
00103 boost::condition_variable& cond,
00104 boost::mutex& mut);
00105
00106
00107 virtual bool
00108 DeleteAfterExecution() {
00109 return false;
00110 }
00111
00112 bool
00113 IsDone() const {
00114 return m_done;
00115 }
00116
00117 std::map<std::string, xmlrpc_c::value> const&
00118 GetRetData() {
00119 return m_retData;
00120 }
00121
00122 void
00123 Run();
00124
00125
00126 };
00127
00128 }