#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)); 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); } 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; }