diff --git a/reading_machine/src/Action.cpp b/reading_machine/src/Action.cpp index 7bcca61716f38eb6f7ca61ec015ec849a1161500..29081486964db22cb7f77bdc1f21e63ae653150d 100644 --- a/reading_machine/src/Action.cpp +++ b/reading_machine/src/Action.cpp @@ -581,10 +581,10 @@ Action Action::attach(Config::Object governorObject, int governorIndex, Config:: { auto apply = [governorObject, governorIndex, dependentObject, dependentIndex](Config & config, Action & a) { - long lineIndex = config.getRelativeWordIndex(governorObject, governorIndex); + long govIndex = config.getRelativeWordIndex(governorObject, governorIndex); long depIndex = config.getRelativeWordIndex(dependentObject, dependentIndex); - addHypothesisRelative(Config::headColName, dependentObject, dependentIndex, std::to_string(lineIndex)).apply(config, a); + addHypothesisRelative(Config::headColName, dependentObject, dependentIndex, std::to_string(govIndex)).apply(config, a); addToHypothesisRelative(Config::childsColName, governorObject, governorIndex, std::to_string(depIndex)).apply(config, a); a.data.emplace_back(std::to_string(config.getLastAttached())); config.setLastAttached(depIndex); @@ -602,6 +602,7 @@ Action Action::attach(Config::Object governorObject, int governorIndex, Config:: { if (!config.hasRelativeWordIndex(governorObject, governorIndex) or !config.hasRelativeWordIndex(dependentObject, dependentIndex)) return false; + long govLineIndex = config.getRelativeWordIndex(governorObject, governorIndex); long depLineIndex = config.getRelativeWordIndex(dependentObject, dependentIndex); @@ -612,6 +613,10 @@ Action Action::attach(Config::Object governorObject, int governorIndex, Config:: if (config.getAsFeature(Config::sentIdColName, govLineIndex) != config.getAsFeature(Config::sentIdColName, depLineIndex)) return false; + // Check if dep is not already attached + if (!util::isEmpty(config.getAsFeature(Config::headColName, depLineIndex))) + return false; + // Check for cycles while (govLineIndex != depLineIndex) {