diff --git a/reading_machine/include/Config.hpp b/reading_machine/include/Config.hpp index 310e2f442114567b08f470359dc0629839c970d1..21dab0b62b0ee66947e921d90bbe594f3f98c34b 100644 --- a/reading_machine/include/Config.hpp +++ b/reading_machine/include/Config.hpp @@ -91,6 +91,7 @@ class Config void popStack(); bool isComment(std::size_t lineIndex) const; bool isMultiword(std::size_t lineIndex) const; + int getMultiwordSize(std::size_t lineIndex) const; bool isEmptyNode(std::size_t lineIndex) const; bool isToken(std::size_t lineIndex) const; bool moveWordIndex(int relativeMovement); diff --git a/reading_machine/src/Action.cpp b/reading_machine/src/Action.cpp index 94bfee7f9cd589734b78b94d2dafad120ab4f74a..ecbcff7e220bd04769adc1a9ea3fbdcf3072538a 100644 --- a/reading_machine/src/Action.cpp +++ b/reading_machine/src/Action.cpp @@ -287,7 +287,7 @@ Action Action::updateIds() break; util::myThrow("The current sentence is too long to be completly held by the data strucure. Consider increasing SubConfig::SpanSize"); } - if (!config.isToken(i)) + if (config.isComment(i) || config.isEmptyNode(i)) continue; if (config.getLastNotEmptyHypConst(Config::EOSColName, i) == Config::EOSSymbol1) @@ -301,14 +301,16 @@ Action Action::updateIds() for (unsigned int i = firstIndexOfSentence, currentId = 1; i <= config.getStack(0); ++i) { - if (!config.isToken(i)) + if (config.isComment(i) || config.isEmptyNode(i)) continue; if (config.getLastNotEmptyHypConst(Config::EOSColName, i) == Config::EOSSymbol1) break; - config.getFirstEmpty(Config::idColName, i) = fmt::format("{}", currentId); - ++currentId; + if (config.isMultiword(i)) + config.getFirstEmpty(Config::idColName, i) = fmt::format("{}-{}", currentId, currentId+config.getMultiwordSize(i)); + else + config.getFirstEmpty(Config::idColName, i) = fmt::format("{}", currentId++); } }; diff --git a/reading_machine/src/Config.cpp b/reading_machine/src/Config.cpp index dd8ca3ec38c7ce3af5ad0096f6fd97e81ece7403..ca81d9edfc854e33ffee4de7e536a22289575620 100644 --- a/reading_machine/src/Config.cpp +++ b/reading_machine/src/Config.cpp @@ -334,6 +334,12 @@ bool Config::isMultiword(std::size_t lineIndex) const return hasColIndex(idColName) && getConst(idColName, lineIndex, 0).get().find('-') != std::string::npos; } +int Config::getMultiwordSize(std::size_t lineIndex) const +{ + auto splited = util::split(getConst(idColName, lineIndex, 0).get(), '-'); + return std::stoi(std::string(splited[1])) - std::stoi(std::string(splited[0])); +} + bool Config::isEmptyNode(std::size_t lineIndex) const { return hasColIndex(idColName) && getConst(idColName, lineIndex, 0).get().find('.') != std::string::npos;