Skip to content
Snippets Groups Projects
NeuralNetwork.cpp 1.96 KiB
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) && leftContext.size() < columns.size()*leftBorder; --index)
    if (config.isToken(index))
      for (auto & column : columns)
        leftContext.push(dict.getIndexOrInsert(config.getAsFeature(column, index)));

  std::vector<long> context;

  while ((int)context.size() < (int)columns.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) && context.size() < columns.size()*(leftBorder+rightBorder+1); ++index)
    if (config.isToken(index))
      for (auto & column : columns)
        context.emplace_back(dict.getIndexOrInsert(config.getAsFeature(column, index)));
  while (context.size() < columns.size()*(leftBorder+rightBorder+1))
    context.emplace_back(dict.getIndexOrInsert(Dict::nullValueStr));

Franck Dary's avatar
Franck Dary committed
  for (int i = 0; i < nbStackElements; i++)
    for (auto & column : columns)
      if (config.hasStack(i))
        context.emplace_back(dict.getIndexOrInsert(config.getAsFeature(column, config.getStack(i))));
      else
        context.emplace_back(dict.getIndexOrInsert(Dict::nullValueStr));
  return context;
}

int NeuralNetworkImpl::getContextSize() const
{
  return columns.size()*(1 + leftBorder + rightBorder + nbStackElements);
Franck Dary's avatar
Franck Dary committed
}

void NeuralNetworkImpl::setRightBorder(int rightBorder)
{
  this->rightBorder = rightBorder;
}

void NeuralNetworkImpl::setLeftBorder(int leftBorder)
{
  this->leftBorder = leftBorder;
}

void NeuralNetworkImpl::setNbStackElements(int nbStackElements)
{
  this->nbStackElements = nbStackElements;
void NeuralNetworkImpl::setColumns(const std::vector<std::string> & columns)
{
  this->columns = columns;
}