2006-07-04 22:04:38 +04:00
|
|
|
// $Id$
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Moses - factored phrase-based language decoder
|
|
|
|
Copyright (c) 2006 University of Edinburgh
|
|
|
|
All rights reserved.
|
|
|
|
|
2011-02-24 15:39:29 +03:00
|
|
|
Redistribution and use in source and binary forms, with or without modification,
|
2006-07-04 22:04:38 +04:00
|
|
|
are permitted provided that the following conditions are met:
|
|
|
|
|
2011-02-24 15:39:29 +03:00
|
|
|
* Redistributions of source code must retain the above copyright notice,
|
2006-07-04 22:04:38 +04:00
|
|
|
this list of conditions and the following disclaimer.
|
2011-02-24 15:39:29 +03:00
|
|
|
* Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
this list of conditions and the following disclaimer in the documentation
|
2006-07-04 22:04:38 +04:00
|
|
|
and/or other materials provided with the distribution.
|
2011-02-24 15:39:29 +03:00
|
|
|
* Neither the name of the University of Edinburgh nor the names of its contributors
|
|
|
|
may be used to endorse or promote products derived from this software
|
2006-07-04 22:04:38 +04:00
|
|
|
without specific prior written permission.
|
|
|
|
|
2011-02-24 15:39:29 +03:00
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
|
|
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
|
|
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
2006-07-04 22:04:38 +04:00
|
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
// example file on how to use moses library
|
|
|
|
|
2010-02-24 14:15:44 +03:00
|
|
|
#ifndef moses_cmd_IOWrapper_h
|
|
|
|
#define moses_cmd_IOWrapper_h
|
2006-07-04 22:04:38 +04:00
|
|
|
|
2012-05-28 20:29:46 +04:00
|
|
|
#include <cassert>
|
2006-07-04 22:04:38 +04:00
|
|
|
#include <fstream>
|
2010-02-17 20:25:56 +03:00
|
|
|
#include <ostream>
|
2006-07-04 22:04:38 +04:00
|
|
|
#include <vector>
|
2011-11-18 17:41:24 +04:00
|
|
|
#include "util/check.hh"
|
2010-02-17 20:25:56 +03:00
|
|
|
|
2006-07-04 22:04:38 +04:00
|
|
|
#include "TypeDef.h"
|
|
|
|
#include "Sentence.h"
|
2008-10-09 03:51:26 +04:00
|
|
|
#include "FactorTypeSet.h"
|
|
|
|
#include "FactorCollection.h"
|
|
|
|
#include "Hypothesis.h"
|
2011-02-16 19:50:55 +03:00
|
|
|
#include "OutputCollector.h"
|
2008-10-09 03:51:26 +04:00
|
|
|
#include "TrellisPathList.h"
|
|
|
|
#include "InputFileStream.h"
|
|
|
|
#include "InputType.h"
|
2009-08-07 20:47:54 +04:00
|
|
|
#include "WordLattice.h"
|
2010-03-16 14:34:50 +03:00
|
|
|
#include "LatticeMBR.h"
|
2006-07-04 22:04:38 +04:00
|
|
|
|
2012-06-29 07:19:28 +04:00
|
|
|
/** Helper class that holds misc variables to write data out to command line.
|
|
|
|
*/
|
2008-08-05 04:24:45 +04:00
|
|
|
class IOWrapper
|
2006-07-04 22:04:38 +04:00
|
|
|
{
|
|
|
|
protected:
|
2011-02-24 15:39:29 +03:00
|
|
|
long m_translationId;
|
|
|
|
|
|
|
|
const std::vector<Moses::FactorType> &m_inputFactorOrder;
|
|
|
|
const std::vector<Moses::FactorType> &m_outputFactorOrder;
|
|
|
|
const Moses::FactorMask &m_inputFactorUsed;
|
|
|
|
std::string m_inputFilePath;
|
|
|
|
Moses::InputFileStream *m_inputFile;
|
|
|
|
std::istream *m_inputStream;
|
|
|
|
std::ostream *m_nBestStream
|
|
|
|
,*m_outputWordGraphStream,*m_outputSearchGraphStream;
|
2010-05-08 19:51:59 +04:00
|
|
|
std::ostream *m_detailedTranslationReportingStream;
|
2011-02-24 15:39:29 +03:00
|
|
|
std::ofstream *m_alignmentOutputStream;
|
|
|
|
bool m_surpressSingleBestOutput;
|
|
|
|
|
|
|
|
void Initialization(const std::vector<Moses::FactorType> &inputFactorOrder
|
|
|
|
, const std::vector<Moses::FactorType> &outputFactorOrder
|
|
|
|
, const Moses::FactorMask &inputFactorUsed
|
|
|
|
, size_t nBestSize
|
|
|
|
, const std::string &nBestFilePath);
|
2008-03-01 02:08:58 +03:00
|
|
|
|
2006-07-04 22:04:38 +04:00
|
|
|
public:
|
2011-02-24 15:39:29 +03:00
|
|
|
IOWrapper(const std::vector<Moses::FactorType> &inputFactorOrder
|
|
|
|
, const std::vector<Moses::FactorType> &outputFactorOrder
|
|
|
|
, const Moses::FactorMask &inputFactorUsed
|
|
|
|
, size_t nBestSize
|
|
|
|
, const std::string &nBestFilePath);
|
|
|
|
|
|
|
|
IOWrapper(const std::vector<Moses::FactorType> &inputFactorOrder
|
|
|
|
, const std::vector<Moses::FactorType> &outputFactorOrder
|
|
|
|
, const Moses::FactorMask &inputFactorUsed
|
|
|
|
, size_t nBestSize
|
|
|
|
, const std::string &nBestFilePath
|
|
|
|
, const std::string &infilePath);
|
|
|
|
~IOWrapper();
|
|
|
|
|
|
|
|
Moses::InputType* GetInput(Moses::InputType *inputType);
|
|
|
|
|
2010-05-11 01:18:47 +04:00
|
|
|
void OutputBestHypo(const Moses::Hypothesis *hypo, long translationId, bool reportSegmentation, bool reportAllFactors);
|
|
|
|
void OutputLatticeMBRNBestList(const std::vector<LatticeMBRSolution>& solutions,long translationId);
|
2011-02-24 15:39:29 +03:00
|
|
|
void Backtrack(const Moses::Hypothesis *hypo);
|
|
|
|
|
|
|
|
void ResetTranslationId() {
|
|
|
|
m_translationId = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::ofstream *GetAlignmentOutputStream() {
|
|
|
|
return m_alignmentOutputStream;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::ostream &GetOutputWordGraphStream() {
|
|
|
|
return *m_outputWordGraphStream;
|
|
|
|
}
|
|
|
|
std::ostream &GetOutputSearchGraphStream() {
|
|
|
|
return *m_outputSearchGraphStream;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::ostream &GetDetailedTranslationReportingStream() {
|
|
|
|
assert (m_detailedTranslationReportingStream);
|
2010-05-08 19:51:59 +04:00
|
|
|
return *m_detailedTranslationReportingStream;
|
2011-02-24 15:39:29 +03:00
|
|
|
}
|
2006-11-22 02:06:30 +03:00
|
|
|
};
|
2009-08-07 20:47:54 +04:00
|
|
|
|
2012-06-29 07:19:28 +04:00
|
|
|
IOWrapper *GetIOWrapper(const Moses::StaticData &staticData);
|
2009-08-07 20:47:54 +04:00
|
|
|
bool ReadInput(IOWrapper &ioWrapper, Moses::InputTypeEnum inputType, Moses::InputType*& source);
|
2012-04-19 01:09:02 +04:00
|
|
|
void OutputBestSurface(std::ostream &out, const Moses::Hypothesis *hypo, const std::vector<Moses::FactorType> &outputFactorOrder, bool reportSegmentation, bool reportAllFactors);
|
2010-08-10 17:12:00 +04:00
|
|
|
void OutputNBest(std::ostream& out, const Moses::TrellisPathList &nBestList, const std::vector<Moses::FactorType>&,
|
2012-05-28 20:29:46 +04:00
|
|
|
const Moses::TranslationSystem* system, long translationId, bool reportSegmentation);
|
2010-04-12 14:04:35 +04:00
|
|
|
void OutputLatticeMBRNBest(std::ostream& out, const std::vector<LatticeMBRSolution>& solutions,long translationId);
|
2011-02-24 15:39:29 +03:00
|
|
|
void OutputBestHypo(const std::vector<Moses::Word>& mbrBestHypo, long /*translationId*/,
|
|
|
|
bool reportSegmentation, bool reportAllFactors, std::ostream& out);
|
2010-05-11 01:18:47 +04:00
|
|
|
void OutputBestHypo(const Moses::TrellisPath &path, long /*translationId*/,bool reportSegmentation, bool reportAllFactors, std::ostream &out);
|
2012-05-28 20:29:46 +04:00
|
|
|
void OutputInput(std::ostream& os, const Moses::Hypothesis* hypo);
|
|
|
|
void OutputAlignment(Moses::OutputCollector* collector, size_t lineNo, const Moses::Hypothesis *hypo);
|
|
|
|
void OutputAlignment(Moses::OutputCollector* collector, size_t lineNo, const Moses::TrellisPath &path);
|
2010-02-24 14:15:44 +03:00
|
|
|
|
|
|
|
#endif
|