public static List <Word> RassemblerGN(List <Word> phraseArg) { List <MyTuple <Mask, int, int> > tousLesMaskTrouves = TrouverGroupesNominaux(phraseArg); List <Word> phrase = new List <Word>(phraseArg); GroupeNominal gn = new GroupeNominal(); int reducTaillePhraseOld = 0; int reducTaillePhraseNew = 0; // Pour chaque GN trouvé, on rassemble les mots qu'il comprend for (int i = 0; i < tousLesMaskTrouves.Count; i++) { reducTaillePhraseNew += tousLesMaskTrouves[i].Third - 1; // On crée un groupe nominal qui contient les mots pourvus de leur fonction gn = new GroupeNominal(CreateMotFonction(phraseArg.GetRange(tousLesMaskTrouves[i].Second, tousLesMaskTrouves[i].Third), tousLesMaskTrouves[i].First.fonctionMask).ToArray()); // On supprime ces mots de la phrase et on y insert le gn à la place phrase.RemoveRange(tousLesMaskTrouves[i].Second - reducTaillePhraseOld, tousLesMaskTrouves[i].Third); phrase.Insert(tousLesMaskTrouves[i].Second - reducTaillePhraseOld, gn); reducTaillePhraseOld = reducTaillePhraseNew; } return(phrase); }
// Attribue une fonction grammaticale à chaque mot de la phrase. public static List <MotFonction> CreateMotFonction(List <Word> phrase, FonctionMaskNugget[] listFonction) { List <MotFonction> resFonction = new List <MotFonction>(); for (int i = 0; i < phrase.Count(); i++) { if (phrase[i].Nature == "GN") { GroupeNominal gn = (GroupeNominal)phrase[i]; gn.ModifierLienChefGN(listFonction[i].fonction, phrase[i + listFonction[i].cibleLien]); } resFonction.Add(new MotFonction(phrase[i], listFonction[i].fonction, phrase[i + listFonction[i].cibleLien])); } return(resFonction); }