Exemplo n.º 1
0
        public static string ConjugateNameVerbToPastParticiple(string name)
        {
            ConjugatedVerb conjugations = ConjugatedVerbs.FirstOrDefault(cv => cv.VerbVariations.Any(variation => name.IndexOf(variation, StringComparison.CurrentCultureIgnoreCase) != -1));

            if (conjugations == null)
            {
                return(name);
            }

            // verb past participle
            if (name.IndexOf(conjugations.PastParticipleVerb, StringComparison.CurrentCultureIgnoreCase) != -1)
            {
                return(name);
            }

            // verb
            int index = name.IndexOf(conjugations.Verb, StringComparison.CurrentCultureIgnoreCase);

            if (index != -1)
            {
                return(conjugations.PastParticipleVerb.Substring(0, 1).ToUpper() + conjugations.PastParticipleVerb.Substring(1).ToLower() + "By");
            }

            return(name);
        }
Exemplo n.º 2
0
 // Renvoie true si les deux mots entrés en paramètre sont accordés, sinon false.
 public static bool SontAccordes(VariableWord motVariable, ConjugatedVerb verbeConjugue)
 {
     if (verbeConjugue.GetGender() == motVariable.Gender && verbeConjugue.Number == motVariable.Number)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 3
0
        // Conjugue le verbe à la personne et au temps donnés en paramètre.
        public static void Conjugate(ref Verb verbe, string person, string time, string mode)
        {
            string action;

            if (verbe.Nature == "verbe conjugué")
            {
                action = verbe.Action;
            }
            else
            {
                action = verbe._verbe;
            }
            verbe = new ConjugatedVerb(ConjugationOf(verbe, person, time, mode), person, verbe.Group, time, mode, action, verbe.AuxAvoir,
                                       verbe.AuxEtre, verbe.NonPronominale, verbe.Pronominale, verbe.Transitif, verbe.Intransitif);
        }
Exemplo n.º 4
0
        // Renvoie True si la condition passée en paramètre est vraie, sinon False
        public static bool EvaluerCondition(Condition condition, Word mot)
        {
            switch (condition)
            {
            case Condition.None:
                return(true);

            case Condition.PronPers:
                Pronoun pronom = (Pronoun)mot;
                return(pronom.NatureDetaillee == "pronompersonnel");

            case Condition.VerbEtat:
                ConjugatedVerb verbe = (ConjugatedVerb)mot;
                return(ConjugatedVerb.IsAStateVerb(verbe));

            case Condition.PasVerbEtat:
                ConjugatedVerb verbe2 = (ConjugatedVerb)mot;
                return(!ConjugatedVerb.IsAStateVerb(verbe2));
            }
            return(false);
        }
Exemplo n.º 5
0
        public static void Test_Verbe()
        {
            // MINI PROGRAMME DE TEST POUR LA CONJUGAISON DES VERBES
            Verb   verbe;
            string temps;
            string mode;
            string type;
            string res = "";

            Console.WriteLine(" 1. Je veux entrer des verbes à l'infinitif\n 2. Je veux entrer des verbes conjugués");
            if (Console.ReadLine() == "1")
            {
                type = "verbe infinitif";
            }
            else
            {
                type = "verbe conjugué";
            }

            Console.WriteLine();

            while (true)
            {
                temps = "";
                mode  = "indicatif";
                res   = "";

                Console.WriteLine("Verbe ?\t");
                if (type == "verbe infinitif")
                {
                    verbe = new InfinitiveVerb(Console.ReadLine());
                }
                else
                {
                    verbe = new ConjugatedVerb(Console.ReadLine());
                }

                while (res != "autre")
                {
                    Console.WriteLine("\nMode et temps ?\t");
                    res = Console.ReadLine();

                    if (res == "autre")
                    {
                        break;
                    }

                    // On cherche le mode
                    if (res.Contains("conditionnel"))
                    {
                        mode = "conditionnel";
                    }
                    else if (res.Contains("subjonctif"))
                    {
                        mode = "subjonctif";
                    }
                    else if (res.Contains("impératif"))
                    {
                        mode = "impératif";
                    }
                    else if (res.Contains("participe"))
                    {
                        mode = "participe";
                    }
                    else
                    {
                        mode = "indicatif";
                    }

                    // On cherche le temps
                    if (res.Contains("présent"))
                    {
                        temps = "présent";
                    }

                    else if (mode == "indicatif")
                    {
                        if (res.Contains("imparfait"))
                        {
                            temps = "imparfait";
                        }
                        else if (res.Contains("passé simple"))
                        {
                            temps = "passé simple";
                        }
                        else if (res.Contains("futur simple"))
                        {
                            temps = "futur simple";
                        }
                        else if (res.Contains("composé"))
                        {
                            temps = "passé composé";
                        }
                        else if (res.Contains("parfait"))
                        {
                            temps = "plus-que-parfait";
                        }
                        else if (res.Contains("passé antérieur"))
                        {
                            temps = "passé antérieur";
                        }
                        else if (res.Contains("futur antérieur"))
                        {
                            temps = "futur antérieur";
                        }
                        else if (res.Contains("passé"))
                        {
                            temps = "passé simple";
                        }
                        else if (res.Contains("futur"))
                        {
                            temps = "futur simple";
                        }
                        else
                        {
                            temps = "présent";
                        }
                    }
                    else if (mode == "subjonctif")
                    {
                        if (res.Contains("imparfait"))
                        {
                            temps = "imparfait";
                        }
                        else if (res.Contains("passé"))
                        {
                            temps = "passé";
                        }
                        else if (res.Contains("parfait"))
                        {
                            temps = "plus-que-parfait";
                        }
                        else
                        {
                            temps = "présent";
                        }
                    }
                    else
                    {
                        if (res.Contains("passé"))
                        {
                            temps = "passé";
                        }
                        else
                        {
                            temps = "présent";
                        }
                    }

                    Console.WriteLine();
                    if (type == "verbe infinitif")
                    {
                        if (mode == "impératif")
                        {
                            Console.WriteLine(ConjugationOf(verbe, "2", temps, mode) + " !");
                            Console.WriteLine(ConjugationOf(verbe, "4", temps, mode) + " !");
                            Console.WriteLine(ConjugationOf(verbe, "5", temps, mode) + " !");
                        }
                        else if (mode == "subjonctif")
                        {
                            string leVerbe = ConjugationOf(verbe, "1", temps, mode);
                            if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0]))
                            {
                                Console.WriteLine("que j'" + leVerbe);
                            }
                            else
                            {
                                Console.WriteLine("que je " + ConjugationOf(verbe, "1", temps, mode));
                            }
                            Console.WriteLine("que tu " + ConjugationOf(verbe, "2", temps, mode));
                            Console.WriteLine("qu'il " + ConjugationOf(verbe, "3", temps, mode));
                            Console.WriteLine("que nous " + ConjugationOf(verbe, "4", temps, mode));
                            Console.WriteLine("que vous " + ConjugationOf(verbe, "5", temps, mode));
                            Console.WriteLine("qu'ils " + ConjugationOf(verbe, "6", temps, mode));
                        }
                        else if (mode == "participe")
                        {
                            Console.WriteLine(ConjugationOf(verbe, "1", temps, mode));
                        }
                        else
                        {
                            string leVerbe = ConjugationOf(verbe, "1", temps, mode);
                            if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0]))
                            {
                                Console.WriteLine("J'" + leVerbe);
                            }
                            else
                            {
                                Console.WriteLine("Je " + ConjugationOf(verbe, "1", temps, mode));
                            }
                            Console.WriteLine("Tu " + ConjugationOf(verbe, "2", temps, mode));
                            Console.WriteLine("Il " + ConjugationOf(verbe, "3", temps, mode));
                            Console.WriteLine("Nous " + ConjugationOf(verbe, "4", temps, mode));
                            Console.WriteLine("Vous " + ConjugationOf(verbe, "5", temps, mode));
                            Console.WriteLine("Ils " + ConjugationOf(verbe, "6", temps, mode));
                        }
                    }
                    else
                    {
                        if (mode == "impératif")
                        {
                            Console.WriteLine(ConjugationOf(verbe, "2", temps, mode) + " !");
                            Console.WriteLine(ConjugationOf(verbe, "4", temps, mode) + " !");
                            Console.WriteLine(ConjugationOf(verbe, "5", temps, mode) + " !");
                        }
                        else if (mode == "subjonctif")
                        {
                            string leVerbe = ConjugationOf(verbe, "1", temps, mode);
                            if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0]))
                            {
                                Console.WriteLine("que j'" + leVerbe);
                            }
                            else
                            {
                                Console.WriteLine("que je " + ConjugationOf(verbe, "1", temps, mode));
                            }
                            Console.WriteLine("que tu " + ConjugationOf(verbe, "2", temps, mode));
                            Console.WriteLine("qu'il " + ConjugationOf(verbe, "3", temps, mode));
                            Console.WriteLine("que nous " + ConjugationOf(verbe, "4", temps, mode));
                            Console.WriteLine("que vous " + ConjugationOf(verbe, "5", temps, mode));
                            Console.WriteLine("qu'ils " + ConjugationOf(verbe, "6", temps, mode));
                        }
                        else if (mode == "participe")
                        {
                            Console.WriteLine(ConjugationOf(verbe, "1", temps, mode));
                        }
                        else
                        {
                            string leVerbe = ConjugationOf(verbe, "1", temps, mode);
                            if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0]))
                            {
                                Console.WriteLine("J'" + leVerbe);
                            }
                            else
                            {
                                Console.WriteLine("Je " + ConjugationOf(verbe, "1", temps, mode));
                            }
                            Console.WriteLine("Tu " + ConjugationOf(verbe, "2", temps, mode));
                            Console.WriteLine("Il " + ConjugationOf(verbe, "3", temps, mode));
                            Console.WriteLine("Nous " + ConjugationOf(verbe, "4", temps, mode));
                            Console.WriteLine("Vous " + ConjugationOf(verbe, "5", temps, mode));
                            Console.WriteLine("Ils " + ConjugationOf(verbe, "6", temps, mode));
                        }
                    }
                    Console.WriteLine();
                }
                Console.Clear();
            }


            // POUR CRÉER UN FICHIER TEXTE CONTENANT LA LISTE DES VERBES À AJOUTER
            // Conjugaison.AjoutAutomatiqueVerbe.triVerbes();
        }
Exemplo n.º 6
0
        // Lie les noms et les compléments du nom et place le résultat dans phraseFonction.
        private static void LierNomsComplNom(List <Word> phrase, List <Word[]> phraseFonction)
        {
            for (ushort indiceMotCourant = 0; indiceMotCourant < phrase.Count; indiceMotCourant++)
            {
                Word mot      = phrase[indiceMotCourant];
                bool quiSujet = true;
                // Si on tombe sur un nom ou nom propre...
                if ((mot.Nature == "nom" || mot.Nature == "nom propre") && indiceMotCourant < phrase.Count - 1)
                {
                    VariableWord nomComplete    = (VariableWord)mot;
                    ushort       indiceMotTeste = (ushort)(indiceMotCourant + 1);
                    // On cherche un éventuel complément du nom, qui se situe toujours après le nom.
                    // Le complément du nom est la plupart du temps précédé d'une préposition.
                    // Ainsi, pour savoir si le nom possède un complément du nom, on regarde si une
                    // préposition se trouve après lui.
                    if (phrase[indiceMotTeste].Nature == "préposition")
                    {
                        Word laPreposition = phrase[indiceMotTeste];
                        if (indiceMotTeste < phrase.Count - 1)
                        {
                            indiceMotTeste++;
                            // Si le mot suivant la préposition est et nom, un nom propre, un pronom, un verbe infinitif, ou un adverbe,
                            // la préposition se rattache à ce mot suivant.
                            if (new string[] { "nom", "nom propre", "pronom", "verbe infinitif", "adverbe" }.Contains(phrase[indiceMotTeste].Nature))
                            {
                                phraseFonction.Add(new Word[] { laPreposition, new LinkBetweenWord("PREP"), phrase[indiceMotTeste] });
                            }

                            // On supprime la préposition de la phrase et vu que cela décale les mots vers la gauche, on fait indiceMotTeste-=2
                            // pour retomber sur le nom complément.
                            phrase.RemoveAt(indiceMotTeste - 1);
                            indiceMotTeste--;
                            if (phrase[indiceMotTeste].ToString() == "qui")
                            {
                                indiceMotTeste--;
                                quiSujet = false;
                            }

                            // On traite le cas où le nom complément peut être suivi d'un pronom relatif (qui que quoi dont où -quel)
                            // qui se rattache au nom complément (et non pas au nom complété). La seule façon de savoir si le pronom
                            // relatif "QUI" (sujet) se rattache au nom complément ou au nom complété est de regarder les accords avec
                            // le verbe dans la suite de la phrase, pour voir à quel nom entre le nom complément et le nom complété
                            // conjugue le verbe. Si les deux noms sont du même genre/nombre... on ne peut devenir que grâce au sens de la phrase !
                            // Pour les autres pronoms relatifs (que COD, quoi, dont (= de qui) COI, auquel (= de qui) COI, où CCL),
                            // ils se rattachent la plupart du temps au nom qui se trouve juste avant (donc le nom complément) s'il
                            // n'y a pas de virgule pour les séparer.

                            // Le pronom relatif ne peut se rattacher qu'à un nom, on vérifie donc que le mot soit un nom.
                            // On vérifie également qu'on ne se situe pas au dernier mot, et donc qu'il y a encore des mots après...
                            // Enfin, on regarde si le mot suivant est un pronom.
                            if ((phrase[indiceMotTeste].Nature == "nom" || phrase[indiceMotTeste].Nature == "nom propre") &&
                                indiceMotTeste < phrase.Count - 1 && phrase[indiceMotTeste + 1].Nature == "pronom")
                            {
                                Name    nomComplement = (Name)phrase[indiceMotTeste];
                                Pronoun pronom        = (Pronoun)phrase[indiceMotTeste + 1];
                                // On vérifie que le pronom soit de type relatif.
                                if (pronom.Type.Contains("relatif"))
                                {
                                    // Si le pronom relatif est "qui"...
                                    #region Cas où le pronom relatif est "qui"
                                    if (pronom.ToString() == "qui")
                                    {
                                        // Tant qu'il y a encore un encore un mot après...
                                        for (ushort i = (ushort)(indiceMotTeste + 2); i < phrase.Count; i++)
                                        {
                                            // Si on a trouvé un verbe conjugué...
                                            if (phrase[i].Nature == "verbe conjugué")
                                            {
                                                ConjugatedVerb verbeConjugue = (ConjugatedVerb)phrase[i];

                                                // Si le verbe est conjugué à un temps composé (et donc qu'il possède un participe passé accordable)...
                                                #region Cas où le verbe est à un temps composé
                                                if (verbeConjugue.IsTempsCompose())
                                                {
                                                    // On récupère l'auxiliaire.
                                                    Verb auxConjugue = new ConjugatedVerb(verbeConjugue.GetAuxiliaireConjugue(), verbeConjugue.Person);
                                                    // On le passe à l'infinitif.
                                                    Verb.ToInfinitive(ref auxConjugue);

                                                    // Si le verbe utilise l'auxiliaire être, et que le nom complément est accordé avec le verbe,
                                                    // le pronom relatif remplace le nom complément.
                                                    if (quiSujet && auxConjugue.ToString() == "être" && SontAccordes(nomComplement, verbeConjugue))
                                                    {
                                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                                    }

                                                    // Si le verbe utilise l'auxiliaire être, et que le nom complément est accordé avec le verbe,
                                                    // le pronom relatif remplace le nom complété.
                                                    else if (quiSujet && auxConjugue.ToString() == "être" && SontAccordes(nomComplete, verbeConjugue))
                                                    {
                                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplete });
                                                    }

                                                    // Autrement, le cas par défaut est que le pronom relatif remplace le nom précédent, donc nom complément.
                                                    else
                                                    {
                                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                                    }
                                                }
                                                #endregion

                                                // Sinon, si le verbe n'est pas à un temps composé, on regarde s'il s'agit du verbe être et
                                                // on cherche s'il est suivi d'un adjectif, accordable...
                                                #region Cas où le verbe n'est pas à un temps composé, on cherche un adjectif à la suite.
                                                else if (verbeConjugue.Action == "être" && i < phrase.Count - 1)
                                                {
                                                    // On ne cherche l'adjectif que 4 positions plus loin dans la phrase.
                                                    for (int j = i + 1; j < i + 5; j++)
                                                    {
                                                        // Si on trouve un adjectif...
                                                        if (phrase[j].Nature == "adjectif")
                                                        {
                                                            // Si cet adjectif est accordé avec le nom complément...
                                                            if (SontAccordes(nomComplement, (VariableWord)phrase[j]))
                                                            {
                                                                phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                                            }

                                                            // Sinon, si cet adjectif est accordé avec le nom complété...
                                                            else if (SontAccordes(nomComplete, (VariableWord)phrase[j]))
                                                            {
                                                                phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplete });
                                                            }

                                                            // Autrement, le cas par défaut est que le pronom relatif remplace le nom précédent, donc nom complément.
                                                            else
                                                            {
                                                                phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                                            }

                                                            // On sort du for après le premier adjectif trouvé.
                                                            break;
                                                        }
                                                    }
                                                }
                                                #endregion

                                                break;
                                            }
                                        }
                                    }
                                    #endregion

                                    // Sinon, si le pronom relatif est "que"...
                                    #region Cas où le pronom relatif est "que"
                                    else if (pronom.ToString() == "que")
                                    {
                                        // Tant qu'il y a encore un encore un mot après...
                                        for (ushort i = (ushort)(indiceMotTeste + 2); i < phrase.Count; i++)
                                        {
                                            // Si on a trouvé un verbe conjugué...
                                            if (phrase[i].Nature == "verbe conjugué")
                                            {
                                                ConjugatedVerb verbeConjugue = (ConjugatedVerb)phrase[i];

                                                // Si le verbe est conjugué à un temps composé (et donc qu'il possède un participe passé accordable)...
                                                #region Cas où le verbe est à un temps composé
                                                if (verbeConjugue.IsTempsCompose())
                                                {
                                                    // On récupère l'auxiliaire.
                                                    Verb auxConjugue = new ConjugatedVerb(verbeConjugue.GetAuxiliaireConjugue(), verbeConjugue.Person);
                                                    // On le passe à l'infinitif.
                                                    Verb.ToInfinitive(ref auxConjugue);

                                                    // Si le verbe utilise l'auxiliaire avoir, et que le nom complément est accordé avec le participe passé,
                                                    // le pronom relatif remplace le nom complément (car avec avoir, le participe passé s'accorde avec le COD
                                                    // si ce dernier se situe avant le verbe).
                                                    if (auxConjugue.ToString() == "avoir" && SontAccordes(nomComplement, verbeConjugue))
                                                    {
                                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                                    }

                                                    // Si le verbe utilise l'auxiliaire être, et que le nom complément est accordé avec le verbe,
                                                    // le pronom relatif remplace le nom complété.
                                                    else if (auxConjugue.ToString() == "avoir" && SontAccordes(nomComplete, verbeConjugue))
                                                    {
                                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplete });
                                                    }

                                                    // Autrement, le cas par défaut est que le pronom relatif remplace le nom précédent, donc nom complément.
                                                    else
                                                    {
                                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                                    }
                                                }
                                                #endregion

                                                break;
                                            }
                                        }
                                    }
                                    #endregion

                                    // Sinon, si le pronom relatif est "dont", "auquel", "où"...
                                    #region Cas où le pronom relatif est "dont", "auquel", "où"
                                    else if (new string[] { "dont", "auquel", "où" }.Contains(pronom.ToString()))
                                    {
                                        phraseFonction.Add(new Word[] { pronom, new LinkBetweenWord("REMPLACE"), nomComplement });
                                    }
                                    #endregion
                                }
                            }
                        }
                    }

                    // TODO: Traiter les rares cas où le complément du nom n'est pas séparé du nom par une préposition.
                }
            }
        }