diff options
author | Ulrich Germann <ugermann@inf.ed.ac.uk> | 2015-03-21 18:54:52 +0300 |
---|---|---|
committer | Ulrich Germann <ugermann@inf.ed.ac.uk> | 2015-03-21 18:56:20 +0300 |
commit | 85d2567b57af592a3a902209c7b0f3675576aac7 (patch) | |
tree | 041cb33d01270ba5a4723ea38ed13338ce69f971 | |
parent | ee4e396a4dc64627c284dee5f26114b57e44b564 (diff) |
Renamed MosesServer::TranslationTask to MosesServer::TranslationRequest and made that a subtype of Moses::TranslationTask to avoid name confusion.
-rw-r--r-- | moses/server/TranslationRequest.cpp | 79 | ||||
-rw-r--r-- | moses/server/TranslationRequest.h | 25 | ||||
-rw-r--r-- | moses/server/Translator.cpp | 11 |
3 files changed, 75 insertions, 40 deletions
diff --git a/moses/server/TranslationRequest.cpp b/moses/server/TranslationRequest.cpp index dba283297..1953a711f 100644 --- a/moses/server/TranslationRequest.cpp +++ b/moses/server/TranslationRequest.cpp @@ -1,18 +1,45 @@ -#include "TranslationTask.h" +#include "TranslationRequest.h" #include <boost/foreach.hpp> namespace MosesServer { - using namespace Moses; using namespace std; + using Moses::Hypothesis; + using Moses::StaticData; + using Moses::WordsRange; + using Moses::ChartHypothesis; + using Moses::Phrase; + using Moses::Manager; + using Moses::SearchGraphNode; + using Moses::TrellisPathList; + using Moses::TranslationOptionCollection; + using Moses::TranslationOptionList; + using Moses::TranslationOption; + using Moses::TargetPhrase; + using Moses::FValue; + using Moses::PhraseDictionaryMultiModel; + using Moses::FindPhraseDictionary; + using Moses::Sentence; + + boost::shared_ptr<TranslationRequest> + TranslationRequest:: + create(xmlrpc_c::paramList const& paramList, + boost::condition_variable& cond, + boost::mutex& mut) + { + boost::shared_ptr<TranslationRequest> ret; + ret.reset(new TranslationRequest(paramList,cond, mut)); + ret->m_self = ret; + return ret; + } void - TranslationTask:: + TranslationRequest:: Run() { parse_request(m_paramList.getStruct(0)); - StaticData const& SD = Moses::StaticData::Instance(); + Moses::StaticData const& SD = Moses::StaticData::Instance(); //Make sure alternative paths are retained, if necessary if (m_withGraphInfo || m_nbestSize>0) @@ -37,7 +64,7 @@ namespace MosesServer /// add phrase alignment information from a Hypothesis void - TranslationTask:: + TranslationRequest:: add_phrase_aln_info(Hypothesis const& h, vector<xmlrpc_c::value>& aInfo) const { if (!m_withAlignInfo) return; @@ -52,7 +79,7 @@ namespace MosesServer } void - TranslationTask:: + TranslationRequest:: outputChartHypo(ostream& out, const ChartHypothesis* hypo) { Phrase outPhrase(20); @@ -67,13 +94,13 @@ namespace MosesServer } bool - TranslationTask:: + TranslationRequest:: compareSearchGraphNode(const Moses::SearchGraphNode& a, const Moses::SearchGraphNode& b) { return a.hypo->GetId() < b.hypo->GetId(); } void - TranslationTask:: + TranslationRequest:: insertGraphInfo(Manager& manager, map<string, xmlrpc_c::value>& retData) { using xmlrpc_c::value_int; @@ -110,7 +137,7 @@ namespace MosesServer } void - TranslationTask:: + TranslationRequest:: output_phrase(ostream& out, Phrase const& phrase) const { if (!m_reportAllFactors) @@ -122,7 +149,7 @@ namespace MosesServer } void - TranslationTask:: + TranslationRequest:: outputNBest(const Manager& manager, map<string, xmlrpc_c::value>& retData) { TrellisPathList nBestList; @@ -151,7 +178,7 @@ namespace MosesServer } void - TranslationTask:: + TranslationRequest:: insertTranslationOptions(Moses::Manager& manager, std::map<std::string, xmlrpc_c::value>& retData) { @@ -197,14 +224,14 @@ namespace MosesServer return (params.find(key) != params.end()); } - TranslationTask:: - TranslationTask(xmlrpc_c::paramList const& paramList, + TranslationRequest:: + TranslationRequest(xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut) : m_cond(cond), m_mutex(mut), m_done(false), m_paramList(paramList) { } void - TranslationTask:: + TranslationRequest:: parse_request(std::map<std::string, xmlrpc_c::value> const& params) { // parse XMLRPC request // params_t const params = m_paramList.getStruct(0); @@ -215,8 +242,8 @@ namespace MosesServer params_t::const_iterator si = params.find("text"); if (si == params.end()) throw xmlrpc_c::fault("Missing source text", xmlrpc_c::fault::CODE_PARSE); - m_source = xmlrpc_c::value_string(si->second); - XVERBOSE(1,"Input: " << m_source << endl); + m_source_string = xmlrpc_c::value_string(si->second); + XVERBOSE(1,"Input: " << m_source_string << endl); m_withAlignInfo = check(params, "align"); m_withWordAlignInfo = check(params, "word-align"); @@ -258,11 +285,11 @@ namespace MosesServer void - TranslationTask:: + TranslationRequest:: run_chart_decoder() { - Moses::TreeInput tinput(NULL); - istringstream buf(m_source + "\n"); + Moses::TreeInput tinput; + istringstream buf(m_source_string + "\n"); tinput.Read(buf, StaticData::Instance().GetInputFactorOrder()); Moses::ChartManager manager(tinput); @@ -272,8 +299,8 @@ namespace MosesServer ostringstream out; outputChartHypo(out,hypo); - m_target = out.str(); - m_retData["text"] = xmlrpc_c::value_string(m_target); + m_target_string = out.str(); + m_retData["text"] = xmlrpc_c::value_string(m_target_string); if (m_withGraphInfo) { @@ -281,10 +308,10 @@ namespace MosesServer manager.OutputSearchGraphMoses(sgstream); m_retData["sg"] = xmlrpc_c::value_string(sgstream.str()); } - } // end of TranslationTask::run_chart_decoder() + } // end of TranslationRequest::run_chart_decoder() void - TranslationTask:: + TranslationRequest:: pack_hypothesis(vector<Hypothesis const* > const& edges, string const& key, map<string, xmlrpc_c::value> & dest) const { @@ -313,7 +340,7 @@ namespace MosesServer } void - TranslationTask:: + TranslationRequest:: pack_hypothesis(Hypothesis const* h, string const& key, map<string, xmlrpc_c::value>& dest) const { @@ -326,10 +353,10 @@ namespace MosesServer void - TranslationTask:: + TranslationRequest:: run_phrase_decoder() { - Manager manager(Sentence(NULL,0, m_source)); + Manager manager(Sentence(0, m_source_string)); // if (m_bias.size()) manager.SetBias(&m_bias); manager.Decode(); diff --git a/moses/server/TranslationRequest.h b/moses/server/TranslationRequest.h index 4fedd75b8..89b3c5097 100644 --- a/moses/server/TranslationRequest.h +++ b/moses/server/TranslationRequest.h @@ -5,9 +5,6 @@ #include <map> #include <vector> -#include <xmlrpc-c/base.hpp> - - #ifdef WITH_THREADS #include <boost/thread.hpp> #endif @@ -20,11 +17,14 @@ #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> namespace MosesServer { class - TranslationTask : public virtual Moses::Task + TranslationRequest : public virtual Moses::TranslationTask { boost::condition_variable& m_cond; boost::mutex& m_mutex; @@ -34,7 +34,7 @@ namespace MosesServer std::map<std::string, xmlrpc_c::value> m_retData; std::map<uint32_t,float> m_bias; // for biased sampling - std::string m_source, m_target; + std::string m_source_string, m_target_string; bool m_withAlignInfo; bool m_withWordAlignInfo; bool m_withGraphInfo; @@ -90,12 +90,19 @@ namespace MosesServer void insertTranslationOptions(Moses::Manager& manager, std::map<std::string, xmlrpc_c::value>& retData); - - public: - - TranslationTask(xmlrpc_c::paramList const& paramList, + protected: + TranslationRequest(xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut); + + public: + + static + boost::shared_ptr<TranslationRequest> + create(xmlrpc_c::paramList const& paramList, + boost::condition_variable& cond, + boost::mutex& mut); + virtual bool DeleteAfterExecution() { return false; } diff --git a/moses/server/Translator.cpp b/moses/server/Translator.cpp index 557020b02..51f863c4b 100644 --- a/moses/server/Translator.cpp +++ b/moses/server/Translator.cpp @@ -1,5 +1,5 @@ #include "Translator.h" -#include "TranslationTask.h" +#include "TranslationRequest.h" namespace MosesServer { @@ -25,12 +25,13 @@ namespace MosesServer { boost::condition_variable cond; boost::mutex mut; - TranslationTask task(paramList,cond,mut); - m_threadPool.Submit(&task); + boost::shared_ptr<TranslationRequest> task + = TranslationRequest::create(paramList,cond,mut); + m_threadPool.Submit(task); boost::unique_lock<boost::mutex> lock(mut); - while (!task.IsDone()) + while (!task->IsDone()) cond.wait(lock); - *retvalP = xmlrpc_c::value_struct(task.GetRetData()); + *retvalP = xmlrpc_c::value_struct(task->GetRetData()); } } |