private static string MarkovResponse(int order, IEnumerable <string> lines) { var chain = new MarkovChain <string>(order); foreach (var line in lines) { chain.Add(line.Split()); } var response = string.Join(" ", chain.Chain()); if (response != "") { return(response); } var count = 0; while (response == "") { response = string.Join(" ", chain.Chain()); if (count++ > 10) { return("Chaining failed!"); } } return(response); }
static string GenerateQuote() { Random rand = new Random(); int order = 1; if (rand.NextDouble() > 0.5) { // Add a small chance of a higher order chain. The higher order chains // produce output that is a lot closer to the source text. Too close // to have on all the time. order = 2; } Console.WriteLine("order " + order); MarkovChain <string> chain = GetChain(order); string generatedQuote = string.Join(" ", chain.Chain(rand)); if (generatedQuote.Length > 280) { return(GenerateQuote()); } else { return(generatedQuote); } }
static void Main(string[] args) { var docs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var dir = new DirectoryInfo(docs); var chain = new MarkovChain <string>(3); var nameChain = new MarkovChain <char>(3); foreach (var file in dir.EnumerateFiles()) { chain.Add(File.ReadAllText(file.FullName).Split(' ')); nameChain.Add(file.Name); } var rand = new Random(); Directory.CreateDirectory(docs + "\\ImportantFiles"); for (int i = 0; i < 10; i++) { var filePath = (docs + "\\ImportantFiles\\" + new String(nameChain.Chain(rand).ToArray())); Console.WriteLine(filePath); using (FileStream fs = File.Create(filePath)) { Byte[] info = new UTF8Encoding(true).GetBytes(chain.Chain(rand).Aggregate((a, b) => a + " " + b)); // Add some information to the file. fs.Write(info, 0, info.Length); } } Console.WriteLine("Press any key to exit"); Console.ReadKey(); }
public async Task TalkAsync([Summary("The user to make talk")] string user) { var messages = _messageRepository .Where(x => x.User.ToLower() == user.ToLower()) .ToArray(); if (messages.Length < 25) { await ReplyAsync($"{user} hasn't said enough to make them talk yet"); return; } var chain = new MarkovChain <string>(1); foreach (var message in messages) { var split = message.Content.Split(' '); if (split.Length >= 5) { chain.Add(split); } } await ReplyAsync(string.Join(" ", chain.Chain())); }
public async Task InitTweetViewModel() { _auth = _linqToTwitterAuthorizer.GetAuthorizer(consumerKey, consumerSecret); await _auth.AuthorizeAsync(); //ht--tps://github.com/JoeMayo/LinqToTwitter/wiki/Querying-the-User-Timeline using (var ctx = new TwitterContext(_auth)) { List <Status> tweets = await (from tweet in ctx.Status where tweet.Type == StatusType.User && tweet.ScreenName == "realDonaldTrump" && tweet.Count == 200 /*MaxTweetsToReturn*/ && tweet.SinceID == 1 /*sinceID*/ && tweet.TweetMode == TweetMode.Extended select tweet) .ToListAsync(); Tweets = (from tweet in tweets select new Tweet { StatusID = tweet.StatusID, ScreenName = tweet.User.ScreenNameResponse, Text = tweet.FullText, ImageUrl = tweet.User.ProfileImageUrl }) .ToList(); } var chain = new MarkovChain <string>(1); foreach (var t in Tweets) { chain.Add(t.Text.Split(' '), 1); //foreach(var s in t.Text.Split(' ')) //{ // chain.Add(s, 1); //} } Tweets.Add(new Tweet() { Text = "--------------" }); //String testOutput = String.Empty; var rand = new Random(); for (int i = 0; i < 10; i++) { //var word = new string(chain.Chain(rand).ToArray()); //testOutput += " " + word; var sentence = string.Join(" ", chain.Chain(rand)); Tweets.Add(new Tweet() { Text = sentence }); } //Tweets.Add(new Tweet() { Text = testOutput }); }
static string GetName() { MarkovChain <char> chain = GetChain(); string name = new string(chain.Chain().ToArray()); return(name); }
public string GetRandomStatement(int minimumWords = 10) { var sb = new StringBuilder(); while (sb.ToString().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length < minimumWords) { sb.Append(string.Join(" ", _chain.Chain(_rand)) + " "); } return(sb.ToString().Trim()); }
static void Generate(MarkovChain <string> chain) { var rand = new Random(); while (true) { var sentence = chain.Chain(rand); Console.WriteLine(string.Join(" ", sentence)); Console.ReadLine(); } }
public void GenerateTweets(Int32 number) { var rand = new Random(DateTime.Now.Millisecond); GeneratedTweets = new List <String>(); for (int i = 0; i < number; i++) { var sentence = string.Join(" ", _chain.Chain(rand)); GeneratedTweets.Add(sentence); } }
internal string Generate() { List <string> chainWords = _chain.Chain().ToList(); /* BUG: Sometimes the chain would be "". Unsure if it should be fixed. */ var chain = chainWords.Aggregate("", (current, word) => current + (word + " ")); if (chain == "") { return(Generate()); // C# feels so yucky after writing Go for so long } return(chain); }
public Task Execute(ITriggerArguments arguments, ISlackConnection connection, SlackChatHub chatHub, SlackerContext context) { if (arguments == null || arguments.Arguments.Length != 1) { connection.Say(new BotMessage { ChatHub = chatHub, Text = "Usage: !talk <user>" }); return(Task.CompletedTask); } var user = arguments.Arguments[0]; var messages = context.Messages.Where(x => x.User == user && x.Content.Length > 10); if (!messages.Any()) { connection.Say(new BotMessage { ChatHub = chatHub, Text = $"There aren't enough messages by {arguments.Arguments[0]} to go on" }); return(Task.CompletedTask); } var chain = new MarkovChain <string>(1); foreach (var message in messages) { chain.Add(message.Content.Split(new[] { ' ' }), 1); } var random = new Random(DateTime.UtcNow.Millisecond); var stringBuilder = new StringBuilder(GetRandomMessageStart(user, random)); stringBuilder.Append(">" + string.Join(" ", chain.Chain(random))); connection.Say(new BotMessage { ChatHub = chatHub, Text = stringBuilder.ToString() }); return(Task.CompletedTask); }
// в ответе должно быть # + Hexagram + The Name + The Judgment (прямо из соотв колонок включая значок из колонки Hexagram) public static void generateRandomDailyPhraseUsingMarkov() { var json = File.ReadAllText("C:\\Files\\Dev\\Twittor\\Twittor\\Twittor\\dbSimple.json"); Rootobject divination = JsonConvert.DeserializeObject <Rootobject>(json); var chain = new MarkovChain <string>(1); for (int i = 1; i < 4; i++) { chain.Add(new[] { divination.Divinations[i].Id, divination.Divinations[i].Hexagram }, 1); } var rand = new Random(); for (int i = 0; i < 20; i++) { var sentence = string.Join(" ", chain.Chain(rand)); Console.WriteLine("Sentence#" + i + " " + sentence); } }
public IEnumerable <string> NextLines(int lineCount) { var sentences = new List <string>(); for (var i = 0; i < lineCount; i++) { // Get a random-walk chain and turn into a valid sentence var wordChain = _markovChain.Chain(_random); var sentence = ChainToSentence(wordChain); // Ensure first sentence does not start with conjunction if (sentence.FirstWord().IsConjunction()) { i--; continue; } // Ensure last sentence ends with full stop if (i == 9 && !sentence.EndsWith(".")) { // If last character is a punctuation mark, convert to full stop, append otherwise var lastIndex = sentence.Length - 1; var lastChar = sentence[lastIndex]; if (lastChar.IsPunctuation()) { sentence = sentence.Remove(lastIndex) + '.'; } else { sentence += '.'; } } sentences.Add(sentence); } return(sentences); }
public async Task Hey([Remainder] string message = "hey") { var messages = new List <string>(); // If sentences for fred do not exist for the server, generate them if (!File.Exists($@"{Context.Guild.Id}\{FredID}.txt")) { messages = await GenerateSentenceFile(FredID); } else { messages = File.ReadAllLines($@"{Context.Guild.Id}\{FredID}.txt").ToList(); } var chain = new MarkovChain <string>(3); var tokenizer = new EnglishRuleBasedTokenizer(false); var sentenceDetector = new EnglishMaximumEntropySentenceDetector("EnglishSD.nbin"); messages.ForEach(msg => { var sentences = sentenceDetector.SentenceDetect(msg); foreach (var sentence in sentences) { var tokens = tokenizer.Tokenize(sentence); chain.Add(tokens, tokens.Length); } }); var rand = new Random(); var reply = string.Join(" ", chain.Chain(rand)); if (string.IsNullOrWhiteSpace(reply)) { return; } await Context.Channel.SendMessageAsync(reply); }
public async Task ImpersonateMarkov(CommandContext ctx, DiscordMember member, string[] usertext) { // Start the markov chains var chain = new MarkovChain <string>(1); foreach (var entry in usertext) { var splitentry = entry.Split(" "); int currWeight = 1; for (double i = 0; i < splitentry.Length; i += 1) { currWeight++; } if (currWeight > 10) { currWeight = 10; } chain.Add(splitentry, currWeight); } var rand = new Random(); string sentences = ""; for (int i = 0; i < 5; i++) { sentences += "```\n" + string.Join(" ", chain.Chain(rand)).Replace('`', ' ').Replace('\n', ' ') + "```"; } if (member == null) { await ctx.RespondAsync($"`These messages were generated by Markov Chains`\nHere are some examples of what all collected data sounds like ({usertext.Length} data points):\n{sentences}"); } else { await ctx.RespondAsync($"`These messages were generated by Markov Chains`\nHere are some examples of what {member.Username} sounds like ({usertext.Length} data points):\n{sentences}"); } return; }
async Task HandleMessage(SocketMessage msg) { if (_chain == null) { return; } if (msg.Author.Id == _client.CurrentUser.Id) { return; } if (msg.Channel.Id != LimitedToChannel) { return; } if (string.IsNullOrWhiteSpace(msg.Content)) { return; } Console.WriteLine($"{msg.Author.Username}: {msg.Content}"); var sentence = string.Join(" ", _chain.Chain(_rand)); await msg.Channel.SendMessageAsync(sentence); }
public async Task Generate(IGuildUser user, int count = 1, string language = "eng", int depth = 2) { if (!File.Exists($"{user.Id}_{language}.txt")) { return; } var messages = File.ReadAllLines($"{user.Id}_{language}.txt").ToList(); var chain = new MarkovChain <string>(depth); var tokenizer = new EnglishRuleBasedTokenizer(false); var sentenceDetector = new EnglishMaximumEntropySentenceDetector("EnglishSD.nbin"); messages.ForEach(msg => { var sentences = sentenceDetector.SentenceDetect(msg); foreach (var sentence in sentences) { var tokens = tokenizer.Tokenize(sentence); chain.Add(tokens, tokens.Length); } }); var rand = new Random(); var messageString = ""; for (int i = 0; i < count; i++) { var c = chain.Chain(rand); messageString += ">> " + string.Join(" ", c); if (count > 1 && i < count - 1) { messageString += "\n"; } } await Context.Channel.SendMessageAsync(messageString); }
public async Task Markov(AdaCommandContext ctx) { var gld = ctx.Guild; var chn = ctx.Channel; var msg = ctx.Message; var usr = ctx.User; var chain = new MarkovChain <string>(1); var rnd = new Random(); var mnt = (string)null; var xmu = msg.MentionedUserIds.Select(xid => gld.GetUserAsync(xid).GetAwaiter().GetResult()); var xmr = msg.MentionedRoleIds.Select(xid => gld.GetRole(xid)); var xmc = msg.MentionedChannelIds.Select(xid => gld.GetChannelAsync(xid).GetAwaiter().GetResult()); if (xmu.Count() == 0 && xmr.Count() == 0 && xmc.Count() == 0) { throw new ArgumentException("Missing mention."); } else if (xmu.Count() > 0) { var mus = xmu.First(); mnt = mus.Mention; var chs = xmc; var maxm = 100; var lstm = -1; var msgs = new List <IMessage>(maxm); var msgt = (IEnumerable <IMessage>)null; while (msgs.Count < maxm && lstm != 0) { foreach (var xch in chs) { var xcn = xch as SocketTextChannel; if (msgs.Count == 0) { msgt = await xcn.GetMessagesAsync(100).Flatten(); msgs.AddRange(msgt.Where(xmsg => xmsg.Author != null && xmsg.Author.Id == mus.Id)); } if ((await xcn.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgs.Count)).Flatten()).Count() > 0) { lstm = Math.Max(msgt.Count(), lstm); msgs.AddRange(msgt.Where(xmsg => xmsg.Author != null && xmsg.Author.Id == mus.Id)); } } } foreach (var xmsg in msgs) { chain.Add(xmsg.Content.Split(' '), 1); } } else if (xmr.Count() > 0) { var mrl = xmr.First(); mnt = mrl.Mention; var chs = xmc; var maxm = 100; var lstm = -1; var msgs = new List <IMessage>(maxm); var msgt = (IEnumerable <IMessage>)null; while (msgs.Count < maxm && lstm != 0) { foreach (var xch in chs) { var xcn = xch as SocketTextChannel; if (msgs.Count == 0) { msgt = await xcn.GetMessagesAsync(100).Flatten(); msgs.AddRange(msgt.Where(xmsg => xmsg.Author as SocketGuildUser != null && (xmsg.Author as SocketGuildUser).RoleIds.Contains(mrl.Id))); } if ((await xcn.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgs.Count)).Flatten()).Count() > 0) { lstm = Math.Max(msgt.Count(), lstm); msgs.AddRange(msgt.Where(xmsg => xmsg.Author as SocketGuildUser != null && (xmsg.Author as SocketGuildUser).RoleIds.Contains(mrl.Id))); } } } foreach (var xmsg in msgs) { chain.Add(xmsg.Content.Split(' '), 1); } } else if (xmc.Count() > 0) { var mch = xmc.First() as SocketTextChannel; mnt = mch.Mention; var maxm = 500; var msgs = new IMessage[maxm]; var msgi = 0; var msgt = (IEnumerable <IMessage>)null; msgt = await mch.GetMessagesAsync(100).Flatten(); Array.Copy(msgt.ToArray(), 0, msgs, msgi, msgt.Count()); while (msgi < maxm && (msgt = await mch.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgi)).Flatten()).Count() > 0) { Array.Copy(msgt.ToArray(), 0, msgs, msgi, msgt.Count()); msgi += msgt.Count(); } foreach (var xmsg in msgs) { chain.Add(xmsg.Content.Split(' '), 1); } } var sentence = string.Join(" ", chain.Chain(rnd)); var embed = this.PrepareEmbed("Markov Chain", string.Concat("Markov chain of ", mnt, ": ", sentence), EmbedType.Info); await chn.SendMessageAsync("", false, embed); }
public String GenerateName() { return(new String(_chain.Chain(rand.Next()).ToArray())); }
public static string ReturnMessage() { string Sentence = string.Join(" ", Chain.Chain(_random)); return(Sentence); }