Skip to content
Snippets Groups Projects
NeuralNetwork.cpp 1.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • #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;
    }