File size: 1,700 Bytes
158b61b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
/*
* InputPaths.cpp
*
* Created on: 23 Oct 2015
* Author: hieu
*/
#include <iostream>
#include "../InputPathsBase.h"
#include "../System.h"
#include "../legacy/Range.h"
#include "Manager.h"
#include "Sentence.h"
using namespace std;
namespace Moses2
{
void InputPaths::Init(const InputType &input, const ManagerBase &mgr)
{
const Sentence &sentence = static_cast<const Sentence&>(input);
MemPool &pool = mgr.GetPool();
size_t numPt = mgr.system.mappings.size();
size_t size = sentence.GetSize();
size_t maxLength = min(size, mgr.system.options.search.max_phrase_length);
m_matrix = new (pool.Allocate<Matrix<InputPath*> >()) Matrix<InputPath*>(pool,
size, maxLength);
m_matrix->Init(NULL);
// create blank path for initial hypo
Range range(NOT_FOUND, NOT_FOUND);
SubPhrase<Moses2::Word> subPhrase = sentence.GetSubPhrase(NOT_FOUND, NOT_FOUND);
m_blank = new (pool.Allocate<InputPath>()) InputPath(pool, subPhrase, range,
numPt, NULL);
// create normal paths of subphrases through the sentence
for (size_t startPos = 0; startPos < size; ++startPos) {
const InputPath *prefixPath = NULL;
for (size_t phaseSize = 1; phaseSize <= maxLength; ++phaseSize) {
size_t endPos = startPos + phaseSize - 1;
if (endPos >= size) {
break;
}
SubPhrase<Moses2::Word> subPhrase = sentence.GetSubPhrase(startPos, phaseSize);
Range range(startPos, endPos);
InputPath *path = new (pool.Allocate<InputPath>()) InputPath(pool,
subPhrase, range, numPt, prefixPath);
m_inputPaths.push_back(path);
prefixPath = path;
m_matrix->SetValue(startPos, phaseSize - 1, path);
}
}
}
}
|