diff options
author | Hieu Hoang <hieuhoang@gmail.com> | 2014-09-30 15:47:28 +0400 |
---|---|---|
committer | Hieu Hoang <hieuhoang@gmail.com> | 2014-09-30 15:47:28 +0400 |
commit | ebd2e724942cf2f96050e470e4d14a217ea3da73 (patch) | |
tree | 40def6a5e0ec16c68b826b528564f07810202f81 | |
parent | c40faed0d6b22faa4acd22414d7a893ceca781e0 (diff) |
separate out class TranslationTask into it's on file
-rw-r--r-- | contrib/other-builds/moses-chart-cmd/.project | 10 | ||||
-rw-r--r-- | moses-chart-cmd/Jamfile | 2 | ||||
-rw-r--r-- | moses-chart-cmd/Main.cpp | 127 | ||||
-rw-r--r-- | moses-chart-cmd/TranslationTask.cpp | 118 | ||||
-rw-r--r-- | moses-chart-cmd/TranslationTask.h | 41 | ||||
-rw-r--r-- | moses-cmd/TranslationTask.cpp | 4 | ||||
-rw-r--r-- | moses-cmd/TranslationTask.h | 4 |
7 files changed, 178 insertions, 128 deletions
diff --git a/contrib/other-builds/moses-chart-cmd/.project b/contrib/other-builds/moses-chart-cmd/.project index 16eb28b21..8ef6c9b35 100644 --- a/contrib/other-builds/moses-chart-cmd/.project +++ b/contrib/other-builds/moses-chart-cmd/.project @@ -102,6 +102,16 @@ <locationURI>PARENT-3-PROJECT_LOC/moses-chart-cmd/Main.h</locationURI> </link> <link> + <name>TranslationTask.cpp</name> + <type>1</type> + <locationURI>PARENT-3-PROJECT_LOC/moses-chart-cmd/TranslationTask.cpp</locationURI> + </link> + <link> + <name>TranslationTask.h</name> + <type>1</type> + <locationURI>PARENT-3-PROJECT_LOC/moses-chart-cmd/TranslationTask.h</locationURI> + </link> + <link> <name>mbr.cpp</name> <type>1</type> <locationURI>PARENT-3-PROJECT_LOC/moses-chart-cmd/mbr.cpp</locationURI> diff --git a/moses-chart-cmd/Jamfile b/moses-chart-cmd/Jamfile index fe84871c7..2c4909ef8 100644 --- a/moses-chart-cmd/Jamfile +++ b/moses-chart-cmd/Jamfile @@ -1,2 +1,2 @@ -exe moses_chart : Main.cpp mbr.cpp ../moses//moses $(TOP)//boost_iostreams ..//boost_filesystem ..//z ; +exe moses_chart : Main.cpp mbr.cpp TranslationTask.cpp ../moses//moses $(TOP)//boost_iostreams ..//boost_filesystem ..//z ; diff --git a/moses-chart-cmd/Main.cpp b/moses-chart-cmd/Main.cpp index 5291738d5..9d10f7b52 100644 --- a/moses-chart-cmd/Main.cpp +++ b/moses-chart-cmd/Main.cpp @@ -57,140 +57,19 @@ POSSIBILITY OF SUCH DAMAGE. #include "moses/ThreadPool.h" #include "moses/ChartManager.h" #include "moses/ChartHypothesis.h" -#include "moses/Incremental.h" #include "moses/FF/StatefulFeatureFunction.h" #include "moses/FF/StatelessFeatureFunction.h" #include "util/usage.hh" #include "util/exception.hh" +#include "TranslationTask.h" + + using namespace std; using namespace Moses; using namespace MosesChartCmd; -/** - * Translates a sentence. - **/ -class TranslationTask : public Task -{ -public: - TranslationTask(InputType *source, IOWrapperChart &ioWrapper, - boost::shared_ptr<HypergraphOutput<ChartManager> > hypergraphOutput) - : m_source(source) - , m_ioWrapper(ioWrapper) - , m_hypergraphOutput(hypergraphOutput) { - } - - ~TranslationTask() { - delete m_source; - } - - void Run() { - const StaticData &staticData = StaticData::Instance(); - const size_t translationId = m_source->GetTranslationId(); - - VERBOSE(2,"\nTRANSLATING(" << translationId << "): " << *m_source); - - if (staticData.GetSearchAlgorithm() == ChartIncremental) { - Incremental::Manager manager(*m_source); - const std::vector<search::Applied> &nbest = manager.ProcessSentence(); - if (!nbest.empty()) { - m_ioWrapper.OutputBestHypo(nbest[0], translationId); - if (staticData.IsDetailedTranslationReportingEnabled()) { - const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); - m_ioWrapper.OutputDetailedTranslationReport(&nbest[0], sentence, translationId); - } - if (staticData.IsDetailedTreeFragmentsTranslationReportingEnabled()) { - const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); - m_ioWrapper.OutputDetailedTreeFragmentsTranslationReport(&nbest[0], sentence, translationId); - } - } else { - m_ioWrapper.OutputBestNone(translationId); - } - if (staticData.GetNBestSize() > 0) - m_ioWrapper.OutputNBestList(nbest, translationId); - return; - } - - ChartManager manager(translationId,*m_source); - manager.ProcessSentence(); - - UTIL_THROW_IF2(staticData.UseMBR(), "Cannot use MBR"); - - // Output search graph in hypergraph format for Kenneth Heafield's lazy hypergraph decoder - if (m_hypergraphOutput.get()) { - m_hypergraphOutput->Write(manager); - } - - - // 1-best - const ChartHypothesis *bestHypo = manager.GetBestHypothesis(); - m_ioWrapper.OutputBestHypo(bestHypo, translationId); - IFVERBOSE(2) { - PrintUserTime("Best Hypothesis Generation Time:"); - } - - if (!staticData.GetAlignmentOutputFile().empty()) { - m_ioWrapper.OutputAlignment(translationId, bestHypo); - } - - if (staticData.IsDetailedTranslationReportingEnabled()) { - const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); - m_ioWrapper.OutputDetailedTranslationReport(bestHypo, sentence, translationId); - } - if (staticData.IsDetailedTreeFragmentsTranslationReportingEnabled()) { - const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); - m_ioWrapper.OutputDetailedTreeFragmentsTranslationReport(bestHypo, sentence, translationId); - } - if (!staticData.GetOutputUnknownsFile().empty()) { - m_ioWrapper.OutputUnknowns(manager.GetParser().GetUnknownSources(), - translationId); - } - - //DIMw - if (staticData.IsDetailedAllTranslationReportingEnabled()) { - const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); - size_t nBestSize = staticData.GetNBestSize(); - std::vector<boost::shared_ptr<ChartKBestExtractor::Derivation> > nBestList; - manager.CalcNBest(nBestSize, nBestList, staticData.GetDistinctNBest()); - m_ioWrapper.OutputDetailedAllTranslationReport(nBestList, manager, sentence, translationId); - } - - // n-best - size_t nBestSize = staticData.GetNBestSize(); - if (nBestSize > 0) { - VERBOSE(2,"WRITING " << nBestSize << " TRANSLATION ALTERNATIVES TO " << staticData.GetNBestFilePath() << endl); - std::vector<boost::shared_ptr<ChartKBestExtractor::Derivation> > nBestList; - manager.CalcNBest(nBestSize, nBestList,staticData.GetDistinctNBest()); - m_ioWrapper.OutputNBestList(nBestList, translationId); - IFVERBOSE(2) { - PrintUserTime("N-Best Hypotheses Generation Time:"); - } - } - - if (staticData.GetOutputSearchGraph()) { - std::ostringstream out; - manager.OutputSearchGraphMoses( out); - OutputCollector *oc = m_ioWrapper.GetSearchGraphOutputCollector(); - UTIL_THROW_IF2(oc == NULL, "File for search graph output not specified"); - oc->Write(translationId, out.str()); - } - - IFVERBOSE(2) { - PrintUserTime("Sentence Decoding Time:"); - } - manager.CalcDecoderStatistics(); - } - -private: - // Non-copyable: copy constructor and assignment operator not implemented. - TranslationTask(const TranslationTask &); - TranslationTask &operator=(const TranslationTask &); - - InputType *m_source; - IOWrapperChart &m_ioWrapper; - boost::shared_ptr<HypergraphOutput<ChartManager> > m_hypergraphOutput; -}; bool ReadInput(IOWrapperChart &ioWrapper, InputTypeEnum inputType, InputType*& source) { diff --git a/moses-chart-cmd/TranslationTask.cpp b/moses-chart-cmd/TranslationTask.cpp new file mode 100644 index 000000000..331288fb3 --- /dev/null +++ b/moses-chart-cmd/TranslationTask.cpp @@ -0,0 +1,118 @@ +#include "TranslationTask.h" +#include "moses/Sentence.h" +#include "moses/StaticData.h" +#include "moses/Incremental.h" +#include "moses/IOWrapperChart.h" +#include "moses/OutputCollector.h" + +using namespace std; +using namespace Moses; +using namespace MosesChartCmd; + +TranslationTask::TranslationTask(InputType *source, IOWrapperChart &ioWrapper, +boost::shared_ptr<HypergraphOutput<ChartManager> > hypergraphOutput) +: m_source(source) +, m_ioWrapper(ioWrapper) +, m_hypergraphOutput(hypergraphOutput) +{} + +TranslationTask::~TranslationTask() { + delete m_source; +} + +void TranslationTask::Run() { +const StaticData &staticData = StaticData::Instance(); +const size_t translationId = m_source->GetTranslationId(); + +VERBOSE(2,"\nTRANSLATING(" << translationId << "): " << *m_source); + +if (staticData.GetSearchAlgorithm() == ChartIncremental) { + Incremental::Manager manager(*m_source); + const std::vector<search::Applied> &nbest = manager.ProcessSentence(); + if (!nbest.empty()) { + m_ioWrapper.OutputBestHypo(nbest[0], translationId); + if (staticData.IsDetailedTranslationReportingEnabled()) { + const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); + m_ioWrapper.OutputDetailedTranslationReport(&nbest[0], sentence, translationId); + } + if (staticData.IsDetailedTreeFragmentsTranslationReportingEnabled()) { + const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); + m_ioWrapper.OutputDetailedTreeFragmentsTranslationReport(&nbest[0], sentence, translationId); + } + } else { + m_ioWrapper.OutputBestNone(translationId); + } + if (staticData.GetNBestSize() > 0) + m_ioWrapper.OutputNBestList(nbest, translationId); + return; +} + +ChartManager manager(translationId,*m_source); +manager.ProcessSentence(); + +UTIL_THROW_IF2(staticData.UseMBR(), "Cannot use MBR"); + +// Output search graph in hypergraph format for Kenneth Heafield's lazy hypergraph decoder +if (m_hypergraphOutput.get()) { + m_hypergraphOutput->Write(manager); +} + + +// 1-best +const ChartHypothesis *bestHypo = manager.GetBestHypothesis(); +m_ioWrapper.OutputBestHypo(bestHypo, translationId); +IFVERBOSE(2) { + PrintUserTime("Best Hypothesis Generation Time:"); +} + +if (!staticData.GetAlignmentOutputFile().empty()) { + m_ioWrapper.OutputAlignment(translationId, bestHypo); +} + +if (staticData.IsDetailedTranslationReportingEnabled()) { + const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); + m_ioWrapper.OutputDetailedTranslationReport(bestHypo, sentence, translationId); +} +if (staticData.IsDetailedTreeFragmentsTranslationReportingEnabled()) { + const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); + m_ioWrapper.OutputDetailedTreeFragmentsTranslationReport(bestHypo, sentence, translationId); +} +if (!staticData.GetOutputUnknownsFile().empty()) { + m_ioWrapper.OutputUnknowns(manager.GetParser().GetUnknownSources(), + translationId); +} + +//DIMw +if (staticData.IsDetailedAllTranslationReportingEnabled()) { + const Sentence &sentence = dynamic_cast<const Sentence &>(*m_source); + size_t nBestSize = staticData.GetNBestSize(); + std::vector<boost::shared_ptr<ChartKBestExtractor::Derivation> > nBestList; + manager.CalcNBest(nBestSize, nBestList, staticData.GetDistinctNBest()); + m_ioWrapper.OutputDetailedAllTranslationReport(nBestList, manager, sentence, translationId); +} + +// n-best +size_t nBestSize = staticData.GetNBestSize(); +if (nBestSize > 0) { + VERBOSE(2,"WRITING " << nBestSize << " TRANSLATION ALTERNATIVES TO " << staticData.GetNBestFilePath() << endl); + std::vector<boost::shared_ptr<ChartKBestExtractor::Derivation> > nBestList; + manager.CalcNBest(nBestSize, nBestList,staticData.GetDistinctNBest()); + m_ioWrapper.OutputNBestList(nBestList, translationId); + IFVERBOSE(2) { + PrintUserTime("N-Best Hypotheses Generation Time:"); + } +} + +if (staticData.GetOutputSearchGraph()) { + std::ostringstream out; + manager.OutputSearchGraphMoses( out); + OutputCollector *oc = m_ioWrapper.GetSearchGraphOutputCollector(); + UTIL_THROW_IF2(oc == NULL, "File for search graph output not specified"); + oc->Write(translationId, out.str()); +} + +IFVERBOSE(2) { + PrintUserTime("Sentence Decoding Time:"); +} +manager.CalcDecoderStatistics(); +} diff --git a/moses-chart-cmd/TranslationTask.h b/moses-chart-cmd/TranslationTask.h new file mode 100644 index 000000000..aefc8b9eb --- /dev/null +++ b/moses-chart-cmd/TranslationTask.h @@ -0,0 +1,41 @@ +#pragma once + +#include <boost/smart_ptr/shared_ptr.hpp> +#include "moses/ThreadPool.h" +#include "moses/ChartManager.h" +#include "moses/HypergraphOutput.h" + +namespace Moses +{ + class InputType; + class OutputCollector; +} + +namespace MosesChartCmd +{ + class IOWrapperChart; +} + +/** + * Translates a sentence. + **/ +class TranslationTask : public Moses::Task +{ +public: + TranslationTask(Moses::InputType *source, MosesChartCmd::IOWrapperChart &ioWrapper, + boost::shared_ptr<Moses::HypergraphOutput<Moses::ChartManager> > hypergraphOutput); + + ~TranslationTask(); + + void Run(); + +private: + // Non-copyable: copy constructor and assignment operator not implemented. + TranslationTask(const TranslationTask &); + TranslationTask &operator=(const TranslationTask &); + + Moses::InputType *m_source; + MosesChartCmd::IOWrapperChart &m_ioWrapper; + boost::shared_ptr<Moses::HypergraphOutput<Moses::ChartManager> > m_hypergraphOutput; +}; + diff --git a/moses-cmd/TranslationTask.cpp b/moses-cmd/TranslationTask.cpp index f5864f75e..65e7e08bc 100644 --- a/moses-cmd/TranslationTask.cpp +++ b/moses-cmd/TranslationTask.cpp @@ -35,6 +35,10 @@ TranslationTask::TranslationTask(size_t lineNumber, m_hypergraphOutput(hypergraphOutput) {} +TranslationTask::~TranslationTask() { + delete m_source; +} + void TranslationTask::Run() { // shorthand for "global data" const StaticData &staticData = StaticData::Instance(); diff --git a/moses-cmd/TranslationTask.h b/moses-cmd/TranslationTask.h index 84a6a8bf5..05b257a6a 100644 --- a/moses-cmd/TranslationTask.h +++ b/moses-cmd/TranslationTask.h @@ -34,9 +34,7 @@ public: bool outputSearchGraphSLF, boost::shared_ptr<Moses::HypergraphOutput<Moses::Manager> > hypergraphOutput); - ~TranslationTask() { - delete m_source; - } + ~TranslationTask(); /** Translate one sentence * gets called by main function implemented at end of this source file */ |