2008-06-11 14:52:57 +04:00
|
|
|
// $Id$
|
|
|
|
// vim:tabstop=2
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Moses - factored phrase-based language decoder
|
|
|
|
Copyright (C) 2006 University of Edinburgh
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with this library; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
***********************************************************************/
|
|
|
|
|
2010-02-24 14:15:44 +03:00
|
|
|
#ifndef moses_InputType_h
|
|
|
|
#define moses_InputType_h
|
2008-06-11 14:52:57 +04:00
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include "TypeDef.h"
|
|
|
|
#include "Phrase.h"
|
|
|
|
#include "TargetPhraseCollection.h"
|
2008-12-15 15:52:38 +03:00
|
|
|
#include "ReorderingConstraint.h"
|
2011-01-13 03:25:10 +03:00
|
|
|
#include "NonTerminal.h"
|
2008-06-11 14:52:57 +04:00
|
|
|
|
2008-10-09 03:51:26 +04:00
|
|
|
namespace Moses
|
|
|
|
{
|
|
|
|
|
2008-06-11 14:52:57 +04:00
|
|
|
class WordsRange;
|
|
|
|
class Factor;
|
|
|
|
class PhraseDictionary;
|
|
|
|
class TranslationOptionCollection;
|
2010-08-10 17:12:00 +04:00
|
|
|
class TranslationSystem;
|
2012-05-18 14:02:51 +04:00
|
|
|
class ChartTranslationOption;
|
|
|
|
|
2008-06-11 14:52:57 +04:00
|
|
|
//! base class for sentences and confusion networks
|
2011-02-24 16:14:42 +03:00
|
|
|
class InputType
|
2008-06-11 14:52:57 +04:00
|
|
|
{
|
|
|
|
protected:
|
2011-02-24 16:14:42 +03:00
|
|
|
long m_translationId; //< contiguous Id
|
|
|
|
bool m_hasMetaData;
|
|
|
|
long m_segId;
|
|
|
|
ReorderingConstraint m_reorderingConstraint; /**< limits on reordering specified either by "-mp" switch or xml tags */
|
|
|
|
|
2008-06-11 14:52:57 +04:00
|
|
|
public:
|
|
|
|
|
2010-05-04 01:41:28 +04:00
|
|
|
// used in -continue-partial-translation
|
2011-02-24 16:14:42 +03:00
|
|
|
std::vector<bool> m_sourceCompleted;
|
|
|
|
std::string m_initialTargetPhrase;
|
2010-05-04 01:41:28 +04:00
|
|
|
size_t m_frontSpanCoveredLength;
|
2011-02-24 16:14:42 +03:00
|
|
|
// how many words from the beginning are covered
|
2010-05-04 01:39:23 +04:00
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
InputType(long translationId = 0);
|
|
|
|
virtual ~InputType();
|
2008-06-11 14:52:57 +04:00
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
virtual InputTypeEnum GetType() const = 0;
|
2008-06-11 14:52:57 +04:00
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
long GetTranslationId() const {
|
|
|
|
return m_translationId;
|
|
|
|
}
|
|
|
|
void SetTranslationId(long translationId) {
|
|
|
|
m_translationId = translationId;
|
|
|
|
}
|
|
|
|
//! returns the number of words moved
|
|
|
|
virtual int ComputeDistortionDistance(const WordsRange& prev, const WordsRange& current) const;
|
2008-06-11 14:52:57 +04:00
|
|
|
|
|
|
|
//! In a word lattice, tells you if there's a path from node start to node end
|
2011-02-24 16:14:42 +03:00
|
|
|
virtual bool CanIGetFromAToB(size_t start, size_t end) const;
|
|
|
|
|
2008-06-11 14:52:57 +04:00
|
|
|
//! is there a path covering [range] (lattice only, otherwise true)
|
2011-02-24 16:14:42 +03:00
|
|
|
inline bool IsCoveragePossible(const WordsRange& range) const {
|
|
|
|
return CanIGetFromAToB(range.GetStartPos(), range.GetEndPos() + 1);
|
|
|
|
}
|
2008-06-11 14:52:57 +04:00
|
|
|
|
|
|
|
//! In a word lattice, you can't always get from node A to node B
|
2011-02-24 16:14:42 +03:00
|
|
|
inline bool IsExtensionPossible(const WordsRange& prev, const WordsRange& current) const {
|
|
|
|
// return ComputeDistortionDistance(prev, current) < 100000;
|
|
|
|
size_t t = prev.GetEndPos()+1; // 2
|
|
|
|
size_t l = current.GetEndPos()+1; //l=1
|
|
|
|
size_t r = l;
|
|
|
|
if (l<t) {
|
|
|
|
r = t; //r=2
|
|
|
|
} else {
|
|
|
|
l = t;
|
|
|
|
}
|
|
|
|
if (!CanIGetFromAToB(l,r)) return false;
|
|
|
|
|
|
|
|
// there's another check here: a current span may end at a place that previous could get to,
|
|
|
|
// but it may not *START* at a place it can get to. We'll also have to check if we're going left or right
|
|
|
|
|
|
|
|
r = current.GetStartPos();
|
|
|
|
l = prev.GetEndPos()+1;
|
|
|
|
if (l == r) return true;
|
|
|
|
if (prev.GetEndPos() > current.GetStartPos()) {
|
|
|
|
r = prev.GetStartPos();
|
|
|
|
l = current.GetEndPos()+1;
|
|
|
|
if (r == l) return true;
|
|
|
|
}
|
|
|
|
return CanIGetFromAToB(l,r);
|
|
|
|
}
|
|
|
|
|
|
|
|
//! number of words in this sentence/confusion network
|
|
|
|
virtual size_t GetSize() const =0;
|
|
|
|
|
|
|
|
//! populate this InputType with data from in stream
|
|
|
|
virtual int Read(std::istream& in,const std::vector<FactorType>& factorOrder) =0;
|
|
|
|
|
|
|
|
//! Output debugging info to stream out
|
|
|
|
virtual void Print(std::ostream&) const =0;
|
|
|
|
|
|
|
|
//! create trans options specific to this InputType
|
|
|
|
virtual TranslationOptionCollection* CreateTranslationOptionCollection(const TranslationSystem* system) const=0;
|
|
|
|
|
|
|
|
//! return substring. Only valid for Sentence class. TODO - get rid of this fn
|
|
|
|
virtual Phrase GetSubString(const WordsRange&) const =0;
|
|
|
|
|
|
|
|
//! return substring at a particular position. Only valid for Sentence class. TODO - get rid of this fn
|
|
|
|
virtual const Word& GetWord(size_t pos) const=0;
|
|
|
|
|
|
|
|
//! Returns the reordering constraints
|
|
|
|
const ReorderingConstraint& GetReorderingConstraint() const {
|
|
|
|
return m_reorderingConstraint;
|
|
|
|
};
|
|
|
|
|
|
|
|
virtual const NonTerminalSet &GetLabelSet(size_t startPos, size_t endPos) const = 0;
|
|
|
|
|
2012-05-18 14:02:51 +04:00
|
|
|
virtual std::vector <ChartTranslationOption*> GetXmlChartTranslationOptions() const;
|
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
TO_STRING();
|
|
|
|
|
2008-06-11 14:52:57 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
std::ostream& operator<<(std::ostream&,InputType const&);
|
|
|
|
|
2008-10-09 03:51:26 +04:00
|
|
|
}
|
|
|
|
|
2010-02-24 14:15:44 +03:00
|
|
|
#endif
|