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