Beispiel #1
0
 public string GetVerb(WordGender gen, WordTime time)
 {
     return((time == WordTime.Future) ? "с" : "" + WordBase + Finalizes[(int)gen, (int)time]);
 }
Beispiel #2
0
        /// <summary>
        /// Генерирует предложение
        /// </summary>
        /// <param name="pattern">Структура предложения</param>
        /// <returns>Предложение</returns>
        public static string Generate(string pattern)
        {
            List <Word> Unterminates = GetUnterminates(pattern.Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries));
            bool        solved       = false;
            List <Word> Sentence     = Unterminates;

            while (!solved)
            {
                solved = true;
                List <Word> newSentence = new List <Word>();
                newSentence.Add(Dot);
                for (int i = Sentence.Count - 1; i >= 0; i--)
                {
                    if (Sentence[i].Type == WordType.Unterminate)
                    {
                        solved = false;
                        var subwords = SelectPath(Sentence[i] as UnTerminateWord);
                        for (int k = 0; k < subwords.Count; k++)
                        {
                            if (subwords[k].Type == WordType.Terminate)
                            {
                                ((TerminateWord)subwords[k]).SpellPart = ((UnTerminateWord)Sentence[i]).SpellPart;
                            }
                        }

                        newSentence.InsertRange(0, subwords);
                    }
                    else if (Sentence[i] != Dot)
                    {
                        newSentence.Insert(0, Sentence[i]);
                    }
                }

                if (!solved)
                {
                    Sentence = newSentence;
                }
            }

            var           TSentence = Sentence.Select(word => word as TerminateWord).ToList();
            StringBuilder builder   = new StringBuilder();
            WordTime      time      = (WordTime)Randomize(0, 2);

            for (int i = 0; i < TSentence.Count; i++)
            {
                TerminateWord tword   = TSentence[i];
                string        wordStr = "";
                switch (tword.SentencePart)
                {
                case Terminate.Существительное:
                    wordStr = (tword as Noun).GetNoun();
                    break;

                case Terminate.Глагол:
                {
                    var        verb = (tword as Verb);
                    var        noun = TSentence.First(word => word.SentencePart == Terminate.Существительное);
                    WordGender gen  = (noun as Noun).Gender;
                    gen     = (noun.SpellPart == UnTerminate.Перечисление) ? WordGender.They : gen;
                    wordStr = verb.GetVerb(gen, time);
                    break;
                }

                case Terminate.Прилагательное:
                {
                    var        adj  = (tword as Adjective);
                    var        noun = TSentence.First(word => word.SentencePart == Terminate.Существительное);
                    WordGender gen  = (noun as Noun).Gender;
                    gen     = (noun.SpellPart == UnTerminate.Перечисление) ? WordGender.They : gen;
                    wordStr = adj.GetAdjective(gen);
                    break;
                }

                case Terminate.Предлог:
                {
                    wordStr = (tword as Pretext).Name;
                    break;
                }

                case Terminate.Союз:
                {
                    wordStr = (tword as Union).Name;
                    break;
                }

                default:
                    break;
                }
                wordStr = (i > 0) ? wordStr : wordStr.First().ToString().ToUpper() + wordStr.Substring(1);
                wordStr = (tword == Dot || tword == Comma || i == 0) ? wordStr : " " + wordStr;
                builder.Append(wordStr);
            }
            return(builder.ToString());
        }