Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.93 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Text;
  3.  
  4. namespace TextAnalysis
  5. {
  6.     static class TextGeneratorTask
  7.     {
  8.         public static string ContinuePhrase(Dictionary<string, string> nextWords, string phraseBeginning, int wordsCount)
  9.         {
  10.             var result = new StringBuilder(phraseBeginning); // данная фраза
  11.             string[] mPhr = phraseBeginning.Split(' ');
  12.             string w1 = mPhr[mPhr.Length - 1];
  13.             // если фраза состоит из двух или более слов
  14.             string w2 = mPhr.Length >= 2 ? mPhr[mPhr.Length - 2] : ""; // запоминаем последние два слова, иначе запомним только одно
  15.  
  16.             for (int i = 0; i < wordsCount; i++) // сколько раз надо добавить слово, столько раз и выполняется цикл
  17.             {
  18.                 var key = (CheckKey(result, w1, w2, nextWords));
  19.                 if (key == string.Empty)
  20.                     break; // если ничего не нашли в словаре, тогда заканчиваем генерацию
  21.                 else
  22.                 {
  23.                     w2 = w1;
  24.                     w1 = nextWords[key];
  25.                 }
  26.             }
  27.             return result.ToString();
  28.         }
  29.  
  30.         private static string CheckKey(StringBuilder result, string w1, string w2, Dictionary<string, string> nextWords)
  31.         {
  32.             string key = (w2 != string.Empty) ? (w2 + ' ' + w1) : w1;
  33.  
  34.             if (!nextWords.ContainsKey(key)) // если не нашли ключ по двум словам
  35.             {
  36.                 if (!nextWords.ContainsKey(w1)) // если не нашли ключ по одному слову
  37.                     return ""; // ничего не добавим и вернем пустую строку
  38.                 key = w1; // если же таковой имеется, то запоминаем этот ключ
  39.             }
  40.             // если же условие не пройдет => имеется ключ из двух слов
  41.             result.Append(' ' + nextWords[key]); // добавляем слово к фразе
  42.             return key;
  43.         }
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement