Newer
Older
#include "NeuralNetwork.hpp"
std::vector<long> NeuralNetworkImpl::extractContext(Config & config, Dict & dict) const
{
std::stack<int> leftContext;
for (int index = config.getWordIndex()-1; config.has(0,index,0) && (int)leftContext.size() < leftBorder; --index)
if (config.isToken(index))
leftContext.push(dict.getIndexOrInsert(config.getLastNotEmptyConst("FORM", index)));
std::vector<long> context;
while ((int)context.size() < leftBorder-(int)leftContext.size())
context.emplace_back(dict.getIndexOrInsert(Dict::nullValueStr));
while (!leftContext.empty())
{
context.emplace_back(leftContext.top());
leftContext.pop();
}
for (int index = config.getWordIndex(); config.has(0,index,0) && (int)context.size() < leftBorder+rightBorder+1; ++index)
if (config.isToken(index))
context.emplace_back(dict.getIndexOrInsert(config.getLastNotEmptyConst("FORM", index)));
while ((int)context.size() < leftBorder+rightBorder+1)
context.emplace_back(dict.getIndexOrInsert(Dict::nullValueStr));
for (int i = 0; i < nbStackElements; i++)
if (config.hasStack(i))
context.emplace_back(dict.getIndexOrInsert(config.getLastNotEmptyConst("FORM", config.getStack(i))));
else
context.emplace_back(dict.getIndexOrInsert(Dict::nullValueStr));
return context;
}
int NeuralNetworkImpl::getContextSize() const
{
return 1 + leftBorder + rightBorder + nbStackElements;
}
void NeuralNetworkImpl::setRightBorder(int rightBorder)
{
this->rightBorder = rightBorder;
}
void NeuralNetworkImpl::setLeftBorder(int leftBorder)
{
this->leftBorder = leftBorder;
}
void NeuralNetworkImpl::setNbStackElements(int nbStackElements)
{
this->nbStackElements = nbStackElements;