2012-01-26 15:38:40 +04:00
|
|
|
/***********************************************************************
|
|
|
|
Moses - statistical machine translation system
|
|
|
|
Copyright (C) 2006-2012 University of Edinburgh
|
2013-05-29 21:16:15 +04:00
|
|
|
|
2012-01-26 15:38:40 +04:00
|
|
|
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.
|
2013-05-29 21:16:15 +04:00
|
|
|
|
2012-01-26 15:38:40 +04:00
|
|
|
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.
|
2013-05-29 21:16:15 +04:00
|
|
|
|
2012-01-26 15:38:40 +04:00
|
|
|
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
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2012-11-12 23:56:18 +04:00
|
|
|
#include "moses/ChartRuleLookupManager.h"
|
|
|
|
#include "moses/ChartTranslationOptionList.h"
|
|
|
|
#include "moses/NonTerminal.h"
|
2012-11-27 20:57:23 +04:00
|
|
|
#include "moses/TranslationModel/RuleTable/UTrieNode.h"
|
|
|
|
#include "moses/TranslationModel/RuleTable/UTrie.h"
|
2012-11-12 23:56:18 +04:00
|
|
|
#include "moses/StaticData.h"
|
|
|
|
#include "ApplicableRuleTrie.h"
|
|
|
|
#include "StackLattice.h"
|
|
|
|
#include "StackLatticeBuilder.h"
|
|
|
|
#include "StackLatticeSearcher.h"
|
|
|
|
#include "VarSpanTrieBuilder.h"
|
2012-01-26 15:38:40 +04:00
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
namespace Moses
|
|
|
|
{
|
|
|
|
|
|
|
|
class InputType;
|
2012-10-11 19:38:39 +04:00
|
|
|
class ChartCellCollectionBase;
|
2012-01-26 15:38:40 +04:00
|
|
|
class ChartHypothesisCollection;
|
|
|
|
class WordsRange;
|
|
|
|
|
2012-06-29 02:29:46 +04:00
|
|
|
/** @todo what is this?
|
|
|
|
*/
|
2012-01-26 15:38:40 +04:00
|
|
|
class Scope3Parser : public ChartRuleLookupManager
|
|
|
|
{
|
2013-05-29 21:16:15 +04:00
|
|
|
public:
|
2013-07-31 15:25:34 +04:00
|
|
|
Scope3Parser(const ChartParser &parser,
|
2012-10-11 19:38:39 +04:00
|
|
|
const ChartCellCollectionBase &cellColl,
|
2012-01-26 15:38:40 +04:00
|
|
|
const RuleTableUTrie &ruleTable,
|
|
|
|
size_t maxChartSpan)
|
2013-07-31 15:25:34 +04:00
|
|
|
: ChartRuleLookupManager(parser, cellColl)
|
2013-05-29 21:16:15 +04:00
|
|
|
, m_ruleTable(ruleTable)
|
|
|
|
, m_maxChartSpan(maxChartSpan) {
|
2012-01-26 15:38:40 +04:00
|
|
|
Init();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GetChartRuleCollection(
|
|
|
|
const WordsRange &range,
|
2012-10-03 16:27:47 +04:00
|
|
|
ChartParserCallback &outColl);
|
2012-01-26 15:38:40 +04:00
|
|
|
|
2013-05-29 21:16:15 +04:00
|
|
|
private:
|
2012-01-26 15:38:40 +04:00
|
|
|
// Define a callback type for use by StackLatticeSearcher.
|
2013-05-29 21:16:15 +04:00
|
|
|
struct MatchCallback {
|
|
|
|
public:
|
|
|
|
MatchCallback(const WordsRange &range,
|
|
|
|
ChartParserCallback &out)
|
|
|
|
: m_range(range)
|
|
|
|
, m_out(out)
|
|
|
|
, m_tpc(NULL) {}
|
|
|
|
void operator()(const StackVec &stackVec) {
|
|
|
|
m_out.Add(*m_tpc, stackVec, m_range);
|
|
|
|
}
|
|
|
|
const WordsRange &m_range;
|
|
|
|
ChartParserCallback &m_out;
|
|
|
|
const TargetPhraseCollection *m_tpc;
|
2012-01-26 15:38:40 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
void Init();
|
|
|
|
void InitRuleApplicationVector();
|
2013-08-02 21:09:47 +04:00
|
|
|
void FillSentenceMap(SentenceMap &);
|
2012-01-26 15:38:40 +04:00
|
|
|
void AddRulesToCells(const ApplicableRuleTrie &, std::pair<int, int>, int,
|
|
|
|
int);
|
|
|
|
|
|
|
|
const RuleTableUTrie &m_ruleTable;
|
|
|
|
std::vector<std::vector<std::vector<
|
2013-05-29 21:16:15 +04:00
|
|
|
std::pair<const UTrieNode *, const VarSpanNode *> > > > m_ruleApplications;
|
2012-01-26 15:38:40 +04:00
|
|
|
std::auto_ptr<VarSpanNode> m_varSpanTrie;
|
|
|
|
StackVec m_emptyStackVec;
|
|
|
|
const size_t m_maxChartSpan;
|
|
|
|
StackLattice m_lattice;
|
|
|
|
StackLatticeBuilder m_latticeBuilder;
|
|
|
|
std::vector<VarSpanNode::NonTermRange> m_ranges;
|
|
|
|
std::vector<std::vector<bool> > m_quickCheckTable;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace Moses
|